@dcl/sdk 7.0.0-2706600078.commit-85e1525 → 7.0.0-2740047851.commit-db29ac2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../node_modules/@dcl/ecs-math/dist/Vector3.js","../node_modules/@dcl/ecs-math/dist/Scalar.js","../node_modules/@dcl/ecs-math/dist/types.js","../node_modules/@dcl/ecs-math/dist/Quaternion.js","../node_modules/@dcl/ecs-math/dist/index.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/inquire/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/protobufjs/minimal.js","../src/components/generated/pb/Animator.gen.ts","../src/components/generated/Animator.gen.ts","../src/components/generated/pb/AudioSource.gen.ts","../src/components/generated/AudioSource.gen.ts","../src/components/generated/pb/AvatarAttach.gen.ts","../src/components/generated/AvatarAttach.gen.ts","../src/components/generated/pb/common/Color3.gen.ts","../src/components/generated/pb/AvatarShape.gen.ts","../src/components/generated/AvatarShape.gen.ts","../src/components/generated/pb/BoxShape.gen.ts","../src/components/generated/BoxShape.gen.ts","../src/components/generated/pb/CylinderShape.gen.ts","../src/components/generated/CylinderShape.gen.ts","../src/components/generated/pb/GLTFShape.gen.ts","../src/components/generated/GLTFShape.gen.ts","../src/components/generated/pb/NFTShape.gen.ts","../src/components/generated/NFTShape.gen.ts","../src/components/generated/pb/OnPointerDown.gen.ts","../src/components/generated/OnPointerDown.gen.ts","../src/components/generated/pb/common/Vector3.gen.ts","../src/components/generated/pb/OnPointerDownResult.gen.ts","../src/components/generated/OnPointerDownResult.gen.ts","../src/components/generated/pb/OnPointerUp.gen.ts","../src/components/generated/OnPointerUp.gen.ts","../src/components/generated/pb/OnPointerUpResult.gen.ts","../src/components/generated/OnPointerUpResult.gen.ts","../src/components/generated/pb/PlaneShape.gen.ts","../src/components/generated/PlaneShape.gen.ts","../src/components/generated/pb/SphereShape.gen.ts","../src/components/generated/SphereShape.gen.ts","../src/components/generated/pb/TextShape.gen.ts","../src/components/generated/TextShape.gen.ts","../src/components/generated/index.gen.ts","../src/components/legacy/Transform.ts","../src/components/legacy/types.ts","../src/components/types.ts","../src/components/legacy/index.ts","../src/components/index.ts","../node_modules/@dcl/crdt/dist/types.js","../node_modules/@dcl/crdt/dist/index.js","../src/serialization/ByteBuffer/index.ts","../src/serialization/wireMessage.ts","../src/serialization/crdt/componentOperation.ts","../src/systems/crdt/utils.ts","../src/engine/entity-utils.ts","../src/systems/crdt/index.ts","../src/engine/entity.ts","../src/engine/utils.ts","../src/engine/component.ts","../src/engine/systems.ts","../src/engine/index.ts","../src/built-in-types/MapType.ts","../src/built-in-types/ArrayType.ts","../src/built-in-types/Optional.ts","../src/built-in-types/basic/Integer.ts","../src/built-in-types/basic/Float.ts","../src/built-in-types/basic/String.ts","../src/built-in-types/basic/Enum.ts","../src/built-in-types/basic/Boolean.ts","../src/systems/crdt/transports/rendererTransport.ts","../src/systems/crdt/transports/networkTransport.ts","../src/initialization.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vector3 = void 0;\n/**\n * @public\n */\nvar Vector3;\n(function (Vector3) {\n /**\n * Creates a new Vector3 object from the given x, y, z (floats) coordinates.\n * @param x - defines the first coordinates (on X axis)\n * @param y - defines the second coordinates (on Y axis)\n * @param z - defines the third coordinates (on Z axis)\n */\n function create(\n /**\n * Defines the first coordinates (on X axis)\n */\n x = 0, \n /**\n * Defines the second coordinates (on Y axis)\n */\n y = 0, \n /**\n * Defines the third coordinates (on Z axis)\n */\n z = 0) {\n return { x, y, z };\n }\n Vector3.create = create;\n /**\n * Returns a new Vector3 as the result of the addition of the two given vectors.\n * @param vector1 - the first vector\n * @param vector2 - the second vector\n * @returns the resulting vector\n */\n function add(vector1, vector2) {\n return {\n x: vector1.x + vector2.x,\n y: vector1.y + vector2.y,\n z: vector1.z + vector2.z\n };\n }\n Vector3.add = add;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtract(minuend, subtrahend) {\n return {\n x: minuend.x - subtrahend.x,\n y: minuend.y - subtrahend.y,\n z: minuend.z - subtrahend.z\n };\n }\n Vector3.subtract = subtract;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtractToRef(minuend, subtrahend, result) {\n result.x = minuend.x - subtrahend.x;\n result.y = minuend.y - subtrahend.y;\n result.z = minuend.z - subtrahend.z;\n }\n Vector3.subtractToRef = subtractToRef;\n /**\n * Returns a new Vector3 with the other sign\n * @returns the resulting vector\n */\n function opposite(value) {\n return { x: -value.x, y: -value.y, z: -value.z };\n }\n Vector3.opposite = opposite;\n /**\n * Copy source into dest\n *\n */\n function copy(source, dest) {\n dest.x = source.x;\n dest.y = source.y;\n dest.z = source.z;\n }\n Vector3.copy = copy;\n /**\n * Returns a new Vector3 with the same value\n * @returns the resulting vector\n */\n function clone(source) {\n return Object.assign({}, source);\n }\n Vector3.clone = clone;\n // Properties\n /**\n * Gets the length of the Vector3\n * @returns the length of the Vecto3\n */\n function length(vector) {\n return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);\n }\n Vector3.length = length;\n /**\n * Gets the squared length of the Vector3\n * @returns squared length of the Vector3\n */\n function lengthSquared(vector) {\n return vector.x * vector.x + vector.y * vector.y + vector.z * vector.z;\n }\n Vector3.lengthSquared = lengthSquared;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scaleToRef(vector, scale, result) {\n result.x = vector.x * scale;\n result.y = vector.y * scale;\n result.z = vector.z * scale;\n }\n Vector3.scaleToRef = scaleToRef;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scale(vector, scale) {\n return create(vector.x * scale, vector.y * scale, vector.z * scale);\n }\n Vector3.scale = scale;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLength(vector, len) {\n const result = create(0, 0, 0);\n normalizeFromLengthToRef(vector, len, result);\n return result;\n }\n Vector3.normalizeFromLength = normalizeFromLength;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLengthToRef(vector, len, result) {\n if (len === 0 || len === 1.0) {\n copy(vector, result);\n return;\n }\n scaleToRef(vector, 1.0 / len, result);\n }\n Vector3.normalizeFromLengthToRef = normalizeFromLengthToRef;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalize(vector) {\n return normalizeFromLength(vector, length(vector));\n }\n Vector3.normalize = normalize;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalizeToRef(vector, result) {\n normalizeFromLengthToRef(vector, length(vector), result);\n }\n Vector3.normalizeToRef = normalizeToRef;\n /**\n * Returns the dot product (float) between the vectors \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return left.x * right.x + left.y * right.y + left.z * right.z;\n }\n Vector3.dot = dot;\n /**\n * Rotates current Vector3 based on the given quaternion, but applies the rotation to target Vector3.\n * @param q - defines the Quaternion\n * @param result - defines the target Vector3\n * @returns the current Vector3\n */\n function rotate(vector, q) {\n const { x, y, z } = vector;\n const { x: qx, y: qy, z: qz, w: qw } = q;\n // calculate quat * vector\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n // calculate result * inverse quat\n return {\n x: ix * qw + iw * -qx + iy * -qz - iz * -qy,\n y: iy * qw + iw * -qy + iz * -qx - ix * -qz,\n z: iz * qw + iw * -qz + ix * -qy - iy * -qx\n };\n }\n Vector3.rotate = rotate;\n /**\n * Returns a new Vector3 located for \"amount\" (float) on the linear interpolation between the vectors \"start\" and \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @returns the new Vector3\n */\n function lerp(start, end, amount) {\n const result = create(0, 0, 0);\n lerpToRef(start, end, amount, result);\n return result;\n }\n Vector3.lerp = lerp;\n /**\n * Sets the given vector \"result\" with the result of the linear interpolation from the vector \"start\" for \"amount\" to the vector \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @param result - defines the Vector3 where to store the result\n */\n function lerpToRef(start, end, amount, result) {\n result.x = start.x + (end.x - start.x) * amount;\n result.y = start.y + (end.y - start.y) * amount;\n result.z = start.z + (end.z - start.z) * amount;\n }\n Vector3.lerpToRef = lerpToRef;\n /**\n * Returns a new Vector3 as the cross product of the vectors \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the cross product\n */\n function cross(left, right) {\n const result = Vector3.Zero();\n Vector3.crossToRef(left, right, result);\n return result;\n }\n Vector3.cross = cross;\n /**\n * Sets the given vector \"result\" with the cross product of \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @param result - defines the Vector3 where to store the result\n */\n function crossToRef(left, right, result) {\n result.x = left.y * right.z - left.z * right.y;\n result.y = left.z * right.x - left.x * right.z;\n result.z = left.x * right.y - left.y * right.x;\n }\n Vector3.crossToRef = crossToRef;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 0.0)\n * @returns a new empty Vector3\n */\n function Zero() {\n return create(0.0, 0.0, 0.0);\n }\n Vector3.Zero = Zero;\n /**\n * Returns a new Vector3 set to (1.0, 1.0, 1.0)\n * @returns a new unit Vector3\n */\n function One() {\n return create(1.0, 1.0, 1.0);\n }\n Vector3.One = One;\n /**\n * Returns a new Vector3 set tolengthSquared (0.0, 1.0, 0.0)\n * @returns a new up Vector3\n */\n function Up() {\n return create(0.0, 1.0, 0.0);\n }\n Vector3.Up = Up;\n /**\n * Returns a new Vector3 set to (0.0, -1.0, 0.0)\n * @returns a new down Vector3\n */\n function Down() {\n return create(0.0, -1.0, 0.0);\n }\n Vector3.Down = Down;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 1.0)\n * @returns a new forward Vector3\n */\n function Forward() {\n return create(0.0, 0.0, 1.0);\n }\n Vector3.Forward = Forward;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, -1.0)\n * @returns a new forward Vector3\n */\n function Backward() {\n return create(0.0, 0.0, -1.0);\n }\n Vector3.Backward = Backward;\n /**\n * Returns a new Vector3 set to (1.0, 0.0, 0.0)\n * @returns a new right Vector3\n */\n function Right() {\n return create(1.0, 0.0, 0.0);\n }\n Vector3.Right = Right;\n /**\n * Returns a new Vector3 set to (-1.0, 0.0, 0.0)\n * @returns a new left Vector3\n */\n function Left() {\n return create(-1.0, 0.0, 0.0);\n }\n Vector3.Left = Left;\n})(Vector3 = exports.Vector3 || (exports.Vector3 = {}));\n//# sourceMappingURL=Vector3.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scalar = void 0;\n/**\n * Two pi constants convenient for computation.\n */\nconst TwoPi = Math.PI * 2;\n/**\n * Boolean : true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n * @param a - number\n * @param b - number\n * @param epsilon - (default = 1.401298E-45)\n * @returns true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n */\nfunction withinEpsilon(a, b, epsilon = 1.401298e-45) {\n const num = a - b;\n return -epsilon <= num && num <= epsilon;\n}\n/**\n * Returns a string : the upper case translation of the number i to hexadecimal.\n * @param i - number\n * @returns the upper case translation of the number i to hexadecimal.\n */\nfunction toHex(i) {\n const str = i.toString(16);\n if (i <= 15) {\n return ('0' + str).toUpperCase();\n }\n return str.toUpperCase();\n}\n/**\n * Returns -1 if value is negative and +1 is value is positive.\n * @param _value - the value\n * @returns the value itself if it's equal to zero.\n */\nfunction sign(value) {\n const _value = +value; // convert to a number\n if (_value === 0 || isNaN(_value)) {\n return _value;\n }\n return _value > 0 ? 1 : -1;\n}\n/**\n * Returns the value itself if it's between min and max.\n * Returns min if the value is lower than min.\n * Returns max if the value is greater than max.\n * @param value - the value to clmap\n * @param min - the min value to clamp to (default: 0)\n * @param max - the max value to clamp to (default: 1)\n * @returns the clamped value\n */\nfunction clamp(value, min = 0, max = 1) {\n return Math.min(max, Math.max(min, value));\n}\n/**\n * the log2 of value.\n * @param value - the value to compute log2 of\n * @returns the log2 of value.\n */\nfunction log2(value) {\n return Math.log(value) * Math.LOG2E;\n}\n/**\n * Loops the value, so that it is never larger than length and never smaller than 0.\n *\n * This is similar to the modulo operator but it works with floating point numbers.\n * For example, using 3.0 for t and 2.5 for length, the result would be 0.5.\n * With t = 5 and length = 2.5, the result would be 0.0.\n * Note, however, that the behaviour is not defined for negative numbers as it is for the modulo operator\n * @param value - the value\n * @param length - the length\n * @returns the looped value\n */\nfunction repeat(value, length) {\n return value - Math.floor(value / length) * length;\n}\n/**\n * Normalize the value between 0.0 and 1.0 using min and max values\n * @param value - value to normalize\n * @param min - max to normalize between\n * @param max - min to normalize between\n * @returns the normalized value\n */\nfunction normalize(value, min, max) {\n return (value - min) / (max - min);\n}\n/**\n * Denormalize the value from 0.0 and 1.0 using min and max values\n * @param normalized - value to denormalize\n * @param min - max to denormalize between\n * @param max - min to denormalize between\n * @returns the denormalized value\n */\nfunction denormalize(normalized, min, max) {\n return normalized * (max - min) + min;\n}\n/**\n * Calculates the shortest difference between two given angles given in degrees.\n * @param current - current angle in degrees\n * @param target - target angle in degrees\n * @returns the delta\n */\nfunction deltaAngle(current, target) {\n let num = repeat(target - current, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return num;\n}\n/**\n * PingPongs the value t, so that it is never larger than length and never smaller than 0.\n * @param tx - value\n * @param length - length\n * @returns The returned value will move back and forth between 0 and length\n */\nfunction pingPong(tx, length) {\n const t = repeat(tx, length * 2.0);\n return length - Math.abs(t - length);\n}\n/**\n * Interpolates between min and max with smoothing at the limits.\n *\n * This function interpolates between min and max in a similar way to Lerp. However, the interpolation will gradually speed up\n * from the start and slow down toward the end. This is useful for creating natural-looking animation, fading and other transitions.\n * @param from - from\n * @param to - to\n * @param tx - value\n * @returns the smooth stepped value\n */\nfunction smoothStep(from, to, tx) {\n let t = clamp(tx);\n t = -2.0 * t * t * t + 3.0 * t * t;\n return to * t + from * (1.0 - t);\n}\n/**\n * Moves a value current towards target.\n *\n * This is essentially the same as Mathf.Lerp but instead the function will ensure that the speed never exceeds maxDelta.\n * Negative values of maxDelta pushes the value away from target.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting value\n */\nfunction moveTowards(current, target, maxDelta) {\n let result = 0;\n if (Math.abs(target - current) <= maxDelta) {\n result = target;\n }\n else {\n result = current + sign(target - current) * maxDelta;\n }\n return result;\n}\n/**\n * Same as MoveTowards but makes sure the values interpolate correctly when they wrap around 360 degrees.\n *\n * Variables current and target are assumed to be in degrees. For optimization reasons, negative values of maxDelta\n * are not supported and may cause oscillation. To push current away from a target angle, add 180 to that angle instead.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting angle\n */\nfunction moveTowardsAngle(current, target, maxDelta) {\n const num = deltaAngle(current, target);\n let result = 0;\n if (-maxDelta < num && num < maxDelta) {\n result = target;\n }\n else {\n result = moveTowards(current, current + num, maxDelta);\n }\n return result;\n}\n/**\n * Creates a new scalar with values linearly interpolated of \"amount\" between the start scalar and the end scalar\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\nfunction lerp(start, end, amount) {\n return start + (end - start) * amount;\n}\n/**\n * Same as Lerp but makes sure the values interpolate correctly when they wrap around 360 degrees.\n * The parameter t is clamped to the range [0, 1]. Variables a and b are assumed to be in degrees.\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\nfunction lerpAngle(start, end, amount) {\n let num = repeat(end - start, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return start + num * clamp(amount);\n}\n/**\n * Calculates the linear parameter t that produces the interpolant value within the range [a, b].\n * @param a - start value\n * @param b - target value\n * @param value - value between a and b\n * @returns the inverseLerp value\n */\nfunction inverseLerp(a, b, value) {\n let result = 0;\n if (a !== b) {\n result = clamp((value - a) / (b - a));\n }\n else {\n result = 0.0;\n }\n return result;\n}\n/**\n * Returns a new scalar located for \"amount\" (float) on the Hermite spline defined by the scalars \"value1\", \"value3\", \"tangent1\", \"tangent2\".\n * {@link http://mathworld.wolfram.com/HermitePolynomial.html}\n * @param value1 - spline value\n * @param tangent1 - spline value\n * @param value2 - spline value\n * @param tangent2 - spline value\n * @param amount - input value\n * @returns hermite result\n */\nfunction hermite(value1, tangent1, value2, tangent2, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const part1 = 2.0 * cubed - 3.0 * squared + 1.0;\n const part2 = -2.0 * cubed + 3.0 * squared;\n const part3 = cubed - 2.0 * squared + amount;\n const part4 = cubed - squared;\n return value1 * part1 + value2 * part2 + tangent1 * part3 + tangent2 * part4;\n}\n/**\n * Returns a random float number between and min and max values\n * @param min - min value of random\n * @param max - max value of random\n * @returns random value\n */\nfunction randomRange(min, max) {\n if (min === max) {\n return min;\n }\n return Math.random() * (max - min) + min;\n}\n/**\n * This function returns percentage of a number in a given range.\n *\n * RangeToPercent(40,20,60) will return 0.5 (50%)\n * RangeToPercent(34,0,100) will return 0.34 (34%)\n * @param num - to convert to percentage\n * @param min - min range\n * @param max - max range\n * @returns the percentage\n */\nfunction rangeToPercent(num, min, max) {\n return (num - min) / (max - min);\n}\n/**\n * This function returns number that corresponds to the percentage in a given range.\n *\n * PercentToRange(0.34,0,100) will return 34.\n * @param percent - to convert to number\n * @param min - min range\n * @param max - max range\n * @returns the number\n */\nfunction percentToRange(percent, min, max) {\n return (max - min) * percent + min;\n}\n/**\n * Returns the angle converted to equivalent value between -Math.PI and Math.PI radians.\n * @param angle - The angle to normalize in radian.\n * @returns The converted angle.\n */\nfunction normalizeRadians(angle) {\n // More precise but slower version kept for reference.\n // tslint:disable:no-commented-out-code\n /*\n // angle = angle % Tools.TwoPi;\n // angle = (angle + Tools.TwoPi) % Tools.TwoPi;\n \n //if (angle > Math.PI) {\n //\tangle -= Tools.TwoPi;\n //}\n */\n return angle - TwoPi * Math.floor((angle + Math.PI) / TwoPi);\n}\n/**\n * Scalar computation library\n * @public\n */\nexports.Scalar = {\n withinEpsilon,\n toHex,\n sign,\n clamp,\n log2,\n repeat,\n normalize,\n denormalize,\n deltaAngle,\n pingPong,\n smoothStep,\n moveTowards,\n moveTowardsAngle,\n lerp,\n lerpAngle,\n inverseLerp,\n hermite,\n randomRange,\n rangeToPercent,\n percentToRange,\n normalizeRadians,\n TwoPi\n};\n//# sourceMappingURL=Scalar.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RAD2DEG = exports.DEG2RAD = exports.Epsilon = exports.ToLinearSpace = exports.ToGammaSpace = exports.Space = exports.Orientation = void 0;\n/**\n * Defines potential orientation for back face culling\n * @public\n */\nvar Orientation;\n(function (Orientation) {\n /**\n * Clockwise\n */\n Orientation[Orientation[\"CW\"] = 0] = \"CW\";\n /** Counter clockwise */\n Orientation[Orientation[\"CCW\"] = 1] = \"CCW\";\n})(Orientation = exports.Orientation || (exports.Orientation = {}));\n/**\n * Defines supported spaces\n * @public\n */\nvar Space;\n(function (Space) {\n /** Local (object) space */\n Space[Space[\"LOCAL\"] = 0] = \"LOCAL\";\n /** World space */\n Space[Space[\"WORLD\"] = 1] = \"WORLD\";\n /** Bone space */\n Space[Space[\"BONE\"] = 2] = \"BONE\";\n})(Space = exports.Space || (exports.Space = {}));\n/**\n * Constant used to convert a value to gamma space\n * @public\n */\nexports.ToGammaSpace = 1 / 2.2;\n/**\n * Constant used to convert a value to linear space\n * @public\n */\nexports.ToLinearSpace = 2.2;\n/**\n * Constant used to define the minimal number value in Babylon.js\n * @public\n */\nexports.Epsilon = 0.000001;\n/**\n * Constant used to convert from Euler degrees to radians\n * @public\n */\nexports.DEG2RAD = Math.PI / 180;\n/**\n * Constant used to convert from radians to Euler degrees\n * @public\n */\nexports.RAD2DEG = 360 / (Math.PI * 2);\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quaternion = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Scalar_1 = require(\"./Scalar\");\nconst types_1 = require(\"./types\");\n/**\n * @public\n */\nvar Quaternion;\n(function (Quaternion) {\n /**\n * Creates a new Quaternion from the given floats\n * @param x - defines the first component (0 by default)\n * @param y - defines the second component (0 by default)\n * @param z - defines the third component (0 by default)\n * @param w - defines the fourth component (1.0 by default)\n */\n function create(\n /** defines the first component (0 by default) */\n x = 0.0, \n /** defines the second component (0 by default) */\n y = 0.0, \n /** defines the third component (0 by default) */\n z = 0.0, \n /** defines the fourth component (1.0 by default) */\n w = 1.0) {\n return { x, y, z, w };\n }\n Quaternion.create = create;\n /**\n * Returns a new Quaternion as the result of the addition of the two given quaternions.\n * @param q1 - the first quaternion\n * @param q2 - the second quaternion\n * @returns the resulting quaternion\n */\n function add(q1, q2) {\n return { x: q1.x + q2.x, y: q1.y + q2.y, z: q1.z + q2.z, w: q1.w + q2.w };\n }\n Quaternion.add = add;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis\n * @param pitch - defines the rotation around X axis\n * @param roll - defines the rotation around Z axis\n * @param result - defines the target quaternion\n */\n function rotationYawPitchRoll(yaw, pitch, roll) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n return create(c2 * s1 * c3 + s2 * c1 * s3, s2 * c1 * c3 - c2 * s1 * s3, c2 * c1 * s3 - s2 * s1 * c3, c2 * c1 * c3 + s2 * s1 * s3);\n }\n Quaternion.rotationYawPitchRoll = rotationYawPitchRoll;\n /**\n * Returns a rotation that rotates z degrees around the z axis, x degrees around the x axis, and y degrees around the y axis.\n * @param x - the rotation on the x axis in euler degrees\n * @param y - the rotation on the y axis in euler degrees\n * @param z - the rotation on the z axis in euler degrees\n */\n function euler(x, y, z) {\n return rotationYawPitchRoll(y * types_1.DEG2RAD, x * types_1.DEG2RAD, z * types_1.DEG2RAD);\n }\n Quaternion.euler = euler;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function length(q) {\n return Math.sqrt(lengthSquared(q));\n }\n Quaternion.length = length;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function lengthSquared(q) {\n return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n }\n Quaternion.lengthSquared = lengthSquared;\n /**\n * Returns the dot product (float) between the quaternions \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return (left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w);\n }\n Quaternion.dot = dot;\n /**\n * Returns the angle in degrees between two rotations a and b.\n * @param quat1 - defines the first quaternion\n * @param quat2 - defines the second quaternion\n */\n function angle(quat1, quat2) {\n const dotVal = dot(quat1, quat2);\n return Math.acos(Math.min(Math.abs(dotVal), 1)) * 2 * types_1.RAD2DEG;\n }\n Quaternion.angle = angle;\n /**\n * The from quaternion is rotated towards to by an angular step of maxDegreesDelta.\n * @param from - defines the first quaternion\n * @param to - defines the second quaternion\n * @param maxDegreesDelta - the interval step\n */\n function rotateTowards(from, to, maxDegreesDelta) {\n const num = angle(from, to);\n if (num === 0) {\n return to;\n }\n const t = Math.min(1, maxDegreesDelta / num);\n return slerp(from, to, t);\n }\n Quaternion.rotateTowards = rotateTowards;\n /**\n * Creates a rotation with the specified forward and upwards directions.\n * @param forward - the direction to look in\n * @param up - the vector that defines in which direction up is\n */\n function lookRotation(forward, up = { x: 0.0, y: 1.0, z: 0.0 }) {\n const forwardNew = Vector3_1.Vector3.normalize(forward);\n const right = Vector3_1.Vector3.normalize(Vector3_1.Vector3.cross(up, forwardNew));\n const upNew = Vector3_1.Vector3.cross(forwardNew, right);\n const m00 = right.x;\n const m01 = right.y;\n const m02 = right.z;\n const m10 = upNew.x;\n const m11 = upNew.y;\n const m12 = upNew.z;\n const m20 = forwardNew.x;\n const m21 = forwardNew.y;\n const m22 = forwardNew.z;\n const num8 = m00 + m11 + m22;\n const quaternion = create();\n if (num8 > 0) {\n let num = Math.sqrt(num8 + 1);\n quaternion.w = num * 0.5;\n num = 0.5 / num;\n quaternion.x = (m12 - m21) * num;\n quaternion.y = (m20 - m02) * num;\n quaternion.z = (m01 - m10) * num;\n return quaternion;\n }\n if (m00 >= m11 && m00 >= m22) {\n const num7 = Math.sqrt(1 + m00 - m11 - m22);\n const num4 = 0.5 / num7;\n quaternion.x = 0.5 * num7;\n quaternion.y = (m01 + m10) * num4;\n quaternion.z = (m02 + m20) * num4;\n quaternion.w = (m12 - m21) * num4;\n return quaternion;\n }\n if (m11 > m22) {\n const num6 = Math.sqrt(1 + m11 - m00 - m22);\n const num3 = 0.5 / num6;\n quaternion.x = (m10 + m01) * num3;\n quaternion.y = 0.5 * num6;\n quaternion.z = (m21 + m12) * num3;\n quaternion.w = (m20 - m02) * num3;\n return quaternion;\n }\n const num5 = Math.sqrt(1 + m22 - m00 - m11);\n const num2 = 0.5 / num5;\n quaternion.x = (m20 + m02) * num2;\n quaternion.y = (m21 + m12) * num2;\n quaternion.z = 0.5 * num5;\n quaternion.w = (m01 - m10) * num2;\n return quaternion;\n }\n Quaternion.lookRotation = lookRotation;\n /**\n * Normalize in place the current quaternion\n * @returns the current updated quaternion\n */\n function normalize(q) {\n const qLength = 1.0 / length(q);\n return create(q.x * qLength, q.y * qLength, q.z * qLength, q.w * qLength);\n }\n Quaternion.normalize = normalize;\n /**\n * Creates a rotation which rotates from fromDirection to toDirection.\n * @param from - defines the first direction Vector\n * @param to - defines the target direction Vector\n */\n function fromToRotation(from, to, up = Vector3_1.Vector3.Up()) {\n // Unity-based calculations implemented from https://forum.unity.com/threads/quaternion-lookrotation-around-an-axis.608470/#post-4069888\n const v0 = Vector3_1.Vector3.normalize(from);\n const v1 = Vector3_1.Vector3.normalize(to);\n const a = Vector3_1.Vector3.cross(v0, v1);\n const w = Math.sqrt(Vector3_1.Vector3.lengthSquared(v0) * Vector3_1.Vector3.lengthSquared(v1)) +\n Vector3_1.Vector3.dot(v0, v1);\n if (Vector3_1.Vector3.lengthSquared(a) < 0.0001) {\n // the vectors are parallel, check w to find direction\n // if w is 0 then values are opposite, and we sould rotate 180 degrees around the supplied axis\n // otherwise the vectors in the same direction and no rotation should occur\n return Math.abs(w) < 0.0001\n ? normalize(create(up.x, up.y, up.z, 0))\n : Identity();\n }\n else {\n return normalize(create(a.x, a.y, a.z, w));\n }\n }\n Quaternion.fromToRotation = fromToRotation;\n /**\n * Creates an identity quaternion\n * @returns - the identity quaternion\n */\n function Identity() {\n return create(0.0, 0.0, 0.0, 1.0);\n }\n Quaternion.Identity = Identity;\n /**\n * Gets or sets the euler angle representation of the rotation.\n * Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n */\n function eulerAngles(q) {\n const out = Vector3_1.Vector3.create();\n // if the input quaternion is normalized, this is exactly one. Otherwise, this acts as a correction factor for the quaternion's not-normalizedness\n const unit = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n // q will have a magnitude of 0.5 or greater if and only if q is a singularity case\n const test = q.x * q.w - q.y * q.z;\n if (test > 0.4995 * unit) {\n // singularity at north pole\n out.x = Math.PI / 2;\n out.y = 2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else if (test < -0.4995 * unit) {\n // singularity at south pole\n out.x = -Math.PI / 2;\n out.y = -2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else {\n // no singularity - q is the majority of cases\n out.x = Math.asin(2 * (q.w * q.x - q.y * q.z));\n out.y = Math.atan2(2 * q.w * q.y + 2 * q.z * q.x, 1 - 2 * (q.x * q.x + q.y * q.y));\n out.z = Math.atan2(2 * q.w * q.z + 2 * q.x * q.y, 1 - 2 * (q.z * q.z + q.x * q.x));\n }\n out.x *= types_1.RAD2DEG;\n out.y *= types_1.RAD2DEG;\n out.z *= types_1.RAD2DEG;\n // ensure the degree values are between 0 and 360\n out.x = Scalar_1.Scalar.repeat(out.x, 360);\n out.y = Scalar_1.Scalar.repeat(out.y, 360);\n out.z = Scalar_1.Scalar.repeat(out.z, 360);\n return out;\n }\n Quaternion.eulerAngles = eulerAngles;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis\n * @param pitch - defines the rotation around X axis\n * @param roll - defines the rotation around Z axis\n * @param result - defines the target quaternion\n */\n function rotationYawPitchRollToRef(yaw, pitch, roll, result) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n result.x = c2 * s1 * c3 + s2 * c1 * s3;\n result.y = s2 * c1 * c3 - c2 * s1 * s3;\n result.z = c2 * c1 * s3 - s2 * s1 * c3;\n result.w = c2 * c1 * c3 + s2 * s1 * s3;\n }\n Quaternion.rotationYawPitchRollToRef = rotationYawPitchRollToRef;\n /**\n * Updates the given quaternion with the given rotation matrix values\n * @param matrix - defines the source matrix\n * @param result - defines the target quaternion\n */\n function fromRotationMatrixToRef(matrix, result) {\n const data = matrix._m;\n // tslint:disable:one-variable-per-declaration\n const m11 = data[0], m12 = data[4], m13 = data[8];\n const m21 = data[1], m22 = data[5], m23 = data[9];\n const m31 = data[2], m32 = data[6], m33 = data[10];\n // tslint:enable:one-variable-per-declaration\n const trace = m11 + m22 + m33;\n let s;\n if (trace > 0) {\n s = 0.5 / Math.sqrt(trace + 1.0);\n result.w = 0.25 / s;\n result.x = (m32 - m23) * s;\n result.y = (m13 - m31) * s;\n result.z = (m21 - m12) * s;\n }\n else if (m11 > m22 && m11 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n result.w = (m32 - m23) / s;\n result.x = 0.25 * s;\n result.y = (m12 + m21) / s;\n result.z = (m13 + m31) / s;\n }\n else if (m22 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n result.w = (m13 - m31) / s;\n result.x = (m12 + m21) / s;\n result.y = 0.25 * s;\n result.z = (m23 + m32) / s;\n }\n else {\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n result.w = (m21 - m12) / s;\n result.x = (m13 + m31) / s;\n result.y = (m23 + m32) / s;\n result.z = 0.25 * s;\n }\n }\n Quaternion.fromRotationMatrixToRef = fromRotationMatrixToRef;\n /**\n * Interpolates between two quaternions\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @returns the new interpolated quaternion\n */\n function slerp(left, right, amount) {\n const result = Quaternion.Identity();\n Quaternion.slerpToRef(left, right, amount, result);\n return result;\n }\n Quaternion.slerp = slerp;\n /**\n * Interpolates between two quaternions and stores it into a target quaternion\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @param result - defines the target quaternion\n */\n function slerpToRef(left, right, amount, result) {\n let num2;\n let num3;\n let num4 = left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w;\n let flag = false;\n if (num4 < 0) {\n flag = true;\n num4 = -num4;\n }\n if (num4 > 0.999999) {\n num3 = 1 - amount;\n num2 = flag ? -amount : amount;\n }\n else {\n const num5 = Math.acos(num4);\n const num6 = 1.0 / Math.sin(num5);\n num3 = Math.sin((1.0 - amount) * num5) * num6;\n num2 = flag\n ? -Math.sin(amount * num5) * num6\n : Math.sin(amount * num5) * num6;\n }\n result.x = num3 * left.x + num2 * right.x;\n result.y = num3 * left.y + num2 * right.y;\n result.z = num3 * left.z + num2 * right.z;\n result.w = num3 * left.w + num2 * right.w;\n }\n Quaternion.slerpToRef = slerpToRef;\n /**\n * Multiplies two quaternions\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @returns a new quaternion set as the multiplication result of the self one with the given one \"q1\"\n */\n function multiply(self, q1) {\n const result = create(0, 0, 0, 1.0);\n multiplyToRef(self, q1, result);\n return result;\n }\n Quaternion.multiply = multiply;\n /**\n * Sets the given \"result\" as the the multiplication result of the self one with the given one \"q1\"\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @param result - defines the target quaternion\n * @returns the current quaternion\n */\n function multiplyToRef(self, q1, result) {\n result.x = self.x * q1.w + self.y * q1.z - self.z * q1.y + self.w * q1.x;\n result.y = -self.x * q1.z + self.y * q1.w + self.z * q1.x + self.w * q1.y;\n result.z = self.x * q1.y - self.y * q1.x + self.z * q1.w + self.w * q1.z;\n result.w = -self.x * q1.x - self.y * q1.y - self.z * q1.z + self.w * q1.w;\n }\n Quaternion.multiplyToRef = multiplyToRef;\n function angleAxis(degress, axis) {\n if (Vector3_1.Vector3.lengthSquared(axis) === 0) {\n return Quaternion.Identity();\n }\n const result = Identity();\n let radians = degress * types_1.DEG2RAD;\n radians *= 0.5;\n const a2 = Vector3_1.Vector3.normalize(axis);\n Vector3_1.Vector3.scaleToRef(a2, Math.sin(radians), a2);\n result.x = a2.x;\n result.y = a2.y;\n result.z = a2.z;\n result.w = Math.cos(radians);\n return normalize(result);\n }\n Quaternion.angleAxis = angleAxis;\n /**\n * Returns a zero filled quaternion\n */\n function Zero() {\n return create(0.0, 0.0, 0.0, 0.0);\n }\n Quaternion.Zero = Zero;\n})(Quaternion = exports.Quaternion || (exports.Quaternion = {}));\n//# sourceMappingURL=Quaternion.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./Quaternion\"), exports);\n__exportStar(require(\"./Vector3\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./index\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAnimator {\n states: PBAnimationState[]\n}\n\nexport interface PBAnimationState {\n name: string\n clip: string\n playing: boolean\n weight: number\n speed: number\n loop: boolean\n shouldReset: boolean\n}\n\nfunction createBasePBAnimator(): PBAnimator {\n return { states: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimator = {\n encode(message: PBAnimator, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.states) {\n PBAnimationState.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimator {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimator()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.states.push(PBAnimationState.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBAnimationState(): PBAnimationState {\n return { name: '', clip: '', playing: false, weight: 0, speed: 0, loop: false, shouldReset: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimationState = {\n encode(message: PBAnimationState, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.name !== '') {\n writer.uint32(10).string(message.name)\n }\n if (message.clip !== '') {\n writer.uint32(18).string(message.clip)\n }\n if (message.playing === true) {\n writer.uint32(24).bool(message.playing)\n }\n if (message.weight !== 0) {\n writer.uint32(37).float(message.weight)\n }\n if (message.speed !== 0) {\n writer.uint32(45).float(message.speed)\n }\n if (message.loop === true) {\n writer.uint32(48).bool(message.loop)\n }\n if (message.shouldReset === true) {\n writer.uint32(56).bool(message.shouldReset)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimationState {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimationState()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.name = reader.string()\n break\n case 2:\n message.clip = reader.string()\n break\n case 3:\n message.playing = reader.bool()\n break\n case 4:\n message.weight = reader.float()\n break\n case 5:\n message.speed = reader.float()\n break\n case 6:\n message.loop = reader.bool()\n break\n case 7:\n message.shouldReset = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAnimator } from './pb/Animator.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1042\n\n/**\n * @internal\n */\nexport const Animator: EcsType<PBAnimator> = {\n serialize(value: PBAnimator, builder: ByteBuffer): void {\n const writer = PBAnimator.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAnimator {\n return PBAnimator.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAnimator {\n // TODO: this is a hack.\n return PBAnimator.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAudioSource {\n playing: boolean\n volume: number\n loop: boolean\n pitch: number\n audioClipUrl: string\n}\n\nfunction createBasePBAudioSource(): PBAudioSource {\n return { playing: false, volume: 0, loop: false, pitch: 0, audioClipUrl: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBAudioSource = {\n encode(message: PBAudioSource, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.playing === true) {\n writer.uint32(8).bool(message.playing)\n }\n if (message.volume !== 0) {\n writer.uint32(21).float(message.volume)\n }\n if (message.loop === true) {\n writer.uint32(24).bool(message.loop)\n }\n if (message.pitch !== 0) {\n writer.uint32(37).float(message.pitch)\n }\n if (message.audioClipUrl !== '') {\n writer.uint32(42).string(message.audioClipUrl)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAudioSource {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAudioSource()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.playing = reader.bool()\n break\n case 2:\n message.volume = reader.float()\n break\n case 3:\n message.loop = reader.bool()\n break\n case 4:\n message.pitch = reader.float()\n break\n case 5:\n message.audioClipUrl = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAudioSource } from './pb/AudioSource.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1020\n\n/**\n * @internal\n */\nexport const AudioSource: EcsType<PBAudioSource> = {\n serialize(value: PBAudioSource, builder: ByteBuffer): void {\n const writer = PBAudioSource.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAudioSource {\n return PBAudioSource.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAudioSource {\n // TODO: this is a hack.\n return PBAudioSource.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAvatarAttach {\n avatarId: string\n anchorPointId: number\n}\n\nfunction createBasePBAvatarAttach(): PBAvatarAttach {\n return { avatarId: '', anchorPointId: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarAttach = {\n encode(message: PBAvatarAttach, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.avatarId !== '') {\n writer.uint32(10).string(message.avatarId)\n }\n if (message.anchorPointId !== 0) {\n writer.uint32(16).int32(message.anchorPointId)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarAttach {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarAttach()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.avatarId = reader.string()\n break\n case 2:\n message.anchorPointId = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarAttach } from './pb/AvatarAttach.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1073\n\n/**\n * @internal\n */\nexport const AvatarAttach: EcsType<PBAvatarAttach> = {\n serialize(value: PBAvatarAttach, builder: ByteBuffer): void {\n const writer = PBAvatarAttach.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarAttach {\n return PBAvatarAttach.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarAttach {\n // TODO: this is a hack.\n return PBAvatarAttach.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface Color3 {\n r: number\n g: number\n b: number\n}\n\nfunction createBaseColor3(): Color3 {\n return { r: 0, g: 0, b: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Color3 = {\n encode(message: Color3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r)\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g)\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Color3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseColor3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.r = reader.float()\n break\n case 2:\n message.g = reader.float()\n break\n case 3:\n message.b = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport Long from 'long'\nimport { Color3 } from './common/Color3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAvatarShape {\n id: string\n name: string\n bodyShape: string\n skinColor: Color3 | undefined\n hairColor: Color3 | undefined\n eyeColor: Color3 | undefined\n wearables: string[]\n expressionTriggerId: string\n expressionTriggerTimestamp: number\n stickerTriggerId: string\n stickerTriggerTimestamp: number\n talking: boolean\n}\n\nfunction createBasePBAvatarShape(): PBAvatarShape {\n return {\n id: '',\n name: '',\n bodyShape: '',\n skinColor: undefined,\n hairColor: undefined,\n eyeColor: undefined,\n wearables: [],\n expressionTriggerId: '',\n expressionTriggerTimestamp: 0,\n stickerTriggerId: '',\n stickerTriggerTimestamp: 0,\n talking: false\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarShape = {\n encode(message: PBAvatarShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.id !== '') {\n writer.uint32(10).string(message.id)\n }\n if (message.name !== '') {\n writer.uint32(18).string(message.name)\n }\n if (message.bodyShape !== '') {\n writer.uint32(26).string(message.bodyShape)\n }\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(34).fork()).ldelim()\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(42).fork()).ldelim()\n }\n if (message.eyeColor !== undefined) {\n Color3.encode(message.eyeColor, writer.uint32(50).fork()).ldelim()\n }\n for (const v of message.wearables) {\n writer.uint32(58).string(v!)\n }\n if (message.expressionTriggerId !== '') {\n writer.uint32(66).string(message.expressionTriggerId)\n }\n if (message.expressionTriggerTimestamp !== 0) {\n writer.uint32(72).int64(message.expressionTriggerTimestamp)\n }\n if (message.stickerTriggerId !== '') {\n writer.uint32(82).string(message.stickerTriggerId)\n }\n if (message.stickerTriggerTimestamp !== 0) {\n writer.uint32(88).int64(message.stickerTriggerTimestamp)\n }\n if (message.talking === true) {\n writer.uint32(96).bool(message.talking)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.id = reader.string()\n break\n case 2:\n message.name = reader.string()\n break\n case 3:\n message.bodyShape = reader.string()\n break\n case 4:\n message.skinColor = Color3.decode(reader, reader.uint32())\n break\n case 5:\n message.hairColor = Color3.decode(reader, reader.uint32())\n break\n case 6:\n message.eyeColor = Color3.decode(reader, reader.uint32())\n break\n case 7:\n message.wearables.push(reader.string())\n break\n case 8:\n message.expressionTriggerId = reader.string()\n break\n case 9:\n message.expressionTriggerTimestamp = longToNumber(reader.int64() as Long)\n break\n case 10:\n message.stickerTriggerId = reader.string()\n break\n case 11:\n message.stickerTriggerTimestamp = longToNumber(reader.int64() as Long)\n break\n case 12:\n message.talking = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\ndeclare var self: any | undefined\ndeclare var window: any | undefined\ndeclare var global: any | undefined\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof self !== 'undefined') return self\n if (typeof window !== 'undefined') return window\n if (typeof global !== 'undefined') return global\n throw 'Unable to locate global object'\n})()\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER')\n }\n return long.toNumber()\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarShape } from './pb/AvatarShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1080\n\n/**\n * @internal\n */\nexport const AvatarShape: EcsType<PBAvatarShape> = {\n serialize(value: PBAvatarShape, builder: ByteBuffer): void {\n const writer = PBAvatarShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarShape {\n return PBAvatarShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarShape {\n // TODO: this is a hack.\n return PBAvatarShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBBoxShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n uvs: number[]\n}\n\nfunction createBasePBBoxShape(): PBBoxShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBBoxShape = {\n encode(message: PBBoxShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n writer.uint32(34).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBBoxShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBBoxShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBBoxShape } from './pb/BoxShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1013\n\n/**\n * @internal\n */\nexport const BoxShape: EcsType<PBBoxShape> = {\n serialize(value: PBBoxShape, builder: ByteBuffer): void {\n const writer = PBBoxShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBBoxShape {\n return PBBoxShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBBoxShape {\n // TODO: this is a hack.\n return PBBoxShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBCylinderShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n radiusTop: number\n radiusBottom: number\n}\n\nfunction createBasePBCylinderShape(): PBCylinderShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, radiusTop: 0, radiusBottom: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBCylinderShape = {\n encode(message: PBCylinderShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n if (message.radiusTop !== 0) {\n writer.uint32(37).float(message.radiusTop)\n }\n if (message.radiusBottom !== 0) {\n writer.uint32(45).float(message.radiusBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBCylinderShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBCylinderShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n message.radiusTop = reader.float()\n break\n case 5:\n message.radiusBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBCylinderShape } from './pb/CylinderShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1016\n\n/**\n * @internal\n */\nexport const CylinderShape: EcsType<PBCylinderShape> = {\n serialize(value: PBCylinderShape, builder: ByteBuffer): void {\n const writer = PBCylinderShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBCylinderShape {\n return PBCylinderShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBCylinderShape {\n // TODO: this is a hack.\n return PBCylinderShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBGLTFShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n src: string\n}\n\nfunction createBasePBGLTFShape(): PBGLTFShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, src: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBGLTFShape = {\n encode(message: PBGLTFShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n if (message.src !== '') {\n writer.uint32(34).string(message.src)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBGLTFShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBGLTFShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n message.src = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBGLTFShape } from './pb/GLTFShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1041\n\n/**\n * @internal\n */\nexport const GLTFShape: EcsType<PBGLTFShape> = {\n serialize(value: PBGLTFShape, builder: ByteBuffer): void {\n const writer = PBGLTFShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBGLTFShape {\n return PBGLTFShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBGLTFShape {\n // TODO: this is a hack.\n return PBGLTFShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color3 } from './common/Color3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBNFTShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n src: string\n assetId: string\n style: number\n color: Color3 | undefined\n}\n\nfunction createBasePBNFTShape(): PBNFTShape {\n return {\n withCollisions: false,\n isPointerBlocker: false,\n visible: false,\n src: '',\n assetId: '',\n style: 0,\n color: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBNFTShape = {\n encode(message: PBNFTShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n if (message.src !== '') {\n writer.uint32(34).string(message.src)\n }\n if (message.assetId !== '') {\n writer.uint32(42).string(message.assetId)\n }\n if (message.style !== 0) {\n writer.uint32(48).int32(message.style)\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(58).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBNFTShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBNFTShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n message.src = reader.string()\n break\n case 5:\n message.assetId = reader.string()\n break\n case 6:\n message.style = reader.int32()\n break\n case 7:\n message.color = Color3.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBNFTShape } from './pb/NFTShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1040\n\n/**\n * @internal\n */\nexport const NFTShape: EcsType<PBNFTShape> = {\n serialize(value: PBNFTShape, builder: ByteBuffer): void {\n const writer = PBNFTShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBNFTShape {\n return PBNFTShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBNFTShape {\n // TODO: this is a hack.\n return PBNFTShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerDown {\n button: ActionButton\n hoverText: string\n distance: number\n showFeedback: boolean\n}\n\nfunction createBasePBOnPointerDown(): PBOnPointerDown {\n return { button: 0, hoverText: '', distance: 0, showFeedback: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerDown = {\n encode(message: PBOnPointerDown, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hoverText !== '') {\n writer.uint32(18).string(message.hoverText)\n }\n if (message.distance !== 0) {\n writer.uint32(29).float(message.distance)\n }\n if (message.showFeedback === true) {\n writer.uint32(32).bool(message.showFeedback)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerDown {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerDown()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hoverText = reader.string()\n break\n case 3:\n message.distance = reader.float()\n break\n case 4:\n message.showFeedback = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerDown } from './pb/OnPointerDown.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1060\n\n/**\n * @internal\n */\nexport const OnPointerDown: EcsType<PBOnPointerDown> = {\n serialize(value: PBOnPointerDown, builder: ByteBuffer): void {\n const writer = PBOnPointerDown.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerDown {\n return PBOnPointerDown.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerDown {\n // TODO: this is a hack.\n return PBOnPointerDown.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface Vector3 {\n x: number\n y: number\n z: number\n}\n\nfunction createBaseVector3(): Vector3 {\n return { x: 0, y: 0, z: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Vector3 = {\n encode(message: Vector3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Vector3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseVector3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n case 3:\n message.z = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport { Vector3 } from './common/Vector3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerDownResult {\n button: ActionButton\n meshName: string\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n point: Vector3 | undefined\n normal: Vector3 | undefined\n distance: number\n timestamp: number\n}\n\nfunction createBasePBOnPointerDownResult(): PBOnPointerDownResult {\n return {\n button: 0,\n meshName: '',\n origin: undefined,\n direction: undefined,\n point: undefined,\n normal: undefined,\n distance: 0,\n timestamp: 0\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerDownResult = {\n encode(message: PBOnPointerDownResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(16).int32(message.button)\n }\n if (message.meshName !== '') {\n writer.uint32(26).string(message.meshName)\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(34).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(42).fork()).ldelim()\n }\n if (message.point !== undefined) {\n Vector3.encode(message.point, writer.uint32(50).fork()).ldelim()\n }\n if (message.normal !== undefined) {\n Vector3.encode(message.normal, writer.uint32(58).fork()).ldelim()\n }\n if (message.distance !== 0) {\n writer.uint32(69).float(message.distance)\n }\n if (message.timestamp !== 0) {\n writer.uint32(72).int32(message.timestamp)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerDownResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerDownResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 2:\n message.button = reader.int32() as any\n break\n case 3:\n message.meshName = reader.string()\n break\n case 4:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 5:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 6:\n message.point = Vector3.decode(reader, reader.uint32())\n break\n case 7:\n message.normal = Vector3.decode(reader, reader.uint32())\n break\n case 8:\n message.distance = reader.float()\n break\n case 9:\n message.timestamp = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerDownResult } from './pb/OnPointerDownResult.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1066\n\n/**\n * @internal\n */\nexport const OnPointerDownResult: EcsType<PBOnPointerDownResult> = {\n serialize(value: PBOnPointerDownResult, builder: ByteBuffer): void {\n const writer = PBOnPointerDownResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerDownResult {\n return PBOnPointerDownResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerDownResult {\n // TODO: this is a hack.\n return PBOnPointerDownResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerUp {\n button: ActionButton\n hoverText: string\n distance: number\n showFeedback: boolean\n}\n\nfunction createBasePBOnPointerUp(): PBOnPointerUp {\n return { button: 0, hoverText: '', distance: 0, showFeedback: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerUp = {\n encode(message: PBOnPointerUp, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hoverText !== '') {\n writer.uint32(18).string(message.hoverText)\n }\n if (message.distance !== 0) {\n writer.uint32(29).float(message.distance)\n }\n if (message.showFeedback === true) {\n writer.uint32(32).bool(message.showFeedback)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerUp {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerUp()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hoverText = reader.string()\n break\n case 3:\n message.distance = reader.float()\n break\n case 4:\n message.showFeedback = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerUp } from './pb/OnPointerUp.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1061\n\n/**\n * @internal\n */\nexport const OnPointerUp: EcsType<PBOnPointerUp> = {\n serialize(value: PBOnPointerUp, builder: ByteBuffer): void {\n const writer = PBOnPointerUp.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerUp {\n return PBOnPointerUp.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerUp {\n // TODO: this is a hack.\n return PBOnPointerUp.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport { Vector3 } from './common/Vector3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerUpResult {\n button: ActionButton\n meshName: string\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n point: Vector3 | undefined\n normal: Vector3 | undefined\n distance: number\n timestamp: number\n}\n\nfunction createBasePBOnPointerUpResult(): PBOnPointerUpResult {\n return {\n button: 0,\n meshName: '',\n origin: undefined,\n direction: undefined,\n point: undefined,\n normal: undefined,\n distance: 0,\n timestamp: 0\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerUpResult = {\n encode(message: PBOnPointerUpResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(16).int32(message.button)\n }\n if (message.meshName !== '') {\n writer.uint32(26).string(message.meshName)\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(34).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(42).fork()).ldelim()\n }\n if (message.point !== undefined) {\n Vector3.encode(message.point, writer.uint32(50).fork()).ldelim()\n }\n if (message.normal !== undefined) {\n Vector3.encode(message.normal, writer.uint32(58).fork()).ldelim()\n }\n if (message.distance !== 0) {\n writer.uint32(69).float(message.distance)\n }\n if (message.timestamp !== 0) {\n writer.uint32(72).int32(message.timestamp)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerUpResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerUpResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 2:\n message.button = reader.int32() as any\n break\n case 3:\n message.meshName = reader.string()\n break\n case 4:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 5:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 6:\n message.point = Vector3.decode(reader, reader.uint32())\n break\n case 7:\n message.normal = Vector3.decode(reader, reader.uint32())\n break\n case 8:\n message.distance = reader.float()\n break\n case 9:\n message.timestamp = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerUpResult } from './pb/OnPointerUpResult.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1065\n\n/**\n * @internal\n */\nexport const OnPointerUpResult: EcsType<PBOnPointerUpResult> = {\n serialize(value: PBOnPointerUpResult, builder: ByteBuffer): void {\n const writer = PBOnPointerUpResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerUpResult {\n return PBOnPointerUpResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerUpResult {\n // TODO: this is a hack.\n return PBOnPointerUpResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBPlaneShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n uvs: number[]\n}\n\nfunction createBasePBPlaneShape(): PBPlaneShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBPlaneShape = {\n encode(message: PBPlaneShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n writer.uint32(34).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPlaneShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPlaneShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPlaneShape } from './pb/PlaneShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1014\n\n/**\n * @internal\n */\nexport const PlaneShape: EcsType<PBPlaneShape> = {\n serialize(value: PBPlaneShape, builder: ByteBuffer): void {\n const writer = PBPlaneShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPlaneShape {\n return PBPlaneShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPlaneShape {\n // TODO: this is a hack.\n return PBPlaneShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBSphereShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n}\n\nfunction createBasePBSphereShape(): PBSphereShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBSphereShape = {\n encode(message: PBSphereShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBSphereShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBSphereShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBSphereShape } from './pb/SphereShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1015\n\n/**\n * @internal\n */\nexport const SphereShape: EcsType<PBSphereShape> = {\n serialize(value: PBSphereShape, builder: ByteBuffer): void {\n const writer = PBSphereShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBSphereShape {\n return PBSphereShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBSphereShape {\n // TODO: this is a hack.\n return PBSphereShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color3 } from './common/Color3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBTextShape {\n text: string\n visible: boolean\n font: string\n opacity: number\n fontSize: number\n fontAutoSize: boolean\n hTextAlign: string\n vTextAlign: string\n width: number\n height: number\n paddingTop: number\n paddingRight: number\n paddingBottom: number\n paddingLeft: number\n lineSpacing: number\n lineCount: number\n textWrapping: boolean\n shadowBlur: number\n shadowOffsetX: number\n shadowOffsetY: number\n outlineWidth: number\n shadowColor: Color3 | undefined\n outlineColor: Color3 | undefined\n textColor: Color3 | undefined\n}\n\nfunction createBasePBTextShape(): PBTextShape {\n return {\n text: '',\n visible: false,\n font: '',\n opacity: 0,\n fontSize: 0,\n fontAutoSize: false,\n hTextAlign: '',\n vTextAlign: '',\n width: 0,\n height: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n lineSpacing: 0,\n lineCount: 0,\n textWrapping: false,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n outlineWidth: 0,\n shadowColor: undefined,\n outlineColor: undefined,\n textColor: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBTextShape = {\n encode(message: PBTextShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.text !== '') {\n writer.uint32(10).string(message.text)\n }\n if (message.visible === true) {\n writer.uint32(16).bool(message.visible)\n }\n if (message.font !== '') {\n writer.uint32(26).string(message.font)\n }\n if (message.opacity !== 0) {\n writer.uint32(37).float(message.opacity)\n }\n if (message.fontSize !== 0) {\n writer.uint32(45).float(message.fontSize)\n }\n if (message.fontAutoSize === true) {\n writer.uint32(48).bool(message.fontAutoSize)\n }\n if (message.hTextAlign !== '') {\n writer.uint32(58).string(message.hTextAlign)\n }\n if (message.vTextAlign !== '') {\n writer.uint32(66).string(message.vTextAlign)\n }\n if (message.width !== 0) {\n writer.uint32(77).float(message.width)\n }\n if (message.height !== 0) {\n writer.uint32(85).float(message.height)\n }\n if (message.paddingTop !== 0) {\n writer.uint32(93).float(message.paddingTop)\n }\n if (message.paddingRight !== 0) {\n writer.uint32(101).float(message.paddingRight)\n }\n if (message.paddingBottom !== 0) {\n writer.uint32(109).float(message.paddingBottom)\n }\n if (message.paddingLeft !== 0) {\n writer.uint32(117).float(message.paddingLeft)\n }\n if (message.lineSpacing !== 0) {\n writer.uint32(125).float(message.lineSpacing)\n }\n if (message.lineCount !== 0) {\n writer.uint32(128).int32(message.lineCount)\n }\n if (message.textWrapping === true) {\n writer.uint32(136).bool(message.textWrapping)\n }\n if (message.shadowBlur !== 0) {\n writer.uint32(149).float(message.shadowBlur)\n }\n if (message.shadowOffsetX !== 0) {\n writer.uint32(157).float(message.shadowOffsetX)\n }\n if (message.shadowOffsetY !== 0) {\n writer.uint32(165).float(message.shadowOffsetY)\n }\n if (message.outlineWidth !== 0) {\n writer.uint32(173).float(message.outlineWidth)\n }\n if (message.shadowColor !== undefined) {\n Color3.encode(message.shadowColor, writer.uint32(178).fork()).ldelim()\n }\n if (message.outlineColor !== undefined) {\n Color3.encode(message.outlineColor, writer.uint32(186).fork()).ldelim()\n }\n if (message.textColor !== undefined) {\n Color3.encode(message.textColor, writer.uint32(194).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBTextShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBTextShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.text = reader.string()\n break\n case 2:\n message.visible = reader.bool()\n break\n case 3:\n message.font = reader.string()\n break\n case 4:\n message.opacity = reader.float()\n break\n case 5:\n message.fontSize = reader.float()\n break\n case 6:\n message.fontAutoSize = reader.bool()\n break\n case 7:\n message.hTextAlign = reader.string()\n break\n case 8:\n message.vTextAlign = reader.string()\n break\n case 9:\n message.width = reader.float()\n break\n case 10:\n message.height = reader.float()\n break\n case 11:\n message.paddingTop = reader.float()\n break\n case 12:\n message.paddingRight = reader.float()\n break\n case 13:\n message.paddingBottom = reader.float()\n break\n case 14:\n message.paddingLeft = reader.float()\n break\n case 15:\n message.lineSpacing = reader.float()\n break\n case 16:\n message.lineCount = reader.int32()\n break\n case 17:\n message.textWrapping = reader.bool()\n break\n case 18:\n message.shadowBlur = reader.float()\n break\n case 19:\n message.shadowOffsetX = reader.float()\n break\n case 20:\n message.shadowOffsetY = reader.float()\n break\n case 21:\n message.outlineWidth = reader.float()\n break\n case 22:\n message.shadowColor = Color3.decode(reader, reader.uint32())\n break\n case 23:\n message.outlineColor = Color3.decode(reader, reader.uint32())\n break\n case 24:\n message.textColor = Color3.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBTextShape } from './pb/TextShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1030\n\n/**\n * @internal\n */\nexport const TextShape: EcsType<PBTextShape> = {\n serialize(value: PBTextShape, builder: ByteBuffer): void {\n const writer = PBTextShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBTextShape {\n return PBTextShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBTextShape {\n // TODO: this is a hack.\n return PBTextShape.decode(new Uint8Array())\n }\n}\n","import * as Animator from './Animator.gen'\nimport * as AudioSource from './AudioSource.gen'\nimport * as AvatarAttach from './AvatarAttach.gen'\nimport * as AvatarShape from './AvatarShape.gen'\nimport * as BoxShape from './BoxShape.gen'\nimport * as CylinderShape from './CylinderShape.gen'\nimport * as GLTFShape from './GLTFShape.gen'\nimport * as NFTShape from './NFTShape.gen'\nimport * as OnPointerDown from './OnPointerDown.gen'\nimport * as OnPointerDownResult from './OnPointerDownResult.gen'\nimport * as OnPointerUp from './OnPointerUp.gen'\nimport * as OnPointerUpResult from './OnPointerUpResult.gen'\nimport * as PlaneShape from './PlaneShape.gen'\nimport * as SphereShape from './SphereShape.gen'\nimport * as TextShape from './TextShape.gen'\nimport type { IEngine } from '../../engine/types'\n\nexport enum ComponentIds {\n Animator = 1042,\nAudioSource = 1020,\nAvatarAttach = 1073,\nAvatarShape = 1080,\nBoxShape = 1013,\nCylinderShape = 1016,\nGLTFShape = 1041,\nNFTShape = 1040,\nOnPointerDown = 1060,\nOnPointerDownResult = 1066,\nOnPointerUp = 1061,\nOnPointerUpResult = 1065,\nPlaneShape = 1014,\nSphereShape = 1015,\nTextShape = 1030,\n}\n\nexport function defineProtocolBufferComponents({\n defineComponent\n}: Pick<IEngine, 'defineComponent'>) {\n\n return {\nAnimator: defineComponent(Animator.COMPONENT_ID, Animator.Animator),\nAudioSource: defineComponent(AudioSource.COMPONENT_ID, AudioSource.AudioSource),\nAvatarAttach: defineComponent(AvatarAttach.COMPONENT_ID, AvatarAttach.AvatarAttach),\nAvatarShape: defineComponent(AvatarShape.COMPONENT_ID, AvatarShape.AvatarShape),\nBoxShape: defineComponent(BoxShape.COMPONENT_ID, BoxShape.BoxShape),\nCylinderShape: defineComponent(CylinderShape.COMPONENT_ID, CylinderShape.CylinderShape),\nGLTFShape: defineComponent(GLTFShape.COMPONENT_ID, GLTFShape.GLTFShape),\nNFTShape: defineComponent(NFTShape.COMPONENT_ID, NFTShape.NFTShape),\nOnPointerDown: defineComponent(OnPointerDown.COMPONENT_ID, OnPointerDown.OnPointerDown),\nOnPointerDownResult: defineComponent(OnPointerDownResult.COMPONENT_ID, OnPointerDownResult.OnPointerDownResult),\nOnPointerUp: defineComponent(OnPointerUp.COMPONENT_ID, OnPointerUp.OnPointerUp),\nOnPointerUpResult: defineComponent(OnPointerUpResult.COMPONENT_ID, OnPointerUpResult.OnPointerUpResult),\nPlaneShape: defineComponent(PlaneShape.COMPONENT_ID, PlaneShape.PlaneShape),\nSphereShape: defineComponent(SphereShape.COMPONENT_ID, SphereShape.SphereShape),\nTextShape: defineComponent(TextShape.COMPONENT_ID, TextShape.TextShape)\n }\n}\n","import { Quaternion, Vector3 } from '../../Math'\nimport type { EcsType } from '../../built-in-types/EcsType'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\n\n/**\n * @public\n */\nexport type Transform = {\n position: Vector3.MutableVector3\n rotation: Quaternion.MutableQuaternion\n scale: Vector3.MutableVector3\n parent?: Entity\n}\n\nexport const TRANSFORM_LENGTH = 44\n\n// This transform can be optimized with Float32Array for example\nexport const Transform: EcsType<Transform> = {\n serialize(value: Transform, builder: ByteBuffer): void {\n const ptr = builder.incrementWriteOffset(TRANSFORM_LENGTH)\n builder.setFloat32(ptr, value.position.x)\n builder.setFloat32(ptr + 4, value.position.y)\n builder.setFloat32(ptr + 8, value.position.z)\n builder.setFloat32(ptr + 12, value.rotation.x)\n builder.setFloat32(ptr + 16, value.rotation.y)\n builder.setFloat32(ptr + 20, value.rotation.z)\n builder.setFloat32(ptr + 24, value.rotation.w)\n builder.setFloat32(ptr + 28, value.scale.x)\n builder.setFloat32(ptr + 32, value.scale.y)\n builder.setFloat32(ptr + 36, value.scale.z)\n builder.setUint32(ptr + 40, value.parent || 0)\n },\n deserialize(reader: ByteBuffer): Transform {\n const ptr = reader.incrementReadOffset(TRANSFORM_LENGTH)\n return {\n position: Vector3.create(\n reader.getFloat32(ptr),\n reader.getFloat32(ptr + 4),\n reader.getFloat32(ptr + 8)\n ),\n rotation: Quaternion.create(\n reader.getFloat32(ptr + 12),\n reader.getFloat32(ptr + 16),\n reader.getFloat32(ptr + 20),\n reader.getFloat32(ptr + 24)\n ),\n scale: Vector3.create(\n reader.getFloat32(ptr + 28),\n reader.getFloat32(ptr + 32),\n reader.getFloat32(ptr + 36)\n ),\n parent: reader.getUint32(ptr + 40) as Entity\n }\n },\n create() {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 },\n parent: undefined\n }\n }\n}\n","/**\n * @public\n */\nexport enum LEGACY_COMPONENT_ID {\n TRANSFORM = 1,\n UUID_CALLBACK = 8,\n BOX_SHAPE = 16,\n SPHERE_SHAPE = 17,\n PLANE_SHAPE = 18,\n CONE_SHAPE = 19,\n CYLINDER_SHAPE = 20,\n TEXT_SHAPE = 21,\n\n NFT_SHAPE = 22,\n UI_WORLD_SPACE_SHAPE = 23,\n UI_SCREEN_SPACE_SHAPE = 24,\n UI_CONTAINER_RECT = 25,\n UI_CONTAINER_STACK = 26,\n UI_TEXT_SHAPE = 27,\n UI_INPUT_TEXT_SHAPE = 28,\n UI_IMAGE_SHAPE = 29,\n UI_SLIDER_SHAPE = 30,\n CIRCLE_SHAPE = 31,\n BILLBOARD = 32,\n\n ANIMATION = 33,\n FONT = 34,\n\n UI_FULLSCREEN_SHAPE = 40, // internal fullscreen scenes\n UI_BUTTON_SHAPE = 41,\n\n GLTF_SHAPE = 54,\n OBJ_SHAPE = 55,\n AVATAR_SHAPE = 56,\n\n BASIC_MATERIAL = 64,\n PBR_MATERIAL = 65,\n\n HIGHLIGHT_ENTITY = 66,\n\n /** @deprecated Sound has been deprecataed */\n SOUND = 67,\n TEXTURE = 68,\n\n VIDEO_CLIP = 70,\n VIDEO_TEXTURE = 71,\n\n AVATAR_TEXTURE = 72,\n\n AUDIO_CLIP = 200,\n AUDIO_SOURCE = 201,\n AUDIO_STREAM = 202,\n GIZMOS = 203,\n SMART_ITEM = 204,\n AVATAR_MODIFIER_AREA = 205,\n AVATAR_ATTACH = 206,\n CAMERA_MODE_AREA = 207,\n\n // For state sync only\n NAME = 300,\n LOCKED_ON_EDIT = 301,\n VISIBLE_ON_EDIT = 302\n}\n","export enum COMPONENT_ID {\n SYNC = 1000\n}\n","import type { IEngine } from '../../engine/types'\nimport { defineProtocolBufferComponents } from '../generated/index.gen'\nimport { Transform as LegacyTransform } from './Transform'\nimport { LEGACY_COMPONENT_ID as ID } from './types'\n\nexport function defineLegacyComponents({\n defineComponent\n}: Pick<IEngine, 'defineComponent'>) {\n return {\n Transform: defineComponent(ID.TRANSFORM, LegacyTransform),\n ...defineProtocolBufferComponents({ defineComponent })\n }\n}\n","import { defineLegacyComponents } from './legacy'\nimport type { IEngine } from '../engine/types'\n\nexport * from './types'\n\nexport function defineSdkComponents(engine: Pick<IEngine, 'defineComponent'>) {\n return {\n ...defineLegacyComponents(engine)\n }\n}\n\n/**\n * @public\n */\nexport type SdkComponents = ReturnType<typeof defineSdkComponents>\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crdtProtocol = exports.sameData = void 0;\n__exportStar(require(\"./types\"), exports);\n/**\n * Compare raw data.\n * @internal\n */\nfunction sameData(a, b) {\n // At reference level\n if (a === b)\n return true;\n if (a instanceof Uint8Array && b instanceof Uint8Array) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n if (globalThis.Buffer) {\n if (a instanceof Buffer && b instanceof Buffer) {\n // Deep level\n return a.equals(b);\n }\n }\n return false;\n}\nexports.sameData = sameData;\n/**\n * @public\n * CRDT protocol.\n * Stores the latest state, and decides whenever we have\n * to process and store the new data in case its an update, or\n * to discard and send our local value cause remote it's outdated.\n */\nfunction crdtProtocol() {\n /**\n * Local state where we store the latest lamport timestamp\n * and the raw data value\n * @internal\n */\n const state = {};\n /**\n * We should call this fn in order to update the state\n * @internal\n */\n function updateState(key, data, remoteTimestamp) {\n const timestamp = Math.max(remoteTimestamp, state[key]?.timestamp || 0);\n return (state[key] = { timestamp, data });\n }\n /**\n * Create an event for the specified key and store the new data and\n * lamport timestmap incremented by one in the state.\n * @public\n */\n function createEvent(key, data) {\n // Increment the timestamp\n const timestamp = (state[key]?.timestamp || 0) + 1;\n updateState(key, data, timestamp);\n return { key, data, timestamp };\n }\n /**\n * Process the received message only if the lamport number recieved is higher\n * than the stored one. If its lower, we spread it to the network to correct the peer.\n * If they are equal, the bigger raw data wins.\n \n * Returns the recieved data if the lamport number was bigger than ours.\n * If it was an outdated message, then we return void\n * @public\n */\n function processMessage(message) {\n const { key, data, timestamp } = message;\n const current = state[key];\n // The received message is > than our current value, update our state.\n if (!current || current.timestamp < timestamp) {\n updateState(key, data, timestamp);\n return message;\n }\n // Outdated Message. Resend our state message through the wire.\n if (current.timestamp > timestamp) {\n return {\n key,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n // Same data, same timestamp. Weirdo echo message.\n if (sameData(current.data, data)) {\n return message;\n }\n // Race condition, same timestamp diff data.\n function compareData(current, data) {\n return current > data;\n }\n if (compareData(current.data, data)) {\n return {\n key,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n updateState(key, data, timestamp).data;\n return message;\n }\n /**\n * Returns the current state\n * @public\n */\n function getState() {\n return { ...state };\n }\n return {\n createEvent,\n processMessage,\n getState\n };\n}\nexports.crdtProtocol = crdtProtocol;\n//# sourceMappingURL=index.js.map","/**\n * Take the max between currentSize and intendedSize and then plus 1024. Then,\n * find the next nearer multiple of 1024.\n * @param currentSize - number\n * @param intendedSize - number\n * @returns the calculated number\n */\nfunction getNextSize(currentSize: number, intendedSize: number) {\n const minNewSize = Math.max(currentSize, intendedSize) + 1024\n return Math.ceil(minNewSize / 1024) * 1024\n}\n\n/**\n * @param writing - writing option, see object specs.\n * @param reading - reading option, see object specs.\n * @param initialCapacity - Initial capacity of buffer to allocate, ignored if you use writing or reading options\n */\nexport interface CreateByteBufferOptions {\n /**\n * @param buffer - a buffer already allocated to read from there.\n * @param currentOffset - set the cursor where begins to read. Default 0\n * @param length - delimite where the valid data ends. Default: buffer.length\n */\n reading?: {\n buffer: Uint8Array\n length?: number\n currentOffset: number\n }\n\n /**\n * @param buffer - a buffer already allocated to write there.\n * @param currentOffset - set the cursor to not start writing from the begin of it. Default 0\n */\n writing?: {\n buffer: Uint8Array\n currentOffset?: number\n }\n\n initialCapacity?: number\n}\n\nconst defaultInitialCapacity = 10240\n\n/**\n * ByteBuffer is a wrapper of DataView which also adds a read and write offset.\n * Also in a write operation it resizes the buffer is being used if it needs.\n *\n * - Use read and write function to generate or consume data.\n * - Use set and get only if you are sure that you're doing.\n */\nexport function createByteBuffer(options: CreateByteBufferOptions = {}) {\n const initialROffset: number = options.reading?.currentOffset || 0\n let initialBuffer: Uint8Array | null = null\n let initialWOffset: number = 0\n\n if (options.writing) {\n initialBuffer = options.writing.buffer\n if (options.writing.currentOffset) {\n initialWOffset = options.writing.currentOffset\n }\n } else if (options.reading) {\n initialBuffer = options.reading.buffer\n initialWOffset = options.reading.length || options.reading.buffer.length\n } else {\n initialBuffer = new Uint8Array(\n options.initialCapacity || defaultInitialCapacity\n )\n }\n\n let buffer: Uint8Array = initialBuffer!\n let view: DataView = new DataView(buffer.buffer, buffer.byteOffset)\n let woffset: number = initialWOffset\n let roffset: number = initialROffset\n\n /**\n * Increement the write offset and resize the buffer if it needs.\n */\n const woAdd = (amount: number) => {\n if (woffset + amount > buffer.byteLength) {\n const newsize = getNextSize(buffer.byteLength, woffset + amount)\n const newBuffer = new Uint8Array(newsize)\n newBuffer.set(buffer)\n buffer = newBuffer\n view = new DataView(buffer.buffer)\n }\n\n woffset += amount\n return woffset - amount\n }\n\n /**\n * Increment the read offset and throw an error if it's trying to read\n * outside the bounds.\n */\n const roAdd = (amount: number) => {\n if (roffset + amount > woffset) {\n throw new Error('Outside of the bounds of writen data.')\n }\n\n roffset += amount\n return roffset - amount\n }\n\n return {\n /**\n * @returns The entire current Uint8Array.\n *\n * WARNING: if the buffer grows, the view had changed itself,\n * and the reference will be a invalid one.\n */\n buffer(): Uint8Array {\n return buffer\n },\n /**\n * @returns The capacity of the current buffer\n */\n bufferLength(): number {\n return buffer.length\n },\n /**\n * Resets byteBuffer to avoid creating a new one\n */\n resetBuffer(): void {\n roffset = 0\n woffset = 0\n },\n /**\n * @returns The current read offset\n */\n currentReadOffset(): number {\n return roffset\n },\n /**\n * @returns The current write offset\n */\n currentWriteOffset(): number {\n return woffset\n },\n /**\n * Reading purpose\n * Returns the previuos offsset size before incrementing\n */\n incrementReadOffset(amount: number): number {\n return roAdd(amount)\n },\n /**\n * @returns How many bytes are available to read.\n */\n remainingBytes(): number {\n return woffset - roffset\n },\n readFloat32(): number {\n return view.getFloat32(roAdd(4))\n },\n readFloat64(): number {\n return view.getFloat64(roAdd(8))\n },\n readInt8(): number {\n return view.getInt8(roAdd(1))\n },\n readInt16(): number {\n return view.getInt16(roAdd(2))\n },\n readInt32(): number {\n return view.getInt32(roAdd(4))\n },\n readInt64(): bigint {\n return view.getBigInt64(roAdd(8))\n },\n readUint8(): number {\n return view.getUint8(roAdd(1))\n },\n readUint16(): number {\n return view.getUint16(roAdd(2))\n },\n readUint32(): number {\n return view.getUint32(roAdd(4))\n },\n readUint64(): bigint {\n return view.getBigUint64(roAdd(8))\n },\n readBuffer() {\n const length = view.getUint32(roAdd(4))\n return buffer.subarray(roAdd(length), roAdd(0))\n },\n /**\n * Writing purpose\n */\n /**\n * Increment offset\n * @param amount - how many bytes\n * @returns The offset when this reserving starts.\n */\n incrementWriteOffset(amount: number): number {\n return woAdd(amount)\n },\n /**\n * @returns The total number of bytes writen in the buffer.\n */\n size(): number {\n return woffset\n },\n /**\n * Take care using this function, if you modify the data after, the\n * returned subarray will change too. If you'll modify the content of the\n * bytebuffer, maybe you want to use toCopiedBinary()\n *\n * @returns The subarray from 0 to offset as reference.\n */\n toBinary() {\n return buffer.subarray(0, woffset)\n },\n\n /**\n * Safe copied buffer of the current data of ByteBuffer\n *\n * @returns The subarray from 0 to offset.\n */\n toCopiedBinary() {\n return new Uint8Array(this.toBinary())\n },\n\n writeBuffer(value: Uint8Array, writeLength: boolean = true) {\n if (writeLength) {\n this.writeUint32(value.byteLength)\n }\n\n const o = woAdd(value.byteLength)\n buffer.set(value, o)\n },\n writeFloat32(value: number): void {\n const o = woAdd(4)\n view.setFloat32(o, value)\n },\n writeFloat64(value: number): void {\n const o = woAdd(8)\n view.setFloat64(o, value)\n },\n writeInt8(value: number): void {\n const o = woAdd(1)\n view.setInt8(o, value)\n },\n writeInt16(value: number): void {\n const o = woAdd(2)\n view.setInt16(o, value)\n },\n writeInt32(value: number): void {\n const o = woAdd(4)\n view.setInt32(o, value)\n },\n writeInt64(value: bigint): void {\n const o = woAdd(8)\n view.setBigInt64(o, value)\n },\n writeUint8(value: number): void {\n const o = woAdd(1)\n view.setUint8(o, value)\n },\n writeUint16(value: number): void {\n const o = woAdd(2)\n view.setUint16(o, value)\n },\n writeUint32(value: number): void {\n const o = woAdd(4)\n view.setUint32(o, value)\n },\n writeUint64(value: bigint): void {\n const o = woAdd(8)\n view.setBigUint64(o, value)\n },\n // Dataview Proxy\n getFloat32(offset: number): number {\n return view.getFloat32(offset)\n },\n getFloat64(offset: number): number {\n return view.getFloat64(offset)\n },\n getInt8(offset: number): number {\n return view.getInt8(offset)\n },\n getInt16(offset: number): number {\n return view.getInt16(offset)\n },\n getInt32(offset: number): number {\n return view.getInt32(offset)\n },\n getInt64(offset: number): bigint {\n return view.getBigInt64(offset)\n },\n getUint8(offset: number): number {\n return view.getUint8(offset)\n },\n getUint16(offset: number): number {\n return view.getUint16(offset)\n },\n getUint32(offset: number): number {\n return view.getUint32(offset)\n },\n getUint64(offset: number): bigint {\n return view.getBigUint64(offset)\n },\n setFloat32(offset: number, value: number): void {\n view.setFloat32(offset, value)\n },\n setFloat64(offset: number, value: number): void {\n view.setFloat64(offset, value)\n },\n setInt8(offset: number, value: number): void {\n view.setInt8(offset, value)\n },\n setInt16(offset: number, value: number): void {\n view.setInt16(offset, value)\n },\n setInt32(offset: number, value: number): void {\n view.setInt32(offset, value)\n },\n setInt64(offset: number, value: bigint): void {\n view.setBigInt64(offset, value)\n },\n setUint8(offset: number, value: number): void {\n view.setUint8(offset, value)\n },\n setUint16(offset: number, value: number): void {\n view.setUint16(offset, value)\n },\n setUint32(offset: number, value: number): void {\n view.setUint32(offset, value)\n },\n setUint64(offset: number, value: bigint): void {\n view.setBigUint64(offset, value)\n }\n }\n}\n\n/**\n * @public\n */\nexport type ByteBuffer = ReturnType<typeof createByteBuffer>\n","/**\n * The wire message is the top-level message that can be packed\n * inside it can contain a data with another structure or protocol\n *\n * Each wire message has three primitive property that it'll never change\n * ---> length uint32 (message size up to 4,294,967,295)\n * ---> version uint32 (for now just a number which is zero)\n * ---> message type uint32\n * The length indicates how many bytes are above self, the version in\n * combination with message type defines the set of handlers that will be\n * available to process the message\n *\n */\n\nimport { ByteBuffer } from './ByteBuffer'\n\ntype Uint32 = number\n\nexport namespace WireMessage {\n export enum Enum {\n RESERVED = 0,\n\n // Component Operation\n PUT_COMPONENT = 1,\n DELETE_COMPONENT = 2,\n\n MAX_MESSAGE_TYPE\n }\n\n /**\n * @param length - Uint32 the length of all message (including the header)\n * @param type - define the function which handles the data\n */\n export type Header = {\n length: Uint32\n type: Uint32\n }\n\n export const HEADER_LENGTH = 8\n /**\n * Validate if the message incoming is completed\n * @param buf - ByteBuffer\n */\n export function validate(buf: ByteBuffer) {\n const rem = buf.remainingBytes()\n if (rem < HEADER_LENGTH) {\n return false\n }\n\n const messageLength = buf.getUint32(buf.currentReadOffset())\n if (rem < messageLength) {\n return false\n }\n\n return true\n }\n\n export function readHeader(buf: ByteBuffer): Header | null {\n if (!validate(buf)) {\n return null\n }\n\n return {\n length: buf.readUint32(),\n type: buf.readUint32() as Enum\n }\n }\n}\n\nexport default WireMessage\n","import { ComponentDefinition } from '../../engine/component'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../ByteBuffer'\nimport WireMessage from '../wireMessage'\n\nexport namespace ComponentOperation {\n /**\n * @param entity - Uint32 number of the entity\n * @param componentId - Uint32 number of id\n * @param timestamp - Uint64 Lamport timestamp\n * @param data - Uint8[] data of component\n */\n export type IPutComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data: Uint8Array\n }\n export type IDeleteComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data?: undefined\n }\n\n export const MESSAGE_HEADER_LENGTH = 20\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n export function write(\n type: WireMessage.Enum,\n entity: Entity,\n timestamp: number,\n componentDefinition: ComponentDefinition,\n buf: ByteBuffer\n ) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(\n WireMessage.HEADER_LENGTH + MESSAGE_HEADER_LENGTH\n )\n\n // write body\n if (type === WireMessage.Enum.PUT_COMPONENT) {\n componentDefinition.writeToByteBuffer(entity, buf)\n }\n const messageLength = buf.size() - startMessageOffset\n\n // Write WireMessage header\n buf.setUint32(startMessageOffset, messageLength)\n buf.setUint32(startMessageOffset + 4, type)\n\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity)\n buf.setUint32(startMessageOffset + 12, componentDefinition._id)\n buf.setUint64(startMessageOffset + 16, BigInt(timestamp))\n buf.setUint32(\n startMessageOffset + 24,\n messageLength - MESSAGE_HEADER_LENGTH - WireMessage.HEADER_LENGTH\n )\n }\n\n export function read(\n buf: ByteBuffer\n ): (WireMessage.Header & (IPutComponent | IDeleteComponent)) | null {\n const header = WireMessage.readHeader(buf)\n\n if (!header) {\n return null\n }\n\n const common = {\n ...header,\n entity: buf.readUint32() as Entity,\n componentId: buf.readInt32(),\n timestamp: Number(buf.readUint64())\n }\n\n if (header.type === WireMessage.Enum.DELETE_COMPONENT) {\n return common\n }\n\n return {\n ...common,\n data: buf.readBuffer()\n }\n }\n}\n","import { ComponentDefinition } from '../../engine/component'\nimport { Entity } from '../../engine/entity'\n\nexport namespace CrdtUtils {\n export type ComponentID = ComponentDefinition['_id']\n\n export function getKey(entity: Entity, componentId: ComponentID): string {\n return `${entity}.${componentId}`\n }\n\n export enum SynchronizedEntityType {\n // synchronizes entities with the NetworkSynchronized component only, used for networked games\n NETWORKED,\n // synchronizes entities needed by the renderer\n RENDERER\n }\n}\n\nexport default CrdtUtils\n","import { Entity } from './entity'\n\nexport namespace EntityUtils {\n /**\n * Range is the first element and the last possible element, they both are included in the interval.\n * [start, end]\n */\n export type EntityRange = readonly [number, number]\n\n export const MAX_ENTITIES = 0xffffffff\n export const DYNAMIC_ENTITIES_START_AT = 100e3\n export const RESERVED_STATIC_ENTITIES = 512\n\n export const RESERVED_ENTITIES_RANGE: EntityRange = [\n 0,\n RESERVED_STATIC_ENTITIES - 1\n ]\n\n export const STATIC_ENTITIES_RANGE: EntityRange = [\n RESERVED_STATIC_ENTITIES,\n DYNAMIC_ENTITIES_START_AT - 1\n ]\n\n export const DYNAMIC_ENTITIES_RANGE: EntityRange = [\n DYNAMIC_ENTITIES_START_AT,\n MAX_ENTITIES\n ]\n\n function isInRange(entity: Entity, range: EntityRange): boolean {\n return entity >= range[0] && entity <= range[1]\n }\n\n export function isDynamicEntity(entity: Entity) {\n return isInRange(entity, DYNAMIC_ENTITIES_RANGE)\n }\n\n export function isStaticEntity(entity: Entity) {\n return isInRange(entity, STATIC_ENTITIES_RANGE)\n }\n\n export function isReservedEntity(entity: Entity) {\n return isInRange(entity, RESERVED_ENTITIES_RANGE)\n }\n}\n\nexport default EntityUtils\n","import { crdtProtocol, Message as CrdtMessage } from '@dcl/crdt'\n\nimport type { PreEngine } from '../../engine'\nimport { Entity } from '../../engine/entity'\nimport { createByteBuffer } from '../../serialization/ByteBuffer'\nimport { ComponentOperation as Message } from '../../serialization/crdt/componentOperation'\nimport WireMessage from '../../serialization/wireMessage'\nimport { Transport } from './transports/types'\nimport { ReceiveMessage, TransportMessage } from './types'\nimport CrdtUtils from './utils'\n\nexport function crdtSceneSystem({\n engine,\n transports\n}: {\n engine: PreEngine\n transports: Transport[]\n}) {\n // CRDT Client\n const crdtClient = crdtProtocol<Uint8Array>()\n // Messages that we received at transport.onMessage waiting to be processed\n const receivedMessages: ReceiveMessage[] = []\n // Messages already processed by the engine but that we need to broadcast to other transports.\n const transportMessages: TransportMessage[] = []\n // Map of entities already processed at least once\n\n transports.forEach(\n (transport) => (transport.onmessage = parseChunkMessage(transport.type))\n )\n\n /**\n *\n * @param transportType tranport id to identiy messages\n * @returns a function to process received messages\n */\n function parseChunkMessage(transportType: string) {\n /**\n * Receives a chunk of binary messages and stores all the valid\n * Component Operation Messages at messages queue\n * @param chunkMessage A chunk of binary messages\n */\n return function parseChunkMessage(chunkMessage: Uint8Array) {\n const buffer = createByteBuffer({\n reading: { buffer: chunkMessage, currentOffset: 0 }\n })\n\n while (WireMessage.validate(buffer)) {\n const offset = buffer.currentReadOffset()\n const message = Message.read(buffer)!\n\n const { type, entity, componentId, data, timestamp } = message\n receivedMessages.push({\n type,\n entity,\n componentId,\n data,\n timestamp,\n transportType,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentReadOffset())\n })\n }\n }\n }\n\n /**\n * Return and clear the messaes queue\n * @returns messages recieved by the transport to process on the next tick\n */\n function getMessages<T = unknown>(value: T[]) {\n const messagesToProcess = Array.from(value)\n value.length = 0\n return messagesToProcess\n }\n\n /**\n * This fn will be called on every tick.\n * Process all the messages queue received by the transport\n */\n function receiveMessages() {\n const messagesToProcess = getMessages(receivedMessages)\n for (const transport of transports) {\n const buffer = createByteBuffer()\n for (const message of messagesToProcess) {\n const { data, timestamp, componentId, entity, type } = message\n const crdtMessage: CrdtMessage<Uint8Array> = {\n key: CrdtUtils.getKey(entity, componentId),\n data: data || null,\n timestamp: timestamp\n }\n const component = engine.getComponent(componentId)\n const current = crdtClient.processMessage(crdtMessage)\n\n // CRDT outdated message. Resend this message through the wire\n if (crdtMessage !== current) {\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n Message.write(type, entity, current.timestamp, component, buffer)\n } else {\n // Process CRDT Message\n if (type === WireMessage.Enum.DELETE_COMPONENT) {\n component.deleteFrom(entity)\n } else {\n const opts = {\n reading: { buffer: message.data!, currentOffset: 0 }\n }\n const bb = createByteBuffer(opts)\n\n // Update engine component\n component.upsertFromBinary(message.entity, bb)\n component.clearDirty()\n }\n // Add message to transport queue to be processed by others transports\n transportMessages.push(message)\n }\n }\n\n if (buffer.size()) {\n transport.send(buffer.toBinary())\n }\n }\n }\n\n /**\n * Iterates the dirty map and generates crdt messages to be send\n * @param dirtyMap a map of { entities: [componentId] }\n */\n function createMessages(dirtyMap: Map<Entity, Set<number>>) {\n // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages\n const crdtMessages = getMessages(transportMessages)\n const buffer = createByteBuffer()\n\n for (const [entity, componentsId] of dirtyMap) {\n for (const componentId of componentsId) {\n const component = engine.getComponent(componentId)\n const entityComponent = component.has(entity)\n ? component.toBinary(entity).toBinary()\n : null\n const event = crdtClient.createEvent(\n CrdtUtils.getKey(entity, componentId),\n entityComponent\n )\n const offset = buffer.currentWriteOffset()\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n const transportMessage: Omit<TransportMessage, 'messageBuffer'> = {\n type,\n componentId,\n entity,\n timestamp: event.timestamp\n }\n if (transports.some((t) => t.filter(transportMessage))) {\n Message.write(type, entity, event.timestamp, component, buffer)\n crdtMessages.push({\n ...transportMessage,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentWriteOffset())\n })\n }\n }\n }\n\n // Send messages to transports\n const transportBuffer = createByteBuffer()\n for (const transport of transports) {\n transportBuffer.resetBuffer()\n for (const message of crdtMessages) {\n if (transport.filter(message)) {\n transportBuffer.writeBuffer(message.messageBuffer, false)\n }\n }\n if (transportBuffer.size()) {\n transport.send(transportBuffer.toBinary())\n }\n }\n }\n\n return {\n createMessages,\n receiveMessages\n }\n}\n","import { EntityUtils } from './entity-utils'\n\ndeclare const entitySymbol: unique symbol\n/**\n * @public\n */\nexport type Entity = number & { [entitySymbol]: true }\n\nexport function EntityContainer() {\n const staticEntity = Entity(EntityUtils.STATIC_ENTITIES_RANGE)\n const dynamicEntity = Entity(EntityUtils.DYNAMIC_ENTITIES_RANGE)\n return {\n generateEntity(dynamic: boolean = false): Entity {\n if (dynamic) {\n return dynamicEntity.generateEntity()\n } else {\n return staticEntity.generateEntity()\n }\n },\n removeEntity(entity: Entity): boolean {\n return (\n staticEntity.removeEntity(entity) || dynamicEntity.removeEntity(entity)\n )\n },\n isEntityExists(entity: Entity): boolean {\n return (\n EntityUtils.isReservedEntity(entity) ||\n staticEntity.getExistingEntities().has(entity) ||\n dynamicEntity.getExistingEntities().has(entity)\n )\n },\n getExistingEntities(): Set<Entity> {\n return new Set([\n ...staticEntity.getExistingEntities(),\n ...dynamicEntity.getExistingEntities()\n ])\n }\n }\n}\n\nfunction Entity(range: EntityUtils.EntityRange) {\n function createEntity(entity: number): Entity {\n return entity as Entity\n }\n\n let entityCounter = range[0]\n const usedEntities: Set<Entity> = new Set()\n\n function generateEntity(): Entity {\n if (entityCounter >= range[1]) {\n throw new Error(\n `It fails trying to generate an entity out of range [${range[0]}, ${range[1]}].`\n )\n }\n\n const entity = createEntity(entityCounter)\n entityCounter++\n\n usedEntities.add(entity)\n return entity\n }\n\n function removeEntity(entity: Entity) {\n return usedEntities.delete(entity)\n }\n\n return {\n getExistingEntities() {\n return new Set(usedEntities)\n },\n generateEntity,\n removeEntity\n }\n}\n","import type { DeepReadonly } from '../Math'\nexport type { DeepReadonly }\n\nexport function deepReadonly<T extends Record<string, unknown>>(\n val: T\n): DeepReadonly<T> {\n // Fail only on development due to perf issues\n // if (isProd()) {\n // return val\n // }\n\n return Object.freeze({ ...val })\n}\n\nexport function isNotUndefined<T>(val: T | undefined): val is T {\n return !!val\n}\n","import type { EcsType } from '../built-in-types/EcsType'\nimport { ByteBuffer, createByteBuffer } from '../serialization/ByteBuffer'\nimport { Entity } from './entity'\nimport { deepReadonly, DeepReadonly } from './utils'\n\n/**\n * @public\n */\nexport type EcsResult<T extends EcsType> = T extends EcsType\n ? ReturnType<T['deserialize']>\n : never\n\n/**\n * @public\n */\nexport type ComponentType<T extends EcsType> = EcsResult<T>\n\n/**\n * @public\n */\nexport type ComponentDefinition<T extends EcsType = EcsType<any>> = {\n _id: number\n has(entity: Entity): boolean\n getFrom(entity: Entity): DeepReadonly<ComponentType<T>>\n\n getOrNull(entity: Entity): DeepReadonly<ComponentType<T>> | null\n\n // adds this component to the list \"to be reviewed next frame\"\n create(entity: Entity, val?: ComponentType<T>): ComponentType<T>\n\n // adds this component to the list \"to be reviewed next frame\"\n mutable(entity: Entity): ComponentType<T>\n createOrReplace(entity: Entity, val?: ComponentType<T>): ComponentType<T>\n deleteFrom(entity: Entity): ComponentType<T> | null\n\n upsertFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n updateFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n // allocates a buffer and returns new buffer\n toBinary(entity: Entity): ByteBuffer\n // writes to a pre-allocated buffer\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void\n\n iterator(): Iterable<[Entity, ComponentType<T>]>\n\n // Dirty\n dirtyIterator(): Iterable<Entity>\n clearDirty(): void\n isDirty(entity: Entity): boolean\n}\n\nexport function defineComponent<T extends EcsType>(\n componentId: number,\n spec: T\n // meta: { syncFlags }\n): ComponentDefinition<T> {\n const data = new Map<Entity, ComponentType<T>>()\n const dirtyIterator = new Set<Entity>()\n\n return {\n _id: componentId,\n isDirty: function (entity: Entity): boolean {\n return dirtyIterator.has(entity)\n },\n has: function (entity: Entity): boolean {\n return data.has(entity)\n },\n deleteFrom: function (entity: Entity): ComponentType<T> | null {\n const component = data.get(entity)\n data.delete(entity)\n dirtyIterator.add(entity)\n return component || null\n },\n getOrNull: function (\n entity: Entity\n ): DeepReadonly<ComponentType<T>> | null {\n const component = data.get(entity)\n return component ? deepReadonly(component) : null\n },\n getFrom: function (entity: Entity): DeepReadonly<ComponentType<T>> {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[getFrom] Component ${componentId} for ${entity} not found`\n )\n }\n return deepReadonly(component)\n },\n create: function (\n entity: Entity,\n value?: ComponentType<T>\n ): ComponentType<T> {\n const component = data.get(entity)\n if (component) {\n throw new Error(\n `[create] Component ${componentId} for ${entity} already exists`\n )\n }\n const usedValue = value === undefined ? spec.create() : value\n data.set(entity, usedValue)\n dirtyIterator.add(entity)\n return usedValue\n },\n createOrReplace: function (\n entity: Entity,\n value?: ComponentType<T>\n ): ComponentType<T> {\n const usedValue = value === undefined ? spec.create() : value\n data.set(entity, usedValue!)\n dirtyIterator.add(entity)\n return usedValue!\n },\n mutable: function (entity: Entity): ComponentType<T> {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[mutable] Component ${componentId} for ${entity} not found`\n )\n }\n dirtyIterator.add(entity)\n return component\n },\n iterator: function* (): Iterable<[Entity, ComponentType<T>]> {\n for (const [entity, component] of data) {\n yield [entity, component]\n }\n },\n dirtyIterator: function* (): Iterable<Entity> {\n for (const entity of dirtyIterator) {\n yield entity\n }\n },\n toBinary(entity: Entity): ByteBuffer {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[toBinary] Component ${componentId} for ${entity} not found`\n )\n }\n\n const writeBuffer = createByteBuffer()\n spec.serialize(component, writeBuffer)\n return writeBuffer\n },\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[writeToByteBuffer] Component ${componentId} for ${entity} not found`\n )\n }\n\n spec.serialize(component, buffer)\n },\n updateFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[updateFromBinary] Component ${componentId} for ${entity} not found`\n )\n }\n return this.upsertFromBinary(entity, buffer)\n },\n upsertFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const newValue = spec.deserialize(buffer)\n data.set(entity, newValue)\n dirtyIterator.add(entity)\n return newValue\n },\n clearDirty: function () {\n dirtyIterator.clear()\n }\n }\n}\n","/**\n * @public\n */\nexport type Update = (dt: number) => void\n\nexport const SYSTEMS_REGULAR_PRIORITY = 100e3\n\ntype SystemItem = {\n fn: Update\n priority: number\n name?: string\n}\n\nexport function SystemContainer() {\n const systems: SystemItem[] = []\n\n function sort() {\n systems.sort((a, b) => b.priority - a.priority)\n }\n\n function add(fn: Update, priority: number, name?: string): void {\n if (systems.find((item) => item.fn === fn)) {\n throw new Error('System already added')\n } else if (name && systems.find((item) => item.name === name)) {\n throw new Error('System name already used')\n }\n\n systems.push({\n fn,\n priority,\n name\n })\n sort()\n }\n\n function remove(selector: string | Update) {\n let index = -1\n\n if (typeof selector === 'string') {\n index = systems.findIndex((item) => item.name === selector)\n } else {\n index = systems.findIndex((item) => item.fn === selector)\n }\n\n if (index === -1) {\n return false\n }\n\n systems.splice(index, 1)\n sort()\n return true\n }\n\n return {\n add,\n remove,\n getSystems() {\n return systems\n }\n }\n}\n","import { defineSdkComponents, SdkComponents } from '../components'\nimport { crdtSceneSystem } from '../systems/crdt'\nimport { Entity, EntityContainer } from './entity'\nimport {\n ComponentType,\n ComponentDefinition,\n defineComponent as defComponent\n} from './component'\nimport type { ComponentEcsType, IEngineParams } from './types'\nimport type { DeepReadonly } from '../Math'\nimport type { EcsType } from '../built-in-types/EcsType'\nimport { IEngine } from './types'\nimport { ByteBuffer } from '../serialization/ByteBuffer'\nimport { SystemContainer, SYSTEMS_REGULAR_PRIORITY, Update } from './systems'\n\nexport { ComponentType, Entity, ByteBuffer, SdkComponents, ComponentDefinition }\nexport * from './types'\n\nfunction preEngine() {\n const entityContainer = EntityContainer()\n const componentsDefinition = new Map<number, ComponentDefinition<any>>()\n // TODO: find a way to make this work.\n // Maybe a proxy/callback to be up-to-date\n const entitiesComponent = new Map<\n number,\n Set<ComponentDefinition<any>['_id']>\n >()\n const systems = SystemContainer()\n\n function addSystem(\n fn: Update,\n priority: number = SYSTEMS_REGULAR_PRIORITY,\n name?: string\n ) {\n systems.add(fn, priority, name)\n }\n\n function removeSystem(selector: string | Update) {\n return systems.remove(selector)\n }\n\n function addEntity(dynamic: boolean = false) {\n // entitiesCompnonent.set(entity, new Set())\n const entity = entityContainer.generateEntity(dynamic)\n return entity\n }\n\n function addDynamicEntity() {\n return addEntity(true)\n }\n\n function removeEntity(entity: Entity) {\n for (const [, component] of componentsDefinition) {\n if (component.has(entity)) {\n component.deleteFrom(entity)\n }\n }\n\n return entityContainer.removeEntity(entity)\n }\n\n function defineComponent<T extends EcsType>(\n componentId: number,\n spec: T\n ): ComponentDefinition<T> {\n if (componentsDefinition.get(componentId)) {\n throw new Error(`Component ${componentId} already declared`)\n }\n const newComponent = defComponent<T>(componentId, spec)\n componentsDefinition.set(componentId, newComponent)\n return newComponent\n }\n\n function getComponent<T extends EcsType>(\n componentId: number\n ): ComponentDefinition<T> {\n const component = componentsDefinition.get(componentId)\n if (!component) {\n throw new Error(\n 'Component not found. You need to declare the components at the beginnig of the engine declaration'\n )\n }\n return component\n }\n\n function* mutableGroupOf<\n T extends [ComponentDefinition, ...ComponentDefinition[]]\n >(...components: T): Iterable<[Entity, ...ComponentEcsType<T>]> {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.mutable(entity))] as [\n Entity,\n ...ComponentEcsType<T>\n ]\n }\n }\n\n function* groupOf<T extends [ComponentDefinition, ...ComponentDefinition[]]>(\n ...components: T\n ): Iterable<[Entity, ...DeepReadonly<ComponentEcsType<T>>]> {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.getFrom(entity))] as [\n Entity,\n ...DeepReadonly<ComponentEcsType<T>>\n ]\n }\n }\n\n function* getComponentDefGroup<T extends ComponentDefinition[]>(\n ...args: T\n ): Iterable<[Entity, ...T]> {\n const [firstComponentDef, ...componentDefinitions] = args\n for (const [entity] of firstComponentDef.iterator()) {\n let matches = true\n for (const componentDef of componentDefinitions) {\n if (!componentDef.has(entity)) {\n matches = false\n break\n }\n }\n\n if (matches) {\n yield [entity, ...args]\n }\n }\n }\n\n function getSystems() {\n return systems.getSystems()\n }\n\n return {\n entitiesComponent,\n componentsDefinition,\n addEntity,\n addDynamicEntity,\n removeEntity,\n addSystem,\n getSystems,\n removeSystem,\n defineComponent,\n mutableGroupOf,\n groupOf,\n getComponent\n }\n}\n\n/**\n * @internal\n */\nexport type PreEngine = ReturnType<typeof preEngine>\n\n/**\n * @public\n */\nexport function Engine({ transports }: IEngineParams = {}): IEngine {\n const engine = preEngine()\n const crdtSystem = crdtSceneSystem({ engine, transports: transports || [] })\n const baseComponents = defineSdkComponents(engine)\n\n function update(dt: number) {\n crdtSystem.receiveMessages()\n\n for (const system of engine.getSystems()) {\n system.fn(dt)\n }\n\n // Selected components that only exist one frame\n // then, they are deleted but their crdt state keeps\n const removeSelectedComponents = [\n baseComponents.OnPointerDownResult,\n baseComponents.OnPointerUpResult\n ]\n const excludeComponentIds = removeSelectedComponents.map((item) => item._id)\n for (const componentDef of removeSelectedComponents) {\n for (const [entity] of engine.groupOf(componentDef)) {\n componentDef.deleteFrom(entity)\n }\n }\n\n // TODO: Perf tip\n // Should we add some dirtyIteratorSet at engine level so we dont have\n // to iterate all the component definitions to get the dirty ones ?\n const dirtySet = new Map<Entity, Set<number>>()\n for (const [componentId, definition] of engine.componentsDefinition) {\n if (excludeComponentIds.includes(componentId)) continue\n\n for (const entity of definition.dirtyIterator()) {\n if (!dirtySet.has(entity)) {\n dirtySet.set(entity, new Set())\n }\n dirtySet.get(entity)!.add(componentId)\n }\n }\n crdtSystem.createMessages(dirtySet)\n\n for (const [_componentId, definition] of engine.componentsDefinition) {\n definition.clearDirty()\n }\n }\n\n return {\n addEntity: engine.addEntity,\n addDynamicEntity: engine.addDynamicEntity,\n removeEntity: engine.removeEntity,\n addSystem: engine.addSystem,\n removeSystem: engine.removeSystem,\n defineComponent: engine.defineComponent,\n mutableGroupOf: engine.mutableGroupOf,\n groupOf: engine.groupOf,\n getComponent: engine.getComponent,\n update,\n baseComponents\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { EcsType } from './EcsType'\nimport { ToOptional } from './typing'\n\n/**\n * @public\n */\nexport interface Spec {\n [key: string]: EcsType\n}\n\n/**\n * @public\n */\nexport type Result<T extends Spec> = ToOptional<{\n [K in keyof T]: T[K] extends EcsType\n ? ReturnType<T[K]['deserialize']>\n : T[K] extends Spec\n ? Result<T[K]>\n : never\n}>\n\n/**\n * @public\n */\nexport function MapType<T extends Spec>(spec: T): EcsType<Result<T>> {\n return {\n serialize(value: Result<T>, builder: ByteBuffer): void {\n for (const key in spec) {\n // TODO: as any\n spec[key].serialize((value as any)[key], builder)\n }\n },\n deserialize(reader: ByteBuffer): Result<T> {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].deserialize(reader)\n }\n return newValue\n },\n create() {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].create()\n }\n return newValue\n }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { EcsType } from './EcsType'\n\n/**\n * @public\n */\nexport function ArrayType<T>(type: EcsType<T>): EcsType<Array<T>> {\n return {\n serialize(value: Array<T>, builder: ByteBuffer): void {\n builder.writeUint32(value.length)\n for (const item of value) {\n type.serialize(item, builder)\n }\n },\n deserialize(reader: ByteBuffer): Array<T> {\n const newArray: Array<T> = []\n const length = reader.readUint32()\n for (let index = 0; index < length; index++) {\n newArray.push(type.deserialize(reader))\n }\n return newArray\n },\n create() {\n return []\n }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { EcsType } from './EcsType'\n\n/**\n * @public\n */\nexport function Optional<T>(spec: EcsType<T>): EcsType<T | undefined> {\n return {\n serialize(value: T | undefined, builder: ByteBuffer): void {\n if (value) {\n builder.writeInt8(1)\n spec.serialize(value, builder)\n } else {\n builder.writeInt8(0)\n }\n },\n deserialize(reader: ByteBuffer): T | undefined {\n const exists = reader.readInt8()\n if (exists) {\n return spec.deserialize(reader)\n }\n },\n create() {\n return undefined\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const Int64: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt64(BigInt(value))\n },\n deserialize(reader: ByteBuffer): number {\n return Number(reader.readInt64())\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int32: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt32()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int16: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt16(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt16()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int8: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt8(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt8()\n },\n create() {\n return 0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const Float32: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat32()\n },\n create() {\n return 0.0\n }\n}\n\n/**\n * @public\n */\nexport const Float64: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat64(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat64()\n },\n create() {\n return 0.0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const FlatString: EcsType<string> = {\n serialize(value: string, builder: ByteBuffer): void {\n builder.writeBuffer(new TextEncoder().encode(value))\n },\n deserialize(reader: ByteBuffer): string {\n return new TextDecoder().decode(reader.readBuffer())\n },\n create() {\n return ''\n }\n}\n\n/**\n * @public\n */\nexport const EcsString = FlatString\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport function Enum<T>(type: EcsType<any>): EcsType<T> {\n return {\n serialize(value: T, builder: ByteBuffer): void {\n type.serialize(value, builder)\n },\n deserialize(reader: ByteBuffer): T {\n return type.deserialize(reader)\n },\n create() {\n return type.create()\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const EcsBoolean: EcsType<boolean> = {\n serialize(value: boolean, builder: ByteBuffer): void {\n builder.writeInt8(value ? 1 : 0)\n },\n deserialize(reader: ByteBuffer): boolean {\n return reader.readInt8() === 1\n },\n create() {\n return false\n }\n}\n","import { TransportMessage } from '../types'\nimport { Transport } from './types'\nimport { ComponentIds } from '../../../components/generated/index.gen'\nimport { LEGACY_COMPONENT_ID } from '../../../components/legacy/types'\n\nconst componentIds = Object.values(ComponentIds)\n .filter((a) => typeof a === 'number')\n .map(Number)\nconst rendererComponentIds = componentIds.concat(LEGACY_COMPONENT_ID.TRANSFORM)\n\nexport function createRendererTransport(): Transport {\n const type = 'renderer'\n return {\n type,\n send(message: Uint8Array): void {\n // TODO: replace with new rpc\n dcl\n .callRpc('@decentraland/ExperimentalAPI', 'sendToRenderer', [\n { data: new Uint8Array(message) }\n ])\n .catch(dcl.error)\n },\n filter(message: TransportMessage): boolean {\n // Echo message, ignore them\n if (message.transportType === type) {\n return false\n }\n\n // Only send renderer components (Proto Generated)\n if (!rendererComponentIds.includes(message.componentId)) {\n return false\n }\n\n return !!message\n }\n }\n}\n","import { TransportMessage } from '../types'\nimport { Transport } from './types'\n\nexport function createNetworkTransport(): Transport {\n // const rpc = new RpcTransport()\n function send(..._args: any[]) {\n // console.log('NetworkMessage Sent: ', ...args)\n }\n\n const type = 'network-transport'\n return {\n send,\n type,\n filter(message: TransportMessage): boolean {\n // Echo message, ignore them\n if (message.transportType === type) {\n return false\n }\n\n // TODO: Static entities & Network components\n\n return !!message // validComponents.includes(componentId)\n }\n }\n}\n","/**\n * @alpha * This file initialization is an alpha one. This is based on the old-ecs\n * init and it'll be changing.\n */\n\nimport { Engine } from './engine'\nimport { createRendererTransport } from './systems/crdt/transports/rendererTransport'\nimport { createNetworkTransport } from './systems/crdt/transports/networkTransport'\n\nconst rendererTransport = createRendererTransport()\nexport const engine = Engine({\n transports: [rendererTransport, createNetworkTransport()]\n})\n\nif (dcl) {\n dcl.loadModule('@decentraland/ExperimentalAPI', {}).catch(dcl.error)\n\n async function pullRendererMessages() {\n const response = await dcl.callRpc(\n '@decentraland/ExperimentalAPI',\n 'messageFromRenderer',\n []\n )\n\n if (response.data?.length) {\n if (rendererTransport.onmessage) {\n for (const byteArray of response.data) {\n rendererTransport.onmessage(byteArray)\n }\n }\n }\n }\n\n dcl.onUpdate((dt: number) => {\n pullRendererMessages()\n .catch(dcl.error)\n .finally(() => engine.update(dt))\n })\n}\n"],"names":["Object","defineProperty","exports","value","Vector3","create","x","y","z","copy","source","dest","length","vector","Math","sqrt","scaleToRef","scale","result","normalizeFromLength","len","normalizeFromLengthToRef","lerpToRef","start","end","amount","add","vector1","vector2","subtract","minuend","subtrahend","subtractToRef","opposite","clone","assign","lengthSquared","normalize","normalizeToRef","dot","left","right","rotate","q","qx","qy","qz","w","qw","ix","iy","iz","iw","lerp","cross","Zero","crossToRef","One","Up","Down","Forward","Backward","Right","Left","Scalar","TwoPi","PI","sign","_value","isNaN","clamp","min","max","repeat","floor","deltaAngle","current","target","num","moveTowards","maxDelta","abs","withinEpsilon","a","b","epsilon","toHex","i","str","toString","toUpperCase","log2","log","LOG2E","denormalize","normalized","pingPong","tx","t","smoothStep","from","to","moveTowardsAngle","lerpAngle","inverseLerp","hermite","value1","tangent1","value2","tangent2","squared","cubed","randomRange","random","rangeToPercent","percentToRange","percent","normalizeRadians","angle","Orientation","Space","RAD2DEG","DEG2RAD","ToLinearSpace","ToGammaSpace","Epsilon","Quaternion","Vector3_1","require$$0","Scalar_1","require$$1","types_1","require$$2","rotationYawPitchRoll","yaw","pitch","roll","halfPitch","halfYaw","halfRoll","c1","cos","c2","c3","s1","sin","s2","s3","quat1","quat2","dotVal","acos","qLength","Identity","slerp","slerpToRef","multiplyToRef","self","q1","q2","euler","rotateTowards","maxDegreesDelta","lookRotation","forward","up","forwardNew","upNew","m00","m01","m02","m10","m11","m12","m20","m21","m22","num8","quaternion","num7","num4","num6","num3","num5","num2","fromToRotation","v0","v1","eulerAngles","out","unit","test","atan2","asin","rotationYawPitchRollToRef","fromRotationMatrixToRef","matrix","data","_m","m13","m23","m31","m32","m33","trace","s","flag","multiply","angleAxis","degress","axis","radians","a2","__createBinding","this","o","m","k","k2","undefined","enumerable","get","__exportStar","p","prototype","hasOwnProperty","call","require$$3","aspromise","fn","ctx","params","Array","arguments","offset","index","pending","Promise","resolve","reject","err","apply","base64","string","n","charAt","ceil","b64","s64","encode","buffer","parts","chunk","j","push","String","fromCharCode","slice","join","invalidEncoding","decode","c","charCodeAt","Error","EventEmitter","_listeners","eventemitter","on","evt","off","listeners","splice","emit","args","factory","Float32Array","f32","f8b","Uint8Array","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","round","exponent","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","float","inquire","moduleName","mod","eval","replace","keys","e","inquire_1","utf8","read","write","pool_1","alloc","size","SIZE","MAX","slab","longbits","LongBits","util","zero","toNumber","zzEncode","zzDecode","zeroHash","fromNumber","isString","Long","parseInt","fromString","low","high","unsigned","toLong","Boolean","fromHash","hash","toHash","mask","part0","part1","part2","merge","dst","src","ifNotSet","newError","name","CustomError","message","properties","captureStackTrace","stack","constructor","asPromise","require$$4","require$$5","pool","require$$6","require$$7","isNode","global","process","versions","node","window","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","isObject","isset","isSet","obj","prop","isArray","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","bits","fromBits","lcFirst","toLowerCase","substring","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","bytes","json","_configure","encoding","allocUnsafe","writer","Writer","BufferWriter","Op","next","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","subarray","_push","uint32","int32","sint32","uint64","int64","sint64","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","set","fork","reset","ldelim","finish","BufferWriter_","writer_buffer","writeStringBuffer","writeBytesBuffer","byteLength","reader","Reader","BufferReader","indexOutOfRange","writeLength","RangeError","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","_slice","skip","skipType","wireType","BufferReader_","reader_buffer","utf8Slice","service","Service","rpcImpl","requestDelimited","responseDelimited","TypeError","rpcCall","method","requestCtor","responseCtor","request","callback","response","setTimeout","endedByRPC","roots","protobuf","configure","build","rpc","minimalExports","requireMinimal","createBasePBAnimator","PBAnimator","[object Object]","_m0.Writer","v","PBAnimationState","input","_m0.Reader","tag","createBasePBAnimationState","clip","playing","weight","speed","loop","shouldReset","COMPONENT_ID","Animator","builder","writeBuffer","deserialize","remainingBytes","createBasePBAudioSource","volume","audioClipUrl","PBAudioSource","AudioSource","createBasePBAvatarAttach","avatarId","anchorPointId","PBAvatarAttach","AvatarAttach","createBaseColor3","r","g","Color3","createBasePBAvatarShape","id","bodyShape","skinColor","hairColor","eyeColor","wearables","expressionTriggerId","expressionTriggerTimestamp","stickerTriggerId","stickerTriggerTimestamp","talking","PBAvatarShape","longToNumber","globalThis","long","gt","MAX_SAFE_INTEGER","AvatarShape","createBasePBBoxShape","withCollisions","isPointerBlocker","visible","uvs","PBBoxShape","end2","BoxShape","createBasePBCylinderShape","radiusTop","radiusBottom","PBCylinderShape","CylinderShape","createBasePBGLTFShape","PBGLTFShape","GLTFShape","createBasePBNFTShape","assetId","style","color","PBNFTShape","NFTShape","createBasePBOnPointerDown","button","hoverText","distance","showFeedback","PBOnPointerDown","OnPointerDown","createBaseVector3","createBasePBOnPointerDownResult","meshName","origin","direction","point","normal","timestamp","PBOnPointerDownResult","OnPointerDownResult","createBasePBOnPointerUp","PBOnPointerUp","OnPointerUp","createBasePBOnPointerUpResult","PBOnPointerUpResult","OnPointerUpResult","createBasePBPlaneShape","PBPlaneShape","PlaneShape","createBasePBSphereShape","PBSphereShape","SphereShape","createBasePBTextShape","text","font","opacity","fontSize","fontAutoSize","hTextAlign","vTextAlign","width","height","paddingTop","paddingRight","paddingBottom","paddingLeft","lineSpacing","lineCount","textWrapping","shadowBlur","shadowOffsetX","shadowOffsetY","outlineWidth","shadowColor","outlineColor","textColor","PBTextShape","TextShape","ComponentIds","defineProtocolBufferComponents","defineComponent","Animator.COMPONENT_ID","Animator.Animator","AudioSource.COMPONENT_ID","AudioSource.AudioSource","AvatarAttach.COMPONENT_ID","AvatarAttach.AvatarAttach","AvatarShape.COMPONENT_ID","AvatarShape.AvatarShape","BoxShape.COMPONENT_ID","BoxShape.BoxShape","CylinderShape.COMPONENT_ID","CylinderShape.CylinderShape","GLTFShape.COMPONENT_ID","GLTFShape.GLTFShape","NFTShape.COMPONENT_ID","NFTShape.NFTShape","OnPointerDown.COMPONENT_ID","OnPointerDown.OnPointerDown","OnPointerDownResult.COMPONENT_ID","OnPointerDownResult.OnPointerDownResult","OnPointerUp.COMPONENT_ID","OnPointerUp.OnPointerUp","OnPointerUpResult.COMPONENT_ID","OnPointerUpResult.OnPointerUpResult","PlaneShape.COMPONENT_ID","PlaneShape.PlaneShape","SphereShape.COMPONENT_ID","SphereShape.SphereShape","TextShape.COMPONENT_ID","TextShape.TextShape","TRANSFORM_LENGTH","Transform","ptr","incrementWriteOffset","setFloat32","position","rotation","setUint32","parent","incrementReadOffset","getFloat32","getUint32","LEGACY_COMPONENT_ID","defineLegacyComponents","ID","TRANSFORM","LegacyTransform","defineSdkComponents","engine","types","sameData","equals","crdtProtocol","state","updateState","key","remoteTimestamp","createEvent","processMessage","compareData","getState","distExports","requireDist","getNextSize","currentSize","intendedSize","minNewSize","defaultInitialCapacity","createByteBuffer","options","initialROffset","_a","reading","currentOffset","initialBuffer","initialWOffset","writing","initialCapacity","view","DataView","byteOffset","woffset","roffset","woAdd","newsize","roAdd","bufferLength","currentReadOffset","currentWriteOffset","readFloat32","readFloat64","getFloat64","readInt8","getInt8","readInt16","getInt16","readInt32","getInt32","readInt64","getBigInt64","readUint8","getUint8","readUint16","getUint16","readUint32","readUint64","getBigUint64","toBinary","writeUint32","setFloat64","setInt8","setInt16","setInt32","setBigInt64","setUint8","setUint16","setBigUint64","getInt64","getUint64","WireMessage","validate","rem","HEADER_LENGTH","Enum","readHeader","type","WireMessage$1","ComponentOperation","CrdtUtils","MESSAGE_HEADER_LENGTH","entity","componentDefinition","startMessageOffset","PUT_COMPONENT","writeToByteBuffer","messageLength","_id","setUint64","BigInt","header","common","componentId","DELETE_COMPONENT","readBuffer","SynchronizedEntityType","getKey","CrdtUtils$1","EntityUtils","crdtSceneSystem","transports","crdtClient","receivedMessages","transportMessages","getMessages","messagesToProcess","forEach","transport","onmessage","transportType","chunkMessage","Message","messageBuffer","createMessages","dirtyMap","crdtMessages","componentsId","component","getComponent","entityComponent","has","event","transportMessage","some","filter","transportBuffer","resetBuffer","send","receiveMessages","crdtMessage","deleteFrom","bb","upsertFromBinary","clearDirty","EntityContainer","staticEntity","Entity","STATIC_ENTITIES_RANGE","dynamicEntity","DYNAMIC_ENTITIES_RANGE","generateEntity","dynamic","removeEntity","isEntityExists","isReservedEntity","getExistingEntities","Set","range","entityCounter","usedEntities","delete","deepReadonly","spec","Map","dirtyIterator","isDirty","getOrNull","getFrom","usedValue","createOrReplace","mutable","iterator","serialize","newValue","clear","isInRange","MAX_ENTITIES","DYNAMIC_ENTITIES_START_AT","RESERVED_STATIC_ENTITIES","RESERVED_ENTITIES_RANGE","isDynamicEntity","isStaticEntity","SYSTEMS_REGULAR_PRIORITY","SystemContainer","systems","sort","priority","find","item","remove","selector","findIndex","getSystems","preEngine","entityContainer","componentsDefinition","entitiesComponent","addEntity","getComponentDefGroup","firstComponentDef","componentDefinitions","matches","componentDef","addDynamicEntity","addSystem","removeSystem","newComponent","defComponent","mutableGroupOf","components","groupComp","map","groupOf","Engine","crdtSystem","baseComponents","update","dt","system","removeSelectedComponents","excludeComponentIds","dirtySet","definition","includes","_componentId","MapType","ArrayType","newArray","Optional","writeInt8","Int64","writeInt64","Int32","writeInt32","Int16","writeInt16","Int8","Float32","writeFloat32","Float64","writeFloat64","FlatString","TextEncoder","TextDecoder","EcsString","EcsBoolean","componentIds","values","rendererComponentIds","concat","createRendererTransport","dcl","callRpc","catch","error","createNetworkTransport","_args","rendererTransport","async","pullRendererMessages","byteArray","loadModule","onUpdate","finally","distExports$1"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../node_modules/@dcl/ecs-math/dist/Vector3.js","../node_modules/@dcl/ecs-math/dist/Scalar.js","../node_modules/@dcl/ecs-math/dist/types.js","../node_modules/@dcl/ecs-math/dist/Quaternion.js","../node_modules/@dcl/ecs-math/dist/index.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/inquire/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/protobufjs/minimal.js","../src/components/generated/pb/Animator.gen.ts","../src/components/generated/Animator.gen.ts","../src/components/generated/pb/AudioSource.gen.ts","../src/components/generated/AudioSource.gen.ts","../src/components/generated/pb/AvatarAttach.gen.ts","../src/components/generated/AvatarAttach.gen.ts","../src/components/generated/pb/common/Color3.gen.ts","../src/components/generated/pb/AvatarShape.gen.ts","../src/components/generated/AvatarShape.gen.ts","../src/components/generated/pb/BoxShape.gen.ts","../src/components/generated/BoxShape.gen.ts","../src/components/generated/pb/common/Vector3.gen.ts","../src/components/generated/pb/CameraModeArea.gen.ts","../src/components/generated/CameraModeArea.gen.ts","../src/components/generated/pb/CylinderShape.gen.ts","../src/components/generated/CylinderShape.gen.ts","../src/components/generated/pb/GLTFShape.gen.ts","../src/components/generated/GLTFShape.gen.ts","../src/components/generated/pb/NFTShape.gen.ts","../src/components/generated/NFTShape.gen.ts","../src/components/generated/pb/OnPointerDown.gen.ts","../src/components/generated/OnPointerDown.gen.ts","../src/components/generated/pb/OnPointerDownResult.gen.ts","../src/components/generated/OnPointerDownResult.gen.ts","../src/components/generated/pb/OnPointerUp.gen.ts","../src/components/generated/OnPointerUp.gen.ts","../src/components/generated/pb/OnPointerUpResult.gen.ts","../src/components/generated/OnPointerUpResult.gen.ts","../src/components/generated/pb/PlaneShape.gen.ts","../src/components/generated/PlaneShape.gen.ts","../src/components/generated/pb/SphereShape.gen.ts","../src/components/generated/SphereShape.gen.ts","../src/components/generated/pb/TextShape.gen.ts","../src/components/generated/TextShape.gen.ts","../src/components/generated/index.gen.ts","../src/components/legacy/Transform.ts","../src/components/legacy/types.ts","../src/components/types.ts","../src/components/legacy/index.ts","../src/components/index.ts","../node_modules/@dcl/crdt/dist/types.js","../node_modules/@dcl/crdt/dist/index.js","../src/serialization/ByteBuffer/index.ts","../src/serialization/wireMessage.ts","../src/serialization/crdt/componentOperation.ts","../src/systems/crdt/utils.ts","../src/engine/entity-utils.ts","../src/systems/crdt/index.ts","../src/engine/entity.ts","../src/engine/utils.ts","../src/engine/component.ts","../src/engine/systems.ts","../src/engine/index.ts","../src/built-in-types/MapType.ts","../src/built-in-types/ArrayType.ts","../src/built-in-types/Optional.ts","../src/built-in-types/basic/Integer.ts","../src/built-in-types/basic/Float.ts","../src/built-in-types/basic/String.ts","../src/built-in-types/basic/Enum.ts","../src/built-in-types/basic/Boolean.ts","../src/systems/crdt/transports/rendererTransport.ts","../src/systems/crdt/transports/networkTransport.ts","../src/initialization.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vector3 = void 0;\n/**\n * @public\n */\nvar Vector3;\n(function (Vector3) {\n /**\n * Creates a new Vector3 object from the given x, y, z (floats) coordinates.\n * @param x - defines the first coordinates (on X axis)\n * @param y - defines the second coordinates (on Y axis)\n * @param z - defines the third coordinates (on Z axis)\n */\n function create(\n /**\n * Defines the first coordinates (on X axis)\n */\n x = 0, \n /**\n * Defines the second coordinates (on Y axis)\n */\n y = 0, \n /**\n * Defines the third coordinates (on Z axis)\n */\n z = 0) {\n return { x, y, z };\n }\n Vector3.create = create;\n /**\n * Returns a new Vector3 as the result of the addition of the two given vectors.\n * @param vector1 - the first vector\n * @param vector2 - the second vector\n * @returns the resulting vector\n */\n function add(vector1, vector2) {\n return {\n x: vector1.x + vector2.x,\n y: vector1.y + vector2.y,\n z: vector1.z + vector2.z\n };\n }\n Vector3.add = add;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtract(minuend, subtrahend) {\n return {\n x: minuend.x - subtrahend.x,\n y: minuend.y - subtrahend.y,\n z: minuend.z - subtrahend.z\n };\n }\n Vector3.subtract = subtract;\n /**\n * Returns a new Vector3 as the result of the substraction of the two given vectors.\n * @returns the resulting vector\n */\n function subtractToRef(minuend, subtrahend, result) {\n result.x = minuend.x - subtrahend.x;\n result.y = minuend.y - subtrahend.y;\n result.z = minuend.z - subtrahend.z;\n }\n Vector3.subtractToRef = subtractToRef;\n /**\n * Returns a new Vector3 with the other sign\n * @returns the resulting vector\n */\n function opposite(value) {\n return { x: -value.x, y: -value.y, z: -value.z };\n }\n Vector3.opposite = opposite;\n /**\n * Copy source into dest\n *\n */\n function copy(source, dest) {\n dest.x = source.x;\n dest.y = source.y;\n dest.z = source.z;\n }\n Vector3.copy = copy;\n /**\n * Returns a new Vector3 with the same value\n * @returns the resulting vector\n */\n function clone(source) {\n return Object.assign({}, source);\n }\n Vector3.clone = clone;\n // Properties\n /**\n * Gets the length of the Vector3\n * @returns the length of the Vecto3\n */\n function length(vector) {\n return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);\n }\n Vector3.length = length;\n /**\n * Gets the squared length of the Vector3\n * @returns squared length of the Vector3\n */\n function lengthSquared(vector) {\n return vector.x * vector.x + vector.y * vector.y + vector.z * vector.z;\n }\n Vector3.lengthSquared = lengthSquared;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scaleToRef(vector, scale, result) {\n result.x = vector.x * scale;\n result.y = vector.y * scale;\n result.z = vector.z * scale;\n }\n Vector3.scaleToRef = scaleToRef;\n /**\n * Returns a new Vector3 set with the current Vector3 coordinates multiplied by the float \"scale\"\n * @param scale - defines the multiplier factor\n * @returns a new Vector3\n */\n function scale(vector, scale) {\n return create(vector.x * scale, vector.y * scale, vector.z * scale);\n }\n Vector3.scale = scale;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLength(vector, len) {\n const result = create(0, 0, 0);\n normalizeFromLengthToRef(vector, len, result);\n return result;\n }\n Vector3.normalizeFromLength = normalizeFromLength;\n /**\n * Normalize the current Vector3 with the given input length.\n * Please note that this is an in place operation.\n * @param len - the length of the vector\n * @returns the current updated Vector3\n */\n function normalizeFromLengthToRef(vector, len, result) {\n if (len === 0 || len === 1.0) {\n copy(vector, result);\n return;\n }\n scaleToRef(vector, 1.0 / len, result);\n }\n Vector3.normalizeFromLengthToRef = normalizeFromLengthToRef;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalize(vector) {\n return normalizeFromLength(vector, length(vector));\n }\n Vector3.normalize = normalize;\n /**\n * Normalize the current Vector3.\n * Please note that this is an in place operation.\n * @returns the current updated Vector3\n */\n function normalizeToRef(vector, result) {\n normalizeFromLengthToRef(vector, length(vector), result);\n }\n Vector3.normalizeToRef = normalizeToRef;\n /**\n * Returns the dot product (float) between the vectors \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return left.x * right.x + left.y * right.y + left.z * right.z;\n }\n Vector3.dot = dot;\n /**\n * Rotates current Vector3 based on the given quaternion, but applies the rotation to target Vector3.\n * @param q - defines the Quaternion\n * @param result - defines the target Vector3\n * @returns the current Vector3\n */\n function rotate(vector, q) {\n const { x, y, z } = vector;\n const { x: qx, y: qy, z: qz, w: qw } = q;\n // calculate quat * vector\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n // calculate result * inverse quat\n return {\n x: ix * qw + iw * -qx + iy * -qz - iz * -qy,\n y: iy * qw + iw * -qy + iz * -qx - ix * -qz,\n z: iz * qw + iw * -qz + ix * -qy - iy * -qx\n };\n }\n Vector3.rotate = rotate;\n /**\n * Returns a new Vector3 located for \"amount\" (float) on the linear interpolation between the vectors \"start\" and \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @returns the new Vector3\n */\n function lerp(start, end, amount) {\n const result = create(0, 0, 0);\n lerpToRef(start, end, amount, result);\n return result;\n }\n Vector3.lerp = lerp;\n /**\n * Sets the given vector \"result\" with the result of the linear interpolation from the vector \"start\" for \"amount\" to the vector \"end\"\n * @param start - defines the start value\n * @param end - defines the end value\n * @param amount - max defines amount between both (between 0 and 1)\n * @param result - defines the Vector3 where to store the result\n */\n function lerpToRef(start, end, amount, result) {\n result.x = start.x + (end.x - start.x) * amount;\n result.y = start.y + (end.y - start.y) * amount;\n result.z = start.z + (end.z - start.z) * amount;\n }\n Vector3.lerpToRef = lerpToRef;\n /**\n * Returns a new Vector3 as the cross product of the vectors \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the cross product\n */\n function cross(left, right) {\n const result = Vector3.Zero();\n Vector3.crossToRef(left, right, result);\n return result;\n }\n Vector3.cross = cross;\n /**\n * Sets the given vector \"result\" with the cross product of \"left\" and \"right\"\n * The cross product is then orthogonal to both \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @param result - defines the Vector3 where to store the result\n */\n function crossToRef(left, right, result) {\n result.x = left.y * right.z - left.z * right.y;\n result.y = left.z * right.x - left.x * right.z;\n result.z = left.x * right.y - left.y * right.x;\n }\n Vector3.crossToRef = crossToRef;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 0.0)\n * @returns a new empty Vector3\n */\n function Zero() {\n return create(0.0, 0.0, 0.0);\n }\n Vector3.Zero = Zero;\n /**\n * Returns a new Vector3 set to (1.0, 1.0, 1.0)\n * @returns a new unit Vector3\n */\n function One() {\n return create(1.0, 1.0, 1.0);\n }\n Vector3.One = One;\n /**\n * Returns a new Vector3 set tolengthSquared (0.0, 1.0, 0.0)\n * @returns a new up Vector3\n */\n function Up() {\n return create(0.0, 1.0, 0.0);\n }\n Vector3.Up = Up;\n /**\n * Returns a new Vector3 set to (0.0, -1.0, 0.0)\n * @returns a new down Vector3\n */\n function Down() {\n return create(0.0, -1.0, 0.0);\n }\n Vector3.Down = Down;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, 1.0)\n * @returns a new forward Vector3\n */\n function Forward() {\n return create(0.0, 0.0, 1.0);\n }\n Vector3.Forward = Forward;\n /**\n * Returns a new Vector3 set to (0.0, 0.0, -1.0)\n * @returns a new forward Vector3\n */\n function Backward() {\n return create(0.0, 0.0, -1.0);\n }\n Vector3.Backward = Backward;\n /**\n * Returns a new Vector3 set to (1.0, 0.0, 0.0)\n * @returns a new right Vector3\n */\n function Right() {\n return create(1.0, 0.0, 0.0);\n }\n Vector3.Right = Right;\n /**\n * Returns a new Vector3 set to (-1.0, 0.0, 0.0)\n * @returns a new left Vector3\n */\n function Left() {\n return create(-1.0, 0.0, 0.0);\n }\n Vector3.Left = Left;\n})(Vector3 = exports.Vector3 || (exports.Vector3 = {}));\n//# sourceMappingURL=Vector3.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scalar = void 0;\n/**\n * Two pi constants convenient for computation.\n */\nconst TwoPi = Math.PI * 2;\n/**\n * Boolean : true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n * @param a - number\n * @param b - number\n * @param epsilon - (default = 1.401298E-45)\n * @returns true if the absolute difference between a and b is lower than epsilon (default = 1.401298E-45)\n */\nfunction withinEpsilon(a, b, epsilon = 1.401298e-45) {\n const num = a - b;\n return -epsilon <= num && num <= epsilon;\n}\n/**\n * Returns a string : the upper case translation of the number i to hexadecimal.\n * @param i - number\n * @returns the upper case translation of the number i to hexadecimal.\n */\nfunction toHex(i) {\n const str = i.toString(16);\n if (i <= 15) {\n return ('0' + str).toUpperCase();\n }\n return str.toUpperCase();\n}\n/**\n * Returns -1 if value is negative and +1 is value is positive.\n * @param _value - the value\n * @returns the value itself if it's equal to zero.\n */\nfunction sign(value) {\n const _value = +value; // convert to a number\n if (_value === 0 || isNaN(_value)) {\n return _value;\n }\n return _value > 0 ? 1 : -1;\n}\n/**\n * Returns the value itself if it's between min and max.\n * Returns min if the value is lower than min.\n * Returns max if the value is greater than max.\n * @param value - the value to clmap\n * @param min - the min value to clamp to (default: 0)\n * @param max - the max value to clamp to (default: 1)\n * @returns the clamped value\n */\nfunction clamp(value, min = 0, max = 1) {\n return Math.min(max, Math.max(min, value));\n}\n/**\n * the log2 of value.\n * @param value - the value to compute log2 of\n * @returns the log2 of value.\n */\nfunction log2(value) {\n return Math.log(value) * Math.LOG2E;\n}\n/**\n * Loops the value, so that it is never larger than length and never smaller than 0.\n *\n * This is similar to the modulo operator but it works with floating point numbers.\n * For example, using 3.0 for t and 2.5 for length, the result would be 0.5.\n * With t = 5 and length = 2.5, the result would be 0.0.\n * Note, however, that the behaviour is not defined for negative numbers as it is for the modulo operator\n * @param value - the value\n * @param length - the length\n * @returns the looped value\n */\nfunction repeat(value, length) {\n return value - Math.floor(value / length) * length;\n}\n/**\n * Normalize the value between 0.0 and 1.0 using min and max values\n * @param value - value to normalize\n * @param min - max to normalize between\n * @param max - min to normalize between\n * @returns the normalized value\n */\nfunction normalize(value, min, max) {\n return (value - min) / (max - min);\n}\n/**\n * Denormalize the value from 0.0 and 1.0 using min and max values\n * @param normalized - value to denormalize\n * @param min - max to denormalize between\n * @param max - min to denormalize between\n * @returns the denormalized value\n */\nfunction denormalize(normalized, min, max) {\n return normalized * (max - min) + min;\n}\n/**\n * Calculates the shortest difference between two given angles given in degrees.\n * @param current - current angle in degrees\n * @param target - target angle in degrees\n * @returns the delta\n */\nfunction deltaAngle(current, target) {\n let num = repeat(target - current, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return num;\n}\n/**\n * PingPongs the value t, so that it is never larger than length and never smaller than 0.\n * @param tx - value\n * @param length - length\n * @returns The returned value will move back and forth between 0 and length\n */\nfunction pingPong(tx, length) {\n const t = repeat(tx, length * 2.0);\n return length - Math.abs(t - length);\n}\n/**\n * Interpolates between min and max with smoothing at the limits.\n *\n * This function interpolates between min and max in a similar way to Lerp. However, the interpolation will gradually speed up\n * from the start and slow down toward the end. This is useful for creating natural-looking animation, fading and other transitions.\n * @param from - from\n * @param to - to\n * @param tx - value\n * @returns the smooth stepped value\n */\nfunction smoothStep(from, to, tx) {\n let t = clamp(tx);\n t = -2.0 * t * t * t + 3.0 * t * t;\n return to * t + from * (1.0 - t);\n}\n/**\n * Moves a value current towards target.\n *\n * This is essentially the same as Mathf.Lerp but instead the function will ensure that the speed never exceeds maxDelta.\n * Negative values of maxDelta pushes the value away from target.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting value\n */\nfunction moveTowards(current, target, maxDelta) {\n let result = 0;\n if (Math.abs(target - current) <= maxDelta) {\n result = target;\n }\n else {\n result = current + sign(target - current) * maxDelta;\n }\n return result;\n}\n/**\n * Same as MoveTowards but makes sure the values interpolate correctly when they wrap around 360 degrees.\n *\n * Variables current and target are assumed to be in degrees. For optimization reasons, negative values of maxDelta\n * are not supported and may cause oscillation. To push current away from a target angle, add 180 to that angle instead.\n * @param current - current value\n * @param target - target value\n * @param maxDelta - max distance to move\n * @returns resulting angle\n */\nfunction moveTowardsAngle(current, target, maxDelta) {\n const num = deltaAngle(current, target);\n let result = 0;\n if (-maxDelta < num && num < maxDelta) {\n result = target;\n }\n else {\n result = moveTowards(current, current + num, maxDelta);\n }\n return result;\n}\n/**\n * Creates a new scalar with values linearly interpolated of \"amount\" between the start scalar and the end scalar\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\nfunction lerp(start, end, amount) {\n return start + (end - start) * amount;\n}\n/**\n * Same as Lerp but makes sure the values interpolate correctly when they wrap around 360 degrees.\n * The parameter t is clamped to the range [0, 1]. Variables a and b are assumed to be in degrees.\n * @param start - start value\n * @param end - target value\n * @param amount - amount to lerp between\n * @returns the lerped value\n */\nfunction lerpAngle(start, end, amount) {\n let num = repeat(end - start, 360.0);\n if (num > 180.0) {\n num -= 360.0;\n }\n return start + num * clamp(amount);\n}\n/**\n * Calculates the linear parameter t that produces the interpolant value within the range [a, b].\n * @param a - start value\n * @param b - target value\n * @param value - value between a and b\n * @returns the inverseLerp value\n */\nfunction inverseLerp(a, b, value) {\n let result = 0;\n if (a !== b) {\n result = clamp((value - a) / (b - a));\n }\n else {\n result = 0.0;\n }\n return result;\n}\n/**\n * Returns a new scalar located for \"amount\" (float) on the Hermite spline defined by the scalars \"value1\", \"value3\", \"tangent1\", \"tangent2\".\n * {@link http://mathworld.wolfram.com/HermitePolynomial.html}\n * @param value1 - spline value\n * @param tangent1 - spline value\n * @param value2 - spline value\n * @param tangent2 - spline value\n * @param amount - input value\n * @returns hermite result\n */\nfunction hermite(value1, tangent1, value2, tangent2, amount) {\n const squared = amount * amount;\n const cubed = amount * squared;\n const part1 = 2.0 * cubed - 3.0 * squared + 1.0;\n const part2 = -2.0 * cubed + 3.0 * squared;\n const part3 = cubed - 2.0 * squared + amount;\n const part4 = cubed - squared;\n return value1 * part1 + value2 * part2 + tangent1 * part3 + tangent2 * part4;\n}\n/**\n * Returns a random float number between and min and max values\n * @param min - min value of random\n * @param max - max value of random\n * @returns random value\n */\nfunction randomRange(min, max) {\n if (min === max) {\n return min;\n }\n return Math.random() * (max - min) + min;\n}\n/**\n * This function returns percentage of a number in a given range.\n *\n * RangeToPercent(40,20,60) will return 0.5 (50%)\n * RangeToPercent(34,0,100) will return 0.34 (34%)\n * @param num - to convert to percentage\n * @param min - min range\n * @param max - max range\n * @returns the percentage\n */\nfunction rangeToPercent(num, min, max) {\n return (num - min) / (max - min);\n}\n/**\n * This function returns number that corresponds to the percentage in a given range.\n *\n * PercentToRange(0.34,0,100) will return 34.\n * @param percent - to convert to number\n * @param min - min range\n * @param max - max range\n * @returns the number\n */\nfunction percentToRange(percent, min, max) {\n return (max - min) * percent + min;\n}\n/**\n * Returns the angle converted to equivalent value between -Math.PI and Math.PI radians.\n * @param angle - The angle to normalize in radian.\n * @returns The converted angle.\n */\nfunction normalizeRadians(angle) {\n // More precise but slower version kept for reference.\n // tslint:disable:no-commented-out-code\n /*\n // angle = angle % Tools.TwoPi;\n // angle = (angle + Tools.TwoPi) % Tools.TwoPi;\n \n //if (angle > Math.PI) {\n //\tangle -= Tools.TwoPi;\n //}\n */\n return angle - TwoPi * Math.floor((angle + Math.PI) / TwoPi);\n}\n/**\n * Scalar computation library\n * @public\n */\nexports.Scalar = {\n withinEpsilon,\n toHex,\n sign,\n clamp,\n log2,\n repeat,\n normalize,\n denormalize,\n deltaAngle,\n pingPong,\n smoothStep,\n moveTowards,\n moveTowardsAngle,\n lerp,\n lerpAngle,\n inverseLerp,\n hermite,\n randomRange,\n rangeToPercent,\n percentToRange,\n normalizeRadians,\n TwoPi\n};\n//# sourceMappingURL=Scalar.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RAD2DEG = exports.DEG2RAD = exports.Epsilon = exports.ToLinearSpace = exports.ToGammaSpace = exports.Space = exports.Orientation = void 0;\n/**\n * Defines potential orientation for back face culling\n * @public\n */\nvar Orientation;\n(function (Orientation) {\n /**\n * Clockwise\n */\n Orientation[Orientation[\"CW\"] = 0] = \"CW\";\n /** Counter clockwise */\n Orientation[Orientation[\"CCW\"] = 1] = \"CCW\";\n})(Orientation = exports.Orientation || (exports.Orientation = {}));\n/**\n * Defines supported spaces\n * @public\n */\nvar Space;\n(function (Space) {\n /** Local (object) space */\n Space[Space[\"LOCAL\"] = 0] = \"LOCAL\";\n /** World space */\n Space[Space[\"WORLD\"] = 1] = \"WORLD\";\n /** Bone space */\n Space[Space[\"BONE\"] = 2] = \"BONE\";\n})(Space = exports.Space || (exports.Space = {}));\n/**\n * Constant used to convert a value to gamma space\n * @public\n */\nexports.ToGammaSpace = 1 / 2.2;\n/**\n * Constant used to convert a value to linear space\n * @public\n */\nexports.ToLinearSpace = 2.2;\n/**\n * Constant used to define the minimal number value in Babylon.js\n * @public\n */\nexports.Epsilon = 0.000001;\n/**\n * Constant used to convert from Euler degrees to radians\n * @public\n */\nexports.DEG2RAD = Math.PI / 180;\n/**\n * Constant used to convert from radians to Euler degrees\n * @public\n */\nexports.RAD2DEG = 360 / (Math.PI * 2);\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quaternion = void 0;\nconst Vector3_1 = require(\"./Vector3\");\nconst Scalar_1 = require(\"./Scalar\");\nconst types_1 = require(\"./types\");\n/**\n * @public\n */\nvar Quaternion;\n(function (Quaternion) {\n /**\n * Creates a new Quaternion from the given floats\n * @param x - defines the first component (0 by default)\n * @param y - defines the second component (0 by default)\n * @param z - defines the third component (0 by default)\n * @param w - defines the fourth component (1.0 by default)\n */\n function create(\n /** defines the first component (0 by default) */\n x = 0.0, \n /** defines the second component (0 by default) */\n y = 0.0, \n /** defines the third component (0 by default) */\n z = 0.0, \n /** defines the fourth component (1.0 by default) */\n w = 1.0) {\n return { x, y, z, w };\n }\n Quaternion.create = create;\n /**\n * Returns a new Quaternion as the result of the addition of the two given quaternions.\n * @param q1 - the first quaternion\n * @param q2 - the second quaternion\n * @returns the resulting quaternion\n */\n function add(q1, q2) {\n return { x: q1.x + q2.x, y: q1.y + q2.y, z: q1.z + q2.z, w: q1.w + q2.w };\n }\n Quaternion.add = add;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis\n * @param pitch - defines the rotation around X axis\n * @param roll - defines the rotation around Z axis\n * @param result - defines the target quaternion\n */\n function rotationYawPitchRoll(yaw, pitch, roll) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n return create(c2 * s1 * c3 + s2 * c1 * s3, s2 * c1 * c3 - c2 * s1 * s3, c2 * c1 * s3 - s2 * s1 * c3, c2 * c1 * c3 + s2 * s1 * s3);\n }\n Quaternion.rotationYawPitchRoll = rotationYawPitchRoll;\n /**\n * Returns a rotation that rotates z degrees around the z axis, x degrees around the x axis, and y degrees around the y axis.\n * @param x - the rotation on the x axis in euler degrees\n * @param y - the rotation on the y axis in euler degrees\n * @param z - the rotation on the z axis in euler degrees\n */\n function euler(x, y, z) {\n return rotationYawPitchRoll(y * types_1.DEG2RAD, x * types_1.DEG2RAD, z * types_1.DEG2RAD);\n }\n Quaternion.euler = euler;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function length(q) {\n return Math.sqrt(lengthSquared(q));\n }\n Quaternion.length = length;\n /**\n * Gets length of current quaternion\n * @returns the quaternion length (float)\n */\n function lengthSquared(q) {\n return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n }\n Quaternion.lengthSquared = lengthSquared;\n /**\n * Returns the dot product (float) between the quaternions \"left\" and \"right\"\n * @param left - defines the left operand\n * @param right - defines the right operand\n * @returns the dot product\n */\n function dot(left, right) {\n return (left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w);\n }\n Quaternion.dot = dot;\n /**\n * Returns the angle in degrees between two rotations a and b.\n * @param quat1 - defines the first quaternion\n * @param quat2 - defines the second quaternion\n */\n function angle(quat1, quat2) {\n const dotVal = dot(quat1, quat2);\n return Math.acos(Math.min(Math.abs(dotVal), 1)) * 2 * types_1.RAD2DEG;\n }\n Quaternion.angle = angle;\n /**\n * The from quaternion is rotated towards to by an angular step of maxDegreesDelta.\n * @param from - defines the first quaternion\n * @param to - defines the second quaternion\n * @param maxDegreesDelta - the interval step\n */\n function rotateTowards(from, to, maxDegreesDelta) {\n const num = angle(from, to);\n if (num === 0) {\n return to;\n }\n const t = Math.min(1, maxDegreesDelta / num);\n return slerp(from, to, t);\n }\n Quaternion.rotateTowards = rotateTowards;\n /**\n * Creates a rotation with the specified forward and upwards directions.\n * @param forward - the direction to look in\n * @param up - the vector that defines in which direction up is\n */\n function lookRotation(forward, up = { x: 0.0, y: 1.0, z: 0.0 }) {\n const forwardNew = Vector3_1.Vector3.normalize(forward);\n const right = Vector3_1.Vector3.normalize(Vector3_1.Vector3.cross(up, forwardNew));\n const upNew = Vector3_1.Vector3.cross(forwardNew, right);\n const m00 = right.x;\n const m01 = right.y;\n const m02 = right.z;\n const m10 = upNew.x;\n const m11 = upNew.y;\n const m12 = upNew.z;\n const m20 = forwardNew.x;\n const m21 = forwardNew.y;\n const m22 = forwardNew.z;\n const num8 = m00 + m11 + m22;\n const quaternion = create();\n if (num8 > 0) {\n let num = Math.sqrt(num8 + 1);\n quaternion.w = num * 0.5;\n num = 0.5 / num;\n quaternion.x = (m12 - m21) * num;\n quaternion.y = (m20 - m02) * num;\n quaternion.z = (m01 - m10) * num;\n return quaternion;\n }\n if (m00 >= m11 && m00 >= m22) {\n const num7 = Math.sqrt(1 + m00 - m11 - m22);\n const num4 = 0.5 / num7;\n quaternion.x = 0.5 * num7;\n quaternion.y = (m01 + m10) * num4;\n quaternion.z = (m02 + m20) * num4;\n quaternion.w = (m12 - m21) * num4;\n return quaternion;\n }\n if (m11 > m22) {\n const num6 = Math.sqrt(1 + m11 - m00 - m22);\n const num3 = 0.5 / num6;\n quaternion.x = (m10 + m01) * num3;\n quaternion.y = 0.5 * num6;\n quaternion.z = (m21 + m12) * num3;\n quaternion.w = (m20 - m02) * num3;\n return quaternion;\n }\n const num5 = Math.sqrt(1 + m22 - m00 - m11);\n const num2 = 0.5 / num5;\n quaternion.x = (m20 + m02) * num2;\n quaternion.y = (m21 + m12) * num2;\n quaternion.z = 0.5 * num5;\n quaternion.w = (m01 - m10) * num2;\n return quaternion;\n }\n Quaternion.lookRotation = lookRotation;\n /**\n * Normalize in place the current quaternion\n * @returns the current updated quaternion\n */\n function normalize(q) {\n const qLength = 1.0 / length(q);\n return create(q.x * qLength, q.y * qLength, q.z * qLength, q.w * qLength);\n }\n Quaternion.normalize = normalize;\n /**\n * Creates a rotation which rotates from fromDirection to toDirection.\n * @param from - defines the first direction Vector\n * @param to - defines the target direction Vector\n */\n function fromToRotation(from, to, up = Vector3_1.Vector3.Up()) {\n // Unity-based calculations implemented from https://forum.unity.com/threads/quaternion-lookrotation-around-an-axis.608470/#post-4069888\n const v0 = Vector3_1.Vector3.normalize(from);\n const v1 = Vector3_1.Vector3.normalize(to);\n const a = Vector3_1.Vector3.cross(v0, v1);\n const w = Math.sqrt(Vector3_1.Vector3.lengthSquared(v0) * Vector3_1.Vector3.lengthSquared(v1)) +\n Vector3_1.Vector3.dot(v0, v1);\n if (Vector3_1.Vector3.lengthSquared(a) < 0.0001) {\n // the vectors are parallel, check w to find direction\n // if w is 0 then values are opposite, and we sould rotate 180 degrees around the supplied axis\n // otherwise the vectors in the same direction and no rotation should occur\n return Math.abs(w) < 0.0001\n ? normalize(create(up.x, up.y, up.z, 0))\n : Identity();\n }\n else {\n return normalize(create(a.x, a.y, a.z, w));\n }\n }\n Quaternion.fromToRotation = fromToRotation;\n /**\n * Creates an identity quaternion\n * @returns - the identity quaternion\n */\n function Identity() {\n return create(0.0, 0.0, 0.0, 1.0);\n }\n Quaternion.Identity = Identity;\n /**\n * Gets or sets the euler angle representation of the rotation.\n * Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n */\n function eulerAngles(q) {\n const out = Vector3_1.Vector3.create();\n // if the input quaternion is normalized, this is exactly one. Otherwise, this acts as a correction factor for the quaternion's not-normalizedness\n const unit = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n // q will have a magnitude of 0.5 or greater if and only if q is a singularity case\n const test = q.x * q.w - q.y * q.z;\n if (test > 0.4995 * unit) {\n // singularity at north pole\n out.x = Math.PI / 2;\n out.y = 2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else if (test < -0.4995 * unit) {\n // singularity at south pole\n out.x = -Math.PI / 2;\n out.y = -2 * Math.atan2(q.y, q.x);\n out.z = 0;\n }\n else {\n // no singularity - q is the majority of cases\n out.x = Math.asin(2 * (q.w * q.x - q.y * q.z));\n out.y = Math.atan2(2 * q.w * q.y + 2 * q.z * q.x, 1 - 2 * (q.x * q.x + q.y * q.y));\n out.z = Math.atan2(2 * q.w * q.z + 2 * q.x * q.y, 1 - 2 * (q.z * q.z + q.x * q.x));\n }\n out.x *= types_1.RAD2DEG;\n out.y *= types_1.RAD2DEG;\n out.z *= types_1.RAD2DEG;\n // ensure the degree values are between 0 and 360\n out.x = Scalar_1.Scalar.repeat(out.x, 360);\n out.y = Scalar_1.Scalar.repeat(out.y, 360);\n out.z = Scalar_1.Scalar.repeat(out.z, 360);\n return out;\n }\n Quaternion.eulerAngles = eulerAngles;\n /**\n * Creates a new rotation from the given Euler float angles (y, x, z) and stores it in the target quaternion\n * @param yaw - defines the rotation around Y axis\n * @param pitch - defines the rotation around X axis\n * @param roll - defines the rotation around Z axis\n * @param result - defines the target quaternion\n */\n function rotationYawPitchRollToRef(yaw, pitch, roll, result) {\n // Implemented unity-based calculations from: https://stackoverflow.com/a/56055813\n const halfPitch = pitch * 0.5;\n const halfYaw = yaw * 0.5;\n const halfRoll = roll * 0.5;\n const c1 = Math.cos(halfPitch);\n const c2 = Math.cos(halfYaw);\n const c3 = Math.cos(halfRoll);\n const s1 = Math.sin(halfPitch);\n const s2 = Math.sin(halfYaw);\n const s3 = Math.sin(halfRoll);\n result.x = c2 * s1 * c3 + s2 * c1 * s3;\n result.y = s2 * c1 * c3 - c2 * s1 * s3;\n result.z = c2 * c1 * s3 - s2 * s1 * c3;\n result.w = c2 * c1 * c3 + s2 * s1 * s3;\n }\n Quaternion.rotationYawPitchRollToRef = rotationYawPitchRollToRef;\n /**\n * Updates the given quaternion with the given rotation matrix values\n * @param matrix - defines the source matrix\n * @param result - defines the target quaternion\n */\n function fromRotationMatrixToRef(matrix, result) {\n const data = matrix._m;\n // tslint:disable:one-variable-per-declaration\n const m11 = data[0], m12 = data[4], m13 = data[8];\n const m21 = data[1], m22 = data[5], m23 = data[9];\n const m31 = data[2], m32 = data[6], m33 = data[10];\n // tslint:enable:one-variable-per-declaration\n const trace = m11 + m22 + m33;\n let s;\n if (trace > 0) {\n s = 0.5 / Math.sqrt(trace + 1.0);\n result.w = 0.25 / s;\n result.x = (m32 - m23) * s;\n result.y = (m13 - m31) * s;\n result.z = (m21 - m12) * s;\n }\n else if (m11 > m22 && m11 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n result.w = (m32 - m23) / s;\n result.x = 0.25 * s;\n result.y = (m12 + m21) / s;\n result.z = (m13 + m31) / s;\n }\n else if (m22 > m33) {\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n result.w = (m13 - m31) / s;\n result.x = (m12 + m21) / s;\n result.y = 0.25 * s;\n result.z = (m23 + m32) / s;\n }\n else {\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n result.w = (m21 - m12) / s;\n result.x = (m13 + m31) / s;\n result.y = (m23 + m32) / s;\n result.z = 0.25 * s;\n }\n }\n Quaternion.fromRotationMatrixToRef = fromRotationMatrixToRef;\n /**\n * Interpolates between two quaternions\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @returns the new interpolated quaternion\n */\n function slerp(left, right, amount) {\n const result = Quaternion.Identity();\n Quaternion.slerpToRef(left, right, amount, result);\n return result;\n }\n Quaternion.slerp = slerp;\n /**\n * Interpolates between two quaternions and stores it into a target quaternion\n * @param left - defines first quaternion\n * @param right - defines second quaternion\n * @param amount - defines the gradient to use\n * @param result - defines the target quaternion\n */\n function slerpToRef(left, right, amount, result) {\n let num2;\n let num3;\n let num4 = left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w;\n let flag = false;\n if (num4 < 0) {\n flag = true;\n num4 = -num4;\n }\n if (num4 > 0.999999) {\n num3 = 1 - amount;\n num2 = flag ? -amount : amount;\n }\n else {\n const num5 = Math.acos(num4);\n const num6 = 1.0 / Math.sin(num5);\n num3 = Math.sin((1.0 - amount) * num5) * num6;\n num2 = flag\n ? -Math.sin(amount * num5) * num6\n : Math.sin(amount * num5) * num6;\n }\n result.x = num3 * left.x + num2 * right.x;\n result.y = num3 * left.y + num2 * right.y;\n result.z = num3 * left.z + num2 * right.z;\n result.w = num3 * left.w + num2 * right.w;\n }\n Quaternion.slerpToRef = slerpToRef;\n /**\n * Multiplies two quaternions\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @returns a new quaternion set as the multiplication result of the self one with the given one \"q1\"\n */\n function multiply(self, q1) {\n const result = create(0, 0, 0, 1.0);\n multiplyToRef(self, q1, result);\n return result;\n }\n Quaternion.multiply = multiply;\n /**\n * Sets the given \"result\" as the the multiplication result of the self one with the given one \"q1\"\n * @param self - defines the first operand\n * @param q1 - defines the second operand\n * @param result - defines the target quaternion\n * @returns the current quaternion\n */\n function multiplyToRef(self, q1, result) {\n result.x = self.x * q1.w + self.y * q1.z - self.z * q1.y + self.w * q1.x;\n result.y = -self.x * q1.z + self.y * q1.w + self.z * q1.x + self.w * q1.y;\n result.z = self.x * q1.y - self.y * q1.x + self.z * q1.w + self.w * q1.z;\n result.w = -self.x * q1.x - self.y * q1.y - self.z * q1.z + self.w * q1.w;\n }\n Quaternion.multiplyToRef = multiplyToRef;\n function angleAxis(degress, axis) {\n if (Vector3_1.Vector3.lengthSquared(axis) === 0) {\n return Quaternion.Identity();\n }\n const result = Identity();\n let radians = degress * types_1.DEG2RAD;\n radians *= 0.5;\n const a2 = Vector3_1.Vector3.normalize(axis);\n Vector3_1.Vector3.scaleToRef(a2, Math.sin(radians), a2);\n result.x = a2.x;\n result.y = a2.y;\n result.z = a2.z;\n result.w = Math.cos(radians);\n return normalize(result);\n }\n Quaternion.angleAxis = angleAxis;\n /**\n * Returns a zero filled quaternion\n */\n function Zero() {\n return create(0.0, 0.0, 0.0, 0.0);\n }\n Quaternion.Zero = Zero;\n})(Quaternion = exports.Quaternion || (exports.Quaternion = {}));\n//# sourceMappingURL=Quaternion.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./Quaternion\"), exports);\n__exportStar(require(\"./Vector3\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./index\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAnimator {\n states: PBAnimationState[]\n}\n\nexport interface PBAnimationState {\n name: string\n clip: string\n playing: boolean\n weight: number\n speed: number\n loop: boolean\n shouldReset: boolean\n}\n\nfunction createBasePBAnimator(): PBAnimator {\n return { states: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimator = {\n encode(message: PBAnimator, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.states) {\n PBAnimationState.encode(v!, writer.uint32(10).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimator {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimator()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.states.push(PBAnimationState.decode(reader, reader.uint32()))\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\nfunction createBasePBAnimationState(): PBAnimationState {\n return { name: '', clip: '', playing: false, weight: 0, speed: 0, loop: false, shouldReset: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBAnimationState = {\n encode(message: PBAnimationState, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.name !== '') {\n writer.uint32(10).string(message.name)\n }\n if (message.clip !== '') {\n writer.uint32(18).string(message.clip)\n }\n if (message.playing === true) {\n writer.uint32(24).bool(message.playing)\n }\n if (message.weight !== 0) {\n writer.uint32(37).float(message.weight)\n }\n if (message.speed !== 0) {\n writer.uint32(45).float(message.speed)\n }\n if (message.loop === true) {\n writer.uint32(48).bool(message.loop)\n }\n if (message.shouldReset === true) {\n writer.uint32(56).bool(message.shouldReset)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAnimationState {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAnimationState()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.name = reader.string()\n break\n case 2:\n message.clip = reader.string()\n break\n case 3:\n message.playing = reader.bool()\n break\n case 4:\n message.weight = reader.float()\n break\n case 5:\n message.speed = reader.float()\n break\n case 6:\n message.loop = reader.bool()\n break\n case 7:\n message.shouldReset = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAnimator } from './pb/Animator.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1042\n\n/**\n * @internal\n */\nexport const Animator: EcsType<PBAnimator> = {\n serialize(value: PBAnimator, builder: ByteBuffer): void {\n const writer = PBAnimator.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAnimator {\n return PBAnimator.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAnimator {\n // TODO: this is a hack.\n return PBAnimator.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAudioSource {\n playing: boolean\n volume: number\n loop: boolean\n pitch: number\n audioClipUrl: string\n}\n\nfunction createBasePBAudioSource(): PBAudioSource {\n return { playing: false, volume: 0, loop: false, pitch: 0, audioClipUrl: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBAudioSource = {\n encode(message: PBAudioSource, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.playing === true) {\n writer.uint32(8).bool(message.playing)\n }\n if (message.volume !== 0) {\n writer.uint32(21).float(message.volume)\n }\n if (message.loop === true) {\n writer.uint32(24).bool(message.loop)\n }\n if (message.pitch !== 0) {\n writer.uint32(37).float(message.pitch)\n }\n if (message.audioClipUrl !== '') {\n writer.uint32(42).string(message.audioClipUrl)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAudioSource {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAudioSource()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.playing = reader.bool()\n break\n case 2:\n message.volume = reader.float()\n break\n case 3:\n message.loop = reader.bool()\n break\n case 4:\n message.pitch = reader.float()\n break\n case 5:\n message.audioClipUrl = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAudioSource } from './pb/AudioSource.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1020\n\n/**\n * @internal\n */\nexport const AudioSource: EcsType<PBAudioSource> = {\n serialize(value: PBAudioSource, builder: ByteBuffer): void {\n const writer = PBAudioSource.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAudioSource {\n return PBAudioSource.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAudioSource {\n // TODO: this is a hack.\n return PBAudioSource.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAvatarAttach {\n avatarId: string\n anchorPointId: number\n}\n\nfunction createBasePBAvatarAttach(): PBAvatarAttach {\n return { avatarId: '', anchorPointId: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarAttach = {\n encode(message: PBAvatarAttach, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.avatarId !== '') {\n writer.uint32(10).string(message.avatarId)\n }\n if (message.anchorPointId !== 0) {\n writer.uint32(16).int32(message.anchorPointId)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarAttach {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarAttach()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.avatarId = reader.string()\n break\n case 2:\n message.anchorPointId = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarAttach } from './pb/AvatarAttach.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1073\n\n/**\n * @internal\n */\nexport const AvatarAttach: EcsType<PBAvatarAttach> = {\n serialize(value: PBAvatarAttach, builder: ByteBuffer): void {\n const writer = PBAvatarAttach.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarAttach {\n return PBAvatarAttach.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarAttach {\n // TODO: this is a hack.\n return PBAvatarAttach.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface Color3 {\n r: number\n g: number\n b: number\n}\n\nfunction createBaseColor3(): Color3 {\n return { r: 0, g: 0, b: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Color3 = {\n encode(message: Color3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.r !== 0) {\n writer.uint32(13).float(message.r)\n }\n if (message.g !== 0) {\n writer.uint32(21).float(message.g)\n }\n if (message.b !== 0) {\n writer.uint32(29).float(message.b)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Color3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseColor3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.r = reader.float()\n break\n case 2:\n message.g = reader.float()\n break\n case 3:\n message.b = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport Long from 'long'\nimport { Color3 } from './common/Color3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBAvatarShape {\n id: string\n name: string\n bodyShape: string\n skinColor: Color3 | undefined\n hairColor: Color3 | undefined\n eyeColor: Color3 | undefined\n wearables: string[]\n expressionTriggerId: string\n expressionTriggerTimestamp: number\n stickerTriggerId: string\n stickerTriggerTimestamp: number\n talking: boolean\n}\n\nfunction createBasePBAvatarShape(): PBAvatarShape {\n return {\n id: '',\n name: '',\n bodyShape: '',\n skinColor: undefined,\n hairColor: undefined,\n eyeColor: undefined,\n wearables: [],\n expressionTriggerId: '',\n expressionTriggerTimestamp: 0,\n stickerTriggerId: '',\n stickerTriggerTimestamp: 0,\n talking: false\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBAvatarShape = {\n encode(message: PBAvatarShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.id !== '') {\n writer.uint32(10).string(message.id)\n }\n if (message.name !== '') {\n writer.uint32(18).string(message.name)\n }\n if (message.bodyShape !== '') {\n writer.uint32(26).string(message.bodyShape)\n }\n if (message.skinColor !== undefined) {\n Color3.encode(message.skinColor, writer.uint32(34).fork()).ldelim()\n }\n if (message.hairColor !== undefined) {\n Color3.encode(message.hairColor, writer.uint32(42).fork()).ldelim()\n }\n if (message.eyeColor !== undefined) {\n Color3.encode(message.eyeColor, writer.uint32(50).fork()).ldelim()\n }\n for (const v of message.wearables) {\n writer.uint32(58).string(v!)\n }\n if (message.expressionTriggerId !== '') {\n writer.uint32(66).string(message.expressionTriggerId)\n }\n if (message.expressionTriggerTimestamp !== 0) {\n writer.uint32(72).int64(message.expressionTriggerTimestamp)\n }\n if (message.stickerTriggerId !== '') {\n writer.uint32(82).string(message.stickerTriggerId)\n }\n if (message.stickerTriggerTimestamp !== 0) {\n writer.uint32(88).int64(message.stickerTriggerTimestamp)\n }\n if (message.talking === true) {\n writer.uint32(96).bool(message.talking)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBAvatarShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.id = reader.string()\n break\n case 2:\n message.name = reader.string()\n break\n case 3:\n message.bodyShape = reader.string()\n break\n case 4:\n message.skinColor = Color3.decode(reader, reader.uint32())\n break\n case 5:\n message.hairColor = Color3.decode(reader, reader.uint32())\n break\n case 6:\n message.eyeColor = Color3.decode(reader, reader.uint32())\n break\n case 7:\n message.wearables.push(reader.string())\n break\n case 8:\n message.expressionTriggerId = reader.string()\n break\n case 9:\n message.expressionTriggerTimestamp = longToNumber(reader.int64() as Long)\n break\n case 10:\n message.stickerTriggerId = reader.string()\n break\n case 11:\n message.stickerTriggerTimestamp = longToNumber(reader.int64() as Long)\n break\n case 12:\n message.talking = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n\ndeclare var self: any | undefined\ndeclare var window: any | undefined\ndeclare var global: any | undefined\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis\n if (typeof self !== 'undefined') return self\n if (typeof window !== 'undefined') return window\n if (typeof global !== 'undefined') return global\n throw 'Unable to locate global object'\n})()\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER')\n }\n return long.toNumber()\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBAvatarShape } from './pb/AvatarShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1080\n\n/**\n * @internal\n */\nexport const AvatarShape: EcsType<PBAvatarShape> = {\n serialize(value: PBAvatarShape, builder: ByteBuffer): void {\n const writer = PBAvatarShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBAvatarShape {\n return PBAvatarShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBAvatarShape {\n // TODO: this is a hack.\n return PBAvatarShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBBoxShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n uvs: number[]\n}\n\nfunction createBasePBBoxShape(): PBBoxShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBBoxShape = {\n encode(message: PBBoxShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n writer.uint32(34).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBBoxShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBBoxShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBBoxShape } from './pb/BoxShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1013\n\n/**\n * @internal\n */\nexport const BoxShape: EcsType<PBBoxShape> = {\n serialize(value: PBBoxShape, builder: ByteBuffer): void {\n const writer = PBBoxShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBBoxShape {\n return PBBoxShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBBoxShape {\n // TODO: this is a hack.\n return PBBoxShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface Vector3 {\n x: number\n y: number\n z: number\n}\n\nfunction createBaseVector3(): Vector3 {\n return { x: 0, y: 0, z: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const Vector3 = {\n encode(message: Vector3, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.x !== 0) {\n writer.uint32(13).float(message.x)\n }\n if (message.y !== 0) {\n writer.uint32(21).float(message.y)\n }\n if (message.z !== 0) {\n writer.uint32(29).float(message.z)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Vector3 {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBaseVector3()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.x = reader.float()\n break\n case 2:\n message.y = reader.float()\n break\n case 3:\n message.z = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","/* eslint-disable */\nimport { Vector3 } from './common/Vector3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport const enum CameraMode {\n FIRST_PERSON = 0,\n THIRD_PERSON = 1,\n UNRECOGNIZED = -1\n}\n\nexport interface PBCameraModeArea {\n area: Vector3 | undefined\n mode: CameraMode\n}\n\nfunction createBasePBCameraModeArea(): PBCameraModeArea {\n return { area: undefined, mode: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBCameraModeArea = {\n encode(message: PBCameraModeArea, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.area !== undefined) {\n Vector3.encode(message.area, writer.uint32(10).fork()).ldelim()\n }\n if (message.mode !== 0) {\n writer.uint32(16).int32(message.mode)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBCameraModeArea {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBCameraModeArea()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.area = Vector3.decode(reader, reader.uint32())\n break\n case 2:\n message.mode = reader.int32() as any\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBCameraModeArea } from './pb/CameraModeArea.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1071\n\n/**\n * @internal\n */\nexport const CameraModeArea: EcsType<PBCameraModeArea> = {\n serialize(value: PBCameraModeArea, builder: ByteBuffer): void {\n const writer = PBCameraModeArea.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBCameraModeArea {\n return PBCameraModeArea.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBCameraModeArea {\n // TODO: this is a hack.\n return PBCameraModeArea.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBCylinderShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n radiusTop: number\n radiusBottom: number\n}\n\nfunction createBasePBCylinderShape(): PBCylinderShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, radiusTop: 0, radiusBottom: 0 }\n}\n\n\n/**\n * @internal\n */\nexport const PBCylinderShape = {\n encode(message: PBCylinderShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n if (message.radiusTop !== 0) {\n writer.uint32(37).float(message.radiusTop)\n }\n if (message.radiusBottom !== 0) {\n writer.uint32(45).float(message.radiusBottom)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBCylinderShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBCylinderShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n message.radiusTop = reader.float()\n break\n case 5:\n message.radiusBottom = reader.float()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBCylinderShape } from './pb/CylinderShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1016\n\n/**\n * @internal\n */\nexport const CylinderShape: EcsType<PBCylinderShape> = {\n serialize(value: PBCylinderShape, builder: ByteBuffer): void {\n const writer = PBCylinderShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBCylinderShape {\n return PBCylinderShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBCylinderShape {\n // TODO: this is a hack.\n return PBCylinderShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBGLTFShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n src: string\n}\n\nfunction createBasePBGLTFShape(): PBGLTFShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, src: '' }\n}\n\n\n/**\n * @internal\n */\nexport const PBGLTFShape = {\n encode(message: PBGLTFShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n if (message.src !== '') {\n writer.uint32(34).string(message.src)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBGLTFShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBGLTFShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n message.src = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBGLTFShape } from './pb/GLTFShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1041\n\n/**\n * @internal\n */\nexport const GLTFShape: EcsType<PBGLTFShape> = {\n serialize(value: PBGLTFShape, builder: ByteBuffer): void {\n const writer = PBGLTFShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBGLTFShape {\n return PBGLTFShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBGLTFShape {\n // TODO: this is a hack.\n return PBGLTFShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color3 } from './common/Color3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBNFTShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n src: string\n assetId: string\n style: number\n color: Color3 | undefined\n}\n\nfunction createBasePBNFTShape(): PBNFTShape {\n return {\n withCollisions: false,\n isPointerBlocker: false,\n visible: false,\n src: '',\n assetId: '',\n style: 0,\n color: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBNFTShape = {\n encode(message: PBNFTShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n if (message.src !== '') {\n writer.uint32(34).string(message.src)\n }\n if (message.assetId !== '') {\n writer.uint32(42).string(message.assetId)\n }\n if (message.style !== 0) {\n writer.uint32(48).int32(message.style)\n }\n if (message.color !== undefined) {\n Color3.encode(message.color, writer.uint32(58).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBNFTShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBNFTShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n message.src = reader.string()\n break\n case 5:\n message.assetId = reader.string()\n break\n case 6:\n message.style = reader.int32()\n break\n case 7:\n message.color = Color3.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBNFTShape } from './pb/NFTShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1040\n\n/**\n * @internal\n */\nexport const NFTShape: EcsType<PBNFTShape> = {\n serialize(value: PBNFTShape, builder: ByteBuffer): void {\n const writer = PBNFTShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBNFTShape {\n return PBNFTShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBNFTShape {\n // TODO: this is a hack.\n return PBNFTShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerDown {\n button: ActionButton\n hoverText: string\n distance: number\n showFeedback: boolean\n}\n\nfunction createBasePBOnPointerDown(): PBOnPointerDown {\n return { button: 0, hoverText: '', distance: 0, showFeedback: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerDown = {\n encode(message: PBOnPointerDown, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hoverText !== '') {\n writer.uint32(18).string(message.hoverText)\n }\n if (message.distance !== 0) {\n writer.uint32(29).float(message.distance)\n }\n if (message.showFeedback === true) {\n writer.uint32(32).bool(message.showFeedback)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerDown {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerDown()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hoverText = reader.string()\n break\n case 3:\n message.distance = reader.float()\n break\n case 4:\n message.showFeedback = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerDown } from './pb/OnPointerDown.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1060\n\n/**\n * @internal\n */\nexport const OnPointerDown: EcsType<PBOnPointerDown> = {\n serialize(value: PBOnPointerDown, builder: ByteBuffer): void {\n const writer = PBOnPointerDown.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerDown {\n return PBOnPointerDown.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerDown {\n // TODO: this is a hack.\n return PBOnPointerDown.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport { Vector3 } from './common/Vector3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerDownResult {\n button: ActionButton\n meshName: string\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n point: Vector3 | undefined\n normal: Vector3 | undefined\n distance: number\n timestamp: number\n}\n\nfunction createBasePBOnPointerDownResult(): PBOnPointerDownResult {\n return {\n button: 0,\n meshName: '',\n origin: undefined,\n direction: undefined,\n point: undefined,\n normal: undefined,\n distance: 0,\n timestamp: 0\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerDownResult = {\n encode(message: PBOnPointerDownResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(16).int32(message.button)\n }\n if (message.meshName !== '') {\n writer.uint32(26).string(message.meshName)\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(34).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(42).fork()).ldelim()\n }\n if (message.point !== undefined) {\n Vector3.encode(message.point, writer.uint32(50).fork()).ldelim()\n }\n if (message.normal !== undefined) {\n Vector3.encode(message.normal, writer.uint32(58).fork()).ldelim()\n }\n if (message.distance !== 0) {\n writer.uint32(69).float(message.distance)\n }\n if (message.timestamp !== 0) {\n writer.uint32(72).int32(message.timestamp)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerDownResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerDownResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 2:\n message.button = reader.int32() as any\n break\n case 3:\n message.meshName = reader.string()\n break\n case 4:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 5:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 6:\n message.point = Vector3.decode(reader, reader.uint32())\n break\n case 7:\n message.normal = Vector3.decode(reader, reader.uint32())\n break\n case 8:\n message.distance = reader.float()\n break\n case 9:\n message.timestamp = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerDownResult } from './pb/OnPointerDownResult.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1066\n\n/**\n * @internal\n */\nexport const OnPointerDownResult: EcsType<PBOnPointerDownResult> = {\n serialize(value: PBOnPointerDownResult, builder: ByteBuffer): void {\n const writer = PBOnPointerDownResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerDownResult {\n return PBOnPointerDownResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerDownResult {\n // TODO: this is a hack.\n return PBOnPointerDownResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerUp {\n button: ActionButton\n hoverText: string\n distance: number\n showFeedback: boolean\n}\n\nfunction createBasePBOnPointerUp(): PBOnPointerUp {\n return { button: 0, hoverText: '', distance: 0, showFeedback: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerUp = {\n encode(message: PBOnPointerUp, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(8).int32(message.button)\n }\n if (message.hoverText !== '') {\n writer.uint32(18).string(message.hoverText)\n }\n if (message.distance !== 0) {\n writer.uint32(29).float(message.distance)\n }\n if (message.showFeedback === true) {\n writer.uint32(32).bool(message.showFeedback)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerUp {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerUp()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.button = reader.int32() as any\n break\n case 2:\n message.hoverText = reader.string()\n break\n case 3:\n message.distance = reader.float()\n break\n case 4:\n message.showFeedback = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerUp } from './pb/OnPointerUp.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1061\n\n/**\n * @internal\n */\nexport const OnPointerUp: EcsType<PBOnPointerUp> = {\n serialize(value: PBOnPointerUp, builder: ByteBuffer): void {\n const writer = PBOnPointerUp.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerUp {\n return PBOnPointerUp.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerUp {\n // TODO: this is a hack.\n return PBOnPointerUp.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { ActionButton } from './common/ActionButton.gen'\nimport { Vector3 } from './common/Vector3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBOnPointerUpResult {\n button: ActionButton\n meshName: string\n origin: Vector3 | undefined\n direction: Vector3 | undefined\n point: Vector3 | undefined\n normal: Vector3 | undefined\n distance: number\n timestamp: number\n}\n\nfunction createBasePBOnPointerUpResult(): PBOnPointerUpResult {\n return {\n button: 0,\n meshName: '',\n origin: undefined,\n direction: undefined,\n point: undefined,\n normal: undefined,\n distance: 0,\n timestamp: 0\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBOnPointerUpResult = {\n encode(message: PBOnPointerUpResult, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.button !== 0) {\n writer.uint32(16).int32(message.button)\n }\n if (message.meshName !== '') {\n writer.uint32(26).string(message.meshName)\n }\n if (message.origin !== undefined) {\n Vector3.encode(message.origin, writer.uint32(34).fork()).ldelim()\n }\n if (message.direction !== undefined) {\n Vector3.encode(message.direction, writer.uint32(42).fork()).ldelim()\n }\n if (message.point !== undefined) {\n Vector3.encode(message.point, writer.uint32(50).fork()).ldelim()\n }\n if (message.normal !== undefined) {\n Vector3.encode(message.normal, writer.uint32(58).fork()).ldelim()\n }\n if (message.distance !== 0) {\n writer.uint32(69).float(message.distance)\n }\n if (message.timestamp !== 0) {\n writer.uint32(72).int32(message.timestamp)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBOnPointerUpResult {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBOnPointerUpResult()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 2:\n message.button = reader.int32() as any\n break\n case 3:\n message.meshName = reader.string()\n break\n case 4:\n message.origin = Vector3.decode(reader, reader.uint32())\n break\n case 5:\n message.direction = Vector3.decode(reader, reader.uint32())\n break\n case 6:\n message.point = Vector3.decode(reader, reader.uint32())\n break\n case 7:\n message.normal = Vector3.decode(reader, reader.uint32())\n break\n case 8:\n message.distance = reader.float()\n break\n case 9:\n message.timestamp = reader.int32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBOnPointerUpResult } from './pb/OnPointerUpResult.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1065\n\n/**\n * @internal\n */\nexport const OnPointerUpResult: EcsType<PBOnPointerUpResult> = {\n serialize(value: PBOnPointerUpResult, builder: ByteBuffer): void {\n const writer = PBOnPointerUpResult.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBOnPointerUpResult {\n return PBOnPointerUpResult.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBOnPointerUpResult {\n // TODO: this is a hack.\n return PBOnPointerUpResult.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBPlaneShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n uvs: number[]\n}\n\nfunction createBasePBPlaneShape(): PBPlaneShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false, uvs: [] }\n}\n\n\n/**\n * @internal\n */\nexport const PBPlaneShape = {\n encode(message: PBPlaneShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n writer.uint32(34).fork()\n for (const v of message.uvs) {\n writer.float(v)\n }\n writer.ldelim()\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBPlaneShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBPlaneShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n case 4:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos\n while (reader.pos < end2) {\n message.uvs.push(reader.float())\n }\n } else {\n message.uvs.push(reader.float())\n }\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBPlaneShape } from './pb/PlaneShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1014\n\n/**\n * @internal\n */\nexport const PlaneShape: EcsType<PBPlaneShape> = {\n serialize(value: PBPlaneShape, builder: ByteBuffer): void {\n const writer = PBPlaneShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBPlaneShape {\n return PBPlaneShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBPlaneShape {\n // TODO: this is a hack.\n return PBPlaneShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBSphereShape {\n withCollisions: boolean\n isPointerBlocker: boolean\n visible: boolean\n}\n\nfunction createBasePBSphereShape(): PBSphereShape {\n return { withCollisions: false, isPointerBlocker: false, visible: false }\n}\n\n\n/**\n * @internal\n */\nexport const PBSphereShape = {\n encode(message: PBSphereShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.withCollisions === true) {\n writer.uint32(8).bool(message.withCollisions)\n }\n if (message.isPointerBlocker === true) {\n writer.uint32(16).bool(message.isPointerBlocker)\n }\n if (message.visible === true) {\n writer.uint32(24).bool(message.visible)\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBSphereShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBSphereShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.withCollisions = reader.bool()\n break\n case 2:\n message.isPointerBlocker = reader.bool()\n break\n case 3:\n message.visible = reader.bool()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBSphereShape } from './pb/SphereShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1015\n\n/**\n * @internal\n */\nexport const SphereShape: EcsType<PBSphereShape> = {\n serialize(value: PBSphereShape, builder: ByteBuffer): void {\n const writer = PBSphereShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBSphereShape {\n return PBSphereShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBSphereShape {\n // TODO: this is a hack.\n return PBSphereShape.decode(new Uint8Array())\n }\n}\n","/* eslint-disable */\nimport { Color3 } from './common/Color3.gen'\nimport * as _m0 from 'protobufjs/minimal'\n\n\n/**\n * @internal\n */\nexport const protobufPackage = ''\n\nexport interface PBTextShape {\n text: string\n visible: boolean\n font: string\n opacity: number\n fontSize: number\n fontAutoSize: boolean\n hTextAlign: string\n vTextAlign: string\n width: number\n height: number\n paddingTop: number\n paddingRight: number\n paddingBottom: number\n paddingLeft: number\n lineSpacing: number\n lineCount: number\n textWrapping: boolean\n shadowBlur: number\n shadowOffsetX: number\n shadowOffsetY: number\n outlineWidth: number\n shadowColor: Color3 | undefined\n outlineColor: Color3 | undefined\n textColor: Color3 | undefined\n}\n\nfunction createBasePBTextShape(): PBTextShape {\n return {\n text: '',\n visible: false,\n font: '',\n opacity: 0,\n fontSize: 0,\n fontAutoSize: false,\n hTextAlign: '',\n vTextAlign: '',\n width: 0,\n height: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n lineSpacing: 0,\n lineCount: 0,\n textWrapping: false,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n outlineWidth: 0,\n shadowColor: undefined,\n outlineColor: undefined,\n textColor: undefined\n }\n}\n\n\n/**\n * @internal\n */\nexport const PBTextShape = {\n encode(message: PBTextShape, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.text !== '') {\n writer.uint32(10).string(message.text)\n }\n if (message.visible === true) {\n writer.uint32(16).bool(message.visible)\n }\n if (message.font !== '') {\n writer.uint32(26).string(message.font)\n }\n if (message.opacity !== 0) {\n writer.uint32(37).float(message.opacity)\n }\n if (message.fontSize !== 0) {\n writer.uint32(45).float(message.fontSize)\n }\n if (message.fontAutoSize === true) {\n writer.uint32(48).bool(message.fontAutoSize)\n }\n if (message.hTextAlign !== '') {\n writer.uint32(58).string(message.hTextAlign)\n }\n if (message.vTextAlign !== '') {\n writer.uint32(66).string(message.vTextAlign)\n }\n if (message.width !== 0) {\n writer.uint32(77).float(message.width)\n }\n if (message.height !== 0) {\n writer.uint32(85).float(message.height)\n }\n if (message.paddingTop !== 0) {\n writer.uint32(93).float(message.paddingTop)\n }\n if (message.paddingRight !== 0) {\n writer.uint32(101).float(message.paddingRight)\n }\n if (message.paddingBottom !== 0) {\n writer.uint32(109).float(message.paddingBottom)\n }\n if (message.paddingLeft !== 0) {\n writer.uint32(117).float(message.paddingLeft)\n }\n if (message.lineSpacing !== 0) {\n writer.uint32(125).float(message.lineSpacing)\n }\n if (message.lineCount !== 0) {\n writer.uint32(128).int32(message.lineCount)\n }\n if (message.textWrapping === true) {\n writer.uint32(136).bool(message.textWrapping)\n }\n if (message.shadowBlur !== 0) {\n writer.uint32(149).float(message.shadowBlur)\n }\n if (message.shadowOffsetX !== 0) {\n writer.uint32(157).float(message.shadowOffsetX)\n }\n if (message.shadowOffsetY !== 0) {\n writer.uint32(165).float(message.shadowOffsetY)\n }\n if (message.outlineWidth !== 0) {\n writer.uint32(173).float(message.outlineWidth)\n }\n if (message.shadowColor !== undefined) {\n Color3.encode(message.shadowColor, writer.uint32(178).fork()).ldelim()\n }\n if (message.outlineColor !== undefined) {\n Color3.encode(message.outlineColor, writer.uint32(186).fork()).ldelim()\n }\n if (message.textColor !== undefined) {\n Color3.encode(message.textColor, writer.uint32(194).fork()).ldelim()\n }\n return writer\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PBTextShape {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input)\n let end = length === undefined ? reader.len : reader.pos + length\n const message = createBasePBTextShape()\n while (reader.pos < end) {\n const tag = reader.uint32()\n switch (tag >>> 3) {\n case 1:\n message.text = reader.string()\n break\n case 2:\n message.visible = reader.bool()\n break\n case 3:\n message.font = reader.string()\n break\n case 4:\n message.opacity = reader.float()\n break\n case 5:\n message.fontSize = reader.float()\n break\n case 6:\n message.fontAutoSize = reader.bool()\n break\n case 7:\n message.hTextAlign = reader.string()\n break\n case 8:\n message.vTextAlign = reader.string()\n break\n case 9:\n message.width = reader.float()\n break\n case 10:\n message.height = reader.float()\n break\n case 11:\n message.paddingTop = reader.float()\n break\n case 12:\n message.paddingRight = reader.float()\n break\n case 13:\n message.paddingBottom = reader.float()\n break\n case 14:\n message.paddingLeft = reader.float()\n break\n case 15:\n message.lineSpacing = reader.float()\n break\n case 16:\n message.lineCount = reader.int32()\n break\n case 17:\n message.textWrapping = reader.bool()\n break\n case 18:\n message.shadowBlur = reader.float()\n break\n case 19:\n message.shadowOffsetX = reader.float()\n break\n case 20:\n message.shadowOffsetY = reader.float()\n break\n case 21:\n message.outlineWidth = reader.float()\n break\n case 22:\n message.shadowColor = Color3.decode(reader, reader.uint32())\n break\n case 23:\n message.outlineColor = Color3.decode(reader, reader.uint32())\n break\n case 24:\n message.textColor = Color3.decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n return message\n }\n}\n","import { EcsType } from '../../built-in-types/EcsType'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { PBTextShape } from './pb/TextShape.gen'\n\n/**\n * @internal\n */\nexport const COMPONENT_ID = 1030\n\n/**\n * @internal\n */\nexport const TextShape: EcsType<PBTextShape> = {\n serialize(value: PBTextShape, builder: ByteBuffer): void {\n const writer = PBTextShape.encode(value)\n const buffer = new Uint8Array(writer.finish(), 0, writer.len)\n builder.writeBuffer(buffer, false)\n },\n deserialize(reader: ByteBuffer): PBTextShape {\n return PBTextShape.decode(reader.buffer(), reader.remainingBytes())\n },\n create(): PBTextShape {\n // TODO: this is a hack.\n return PBTextShape.decode(new Uint8Array())\n }\n}\n","import * as Animator from './Animator.gen'\nimport * as AudioSource from './AudioSource.gen'\nimport * as AvatarAttach from './AvatarAttach.gen'\nimport * as AvatarShape from './AvatarShape.gen'\nimport * as BoxShape from './BoxShape.gen'\nimport * as CameraModeArea from './CameraModeArea.gen'\nimport * as CylinderShape from './CylinderShape.gen'\nimport * as GLTFShape from './GLTFShape.gen'\nimport * as NFTShape from './NFTShape.gen'\nimport * as OnPointerDown from './OnPointerDown.gen'\nimport * as OnPointerDownResult from './OnPointerDownResult.gen'\nimport * as OnPointerUp from './OnPointerUp.gen'\nimport * as OnPointerUpResult from './OnPointerUpResult.gen'\nimport * as PlaneShape from './PlaneShape.gen'\nimport * as SphereShape from './SphereShape.gen'\nimport * as TextShape from './TextShape.gen'\nimport type { IEngine } from '../../engine/types'\n\nexport enum ComponentIds {\n Animator = 1042,\nAudioSource = 1020,\nAvatarAttach = 1073,\nAvatarShape = 1080,\nBoxShape = 1013,\nCameraModeArea = 1071,\nCylinderShape = 1016,\nGLTFShape = 1041,\nNFTShape = 1040,\nOnPointerDown = 1060,\nOnPointerDownResult = 1066,\nOnPointerUp = 1061,\nOnPointerUpResult = 1065,\nPlaneShape = 1014,\nSphereShape = 1015,\nTextShape = 1030,\n}\n\nexport function defineProtocolBufferComponents({\n defineComponent\n}: Pick<IEngine, 'defineComponent'>) {\n\n return {\nAnimator: defineComponent(Animator.COMPONENT_ID, Animator.Animator),\nAudioSource: defineComponent(AudioSource.COMPONENT_ID, AudioSource.AudioSource),\nAvatarAttach: defineComponent(AvatarAttach.COMPONENT_ID, AvatarAttach.AvatarAttach),\nAvatarShape: defineComponent(AvatarShape.COMPONENT_ID, AvatarShape.AvatarShape),\nBoxShape: defineComponent(BoxShape.COMPONENT_ID, BoxShape.BoxShape),\nCameraModeArea: defineComponent(CameraModeArea.COMPONENT_ID, CameraModeArea.CameraModeArea),\nCylinderShape: defineComponent(CylinderShape.COMPONENT_ID, CylinderShape.CylinderShape),\nGLTFShape: defineComponent(GLTFShape.COMPONENT_ID, GLTFShape.GLTFShape),\nNFTShape: defineComponent(NFTShape.COMPONENT_ID, NFTShape.NFTShape),\nOnPointerDown: defineComponent(OnPointerDown.COMPONENT_ID, OnPointerDown.OnPointerDown),\nOnPointerDownResult: defineComponent(OnPointerDownResult.COMPONENT_ID, OnPointerDownResult.OnPointerDownResult),\nOnPointerUp: defineComponent(OnPointerUp.COMPONENT_ID, OnPointerUp.OnPointerUp),\nOnPointerUpResult: defineComponent(OnPointerUpResult.COMPONENT_ID, OnPointerUpResult.OnPointerUpResult),\nPlaneShape: defineComponent(PlaneShape.COMPONENT_ID, PlaneShape.PlaneShape),\nSphereShape: defineComponent(SphereShape.COMPONENT_ID, SphereShape.SphereShape),\nTextShape: defineComponent(TextShape.COMPONENT_ID, TextShape.TextShape)\n }\n}\n","import { Quaternion, Vector3 } from '../../Math'\nimport type { EcsType } from '../../built-in-types/EcsType'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../../serialization/ByteBuffer'\n\n/**\n * @public\n */\nexport type Transform = {\n position: Vector3.MutableVector3\n rotation: Quaternion.MutableQuaternion\n scale: Vector3.MutableVector3\n parent?: Entity\n}\n\nexport const TRANSFORM_LENGTH = 44\n\n// This transform can be optimized with Float32Array for example\nexport const Transform: EcsType<Transform> = {\n serialize(value: Transform, builder: ByteBuffer): void {\n const ptr = builder.incrementWriteOffset(TRANSFORM_LENGTH)\n builder.setFloat32(ptr, value.position.x)\n builder.setFloat32(ptr + 4, value.position.y)\n builder.setFloat32(ptr + 8, value.position.z)\n builder.setFloat32(ptr + 12, value.rotation.x)\n builder.setFloat32(ptr + 16, value.rotation.y)\n builder.setFloat32(ptr + 20, value.rotation.z)\n builder.setFloat32(ptr + 24, value.rotation.w)\n builder.setFloat32(ptr + 28, value.scale.x)\n builder.setFloat32(ptr + 32, value.scale.y)\n builder.setFloat32(ptr + 36, value.scale.z)\n builder.setUint32(ptr + 40, value.parent || 0)\n },\n deserialize(reader: ByteBuffer): Transform {\n const ptr = reader.incrementReadOffset(TRANSFORM_LENGTH)\n return {\n position: Vector3.create(\n reader.getFloat32(ptr),\n reader.getFloat32(ptr + 4),\n reader.getFloat32(ptr + 8)\n ),\n rotation: Quaternion.create(\n reader.getFloat32(ptr + 12),\n reader.getFloat32(ptr + 16),\n reader.getFloat32(ptr + 20),\n reader.getFloat32(ptr + 24)\n ),\n scale: Vector3.create(\n reader.getFloat32(ptr + 28),\n reader.getFloat32(ptr + 32),\n reader.getFloat32(ptr + 36)\n ),\n parent: reader.getUint32(ptr + 40) as Entity\n }\n },\n create() {\n return {\n position: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n rotation: { x: 0, y: 0, z: 0, w: 1 },\n parent: undefined\n }\n }\n}\n","/**\n * @public\n */\nexport enum LEGACY_COMPONENT_ID {\n TRANSFORM = 1,\n UUID_CALLBACK = 8,\n BOX_SHAPE = 16,\n SPHERE_SHAPE = 17,\n PLANE_SHAPE = 18,\n CONE_SHAPE = 19,\n CYLINDER_SHAPE = 20,\n TEXT_SHAPE = 21,\n\n NFT_SHAPE = 22,\n UI_WORLD_SPACE_SHAPE = 23,\n UI_SCREEN_SPACE_SHAPE = 24,\n UI_CONTAINER_RECT = 25,\n UI_CONTAINER_STACK = 26,\n UI_TEXT_SHAPE = 27,\n UI_INPUT_TEXT_SHAPE = 28,\n UI_IMAGE_SHAPE = 29,\n UI_SLIDER_SHAPE = 30,\n CIRCLE_SHAPE = 31,\n BILLBOARD = 32,\n\n ANIMATION = 33,\n FONT = 34,\n\n UI_FULLSCREEN_SHAPE = 40, // internal fullscreen scenes\n UI_BUTTON_SHAPE = 41,\n\n GLTF_SHAPE = 54,\n OBJ_SHAPE = 55,\n AVATAR_SHAPE = 56,\n\n BASIC_MATERIAL = 64,\n PBR_MATERIAL = 65,\n\n HIGHLIGHT_ENTITY = 66,\n\n /** @deprecated Sound has been deprecataed */\n SOUND = 67,\n TEXTURE = 68,\n\n VIDEO_CLIP = 70,\n VIDEO_TEXTURE = 71,\n\n AVATAR_TEXTURE = 72,\n\n AUDIO_CLIP = 200,\n AUDIO_SOURCE = 201,\n AUDIO_STREAM = 202,\n GIZMOS = 203,\n SMART_ITEM = 204,\n AVATAR_MODIFIER_AREA = 205,\n AVATAR_ATTACH = 206,\n CAMERA_MODE_AREA = 207,\n\n // For state sync only\n NAME = 300,\n LOCKED_ON_EDIT = 301,\n VISIBLE_ON_EDIT = 302\n}\n","export enum COMPONENT_ID {\n SYNC = 1000\n}\n","import type { IEngine } from '../../engine/types'\nimport { defineProtocolBufferComponents } from '../generated/index.gen'\nimport { Transform as LegacyTransform } from './Transform'\nimport { LEGACY_COMPONENT_ID as ID } from './types'\n\nexport function defineLegacyComponents({\n defineComponent\n}: Pick<IEngine, 'defineComponent'>) {\n return {\n Transform: defineComponent(ID.TRANSFORM, LegacyTransform),\n ...defineProtocolBufferComponents({ defineComponent })\n }\n}\n","import { defineLegacyComponents } from './legacy'\nimport type { IEngine } from '../engine/types'\n\nexport * from './types'\n\nexport function defineSdkComponents(engine: Pick<IEngine, 'defineComponent'>) {\n return {\n ...defineLegacyComponents(engine)\n }\n}\n\n/**\n * @public\n */\nexport type SdkComponents = ReturnType<typeof defineSdkComponents>\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crdtProtocol = exports.sameData = void 0;\n__exportStar(require(\"./types\"), exports);\n/**\n * Compare raw data.\n * @internal\n */\nfunction sameData(a, b) {\n // At reference level\n if (a === b)\n return true;\n if (a instanceof Uint8Array && b instanceof Uint8Array) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n if (globalThis.Buffer) {\n if (a instanceof Buffer && b instanceof Buffer) {\n // Deep level\n return a.equals(b);\n }\n }\n return false;\n}\nexports.sameData = sameData;\n/**\n * @public\n * CRDT protocol.\n * Stores the latest state, and decides whenever we have\n * to process and store the new data in case its an update, or\n * to discard and send our local value cause remote it's outdated.\n */\nfunction crdtProtocol() {\n /**\n * Local state where we store the latest lamport timestamp\n * and the raw data value\n * @internal\n */\n const state = {};\n /**\n * We should call this fn in order to update the state\n * @internal\n */\n function updateState(key, data, remoteTimestamp) {\n const timestamp = Math.max(remoteTimestamp, state[key]?.timestamp || 0);\n return (state[key] = { timestamp, data });\n }\n /**\n * Create an event for the specified key and store the new data and\n * lamport timestmap incremented by one in the state.\n * @public\n */\n function createEvent(key, data) {\n // Increment the timestamp\n const timestamp = (state[key]?.timestamp || 0) + 1;\n updateState(key, data, timestamp);\n return { key, data, timestamp };\n }\n /**\n * Process the received message only if the lamport number recieved is higher\n * than the stored one. If its lower, we spread it to the network to correct the peer.\n * If they are equal, the bigger raw data wins.\n \n * Returns the recieved data if the lamport number was bigger than ours.\n * If it was an outdated message, then we return void\n * @public\n */\n function processMessage(message) {\n const { key, data, timestamp } = message;\n const current = state[key];\n // The received message is > than our current value, update our state.\n if (!current || current.timestamp < timestamp) {\n updateState(key, data, timestamp);\n return message;\n }\n // Outdated Message. Resend our state message through the wire.\n if (current.timestamp > timestamp) {\n return {\n key,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n // Same data, same timestamp. Weirdo echo message.\n if (sameData(current.data, data)) {\n return message;\n }\n // Race condition, same timestamp diff data.\n function compareData(current, data) {\n return current > data;\n }\n if (compareData(current.data, data)) {\n return {\n key,\n data: current.data,\n timestamp: current.timestamp\n };\n }\n updateState(key, data, timestamp).data;\n return message;\n }\n /**\n * Returns the current state\n * @public\n */\n function getState() {\n return { ...state };\n }\n return {\n createEvent,\n processMessage,\n getState\n };\n}\nexports.crdtProtocol = crdtProtocol;\n//# sourceMappingURL=index.js.map","/**\n * Take the max between currentSize and intendedSize and then plus 1024. Then,\n * find the next nearer multiple of 1024.\n * @param currentSize - number\n * @param intendedSize - number\n * @returns the calculated number\n */\nfunction getNextSize(currentSize: number, intendedSize: number) {\n const minNewSize = Math.max(currentSize, intendedSize) + 1024\n return Math.ceil(minNewSize / 1024) * 1024\n}\n\n/**\n * @param writing - writing option, see object specs.\n * @param reading - reading option, see object specs.\n * @param initialCapacity - Initial capacity of buffer to allocate, ignored if you use writing or reading options\n */\nexport interface CreateByteBufferOptions {\n /**\n * @param buffer - a buffer already allocated to read from there.\n * @param currentOffset - set the cursor where begins to read. Default 0\n * @param length - delimite where the valid data ends. Default: buffer.length\n */\n reading?: {\n buffer: Uint8Array\n length?: number\n currentOffset: number\n }\n\n /**\n * @param buffer - a buffer already allocated to write there.\n * @param currentOffset - set the cursor to not start writing from the begin of it. Default 0\n */\n writing?: {\n buffer: Uint8Array\n currentOffset?: number\n }\n\n initialCapacity?: number\n}\n\nconst defaultInitialCapacity = 10240\n\n/**\n * ByteBuffer is a wrapper of DataView which also adds a read and write offset.\n * Also in a write operation it resizes the buffer is being used if it needs.\n *\n * - Use read and write function to generate or consume data.\n * - Use set and get only if you are sure that you're doing.\n */\nexport function createByteBuffer(options: CreateByteBufferOptions = {}) {\n const initialROffset: number = options.reading?.currentOffset || 0\n let initialBuffer: Uint8Array | null = null\n let initialWOffset: number = 0\n\n if (options.writing) {\n initialBuffer = options.writing.buffer\n if (options.writing.currentOffset) {\n initialWOffset = options.writing.currentOffset\n }\n } else if (options.reading) {\n initialBuffer = options.reading.buffer\n initialWOffset = options.reading.length || options.reading.buffer.length\n } else {\n initialBuffer = new Uint8Array(\n options.initialCapacity || defaultInitialCapacity\n )\n }\n\n let buffer: Uint8Array = initialBuffer!\n let view: DataView = new DataView(buffer.buffer, buffer.byteOffset)\n let woffset: number = initialWOffset\n let roffset: number = initialROffset\n\n /**\n * Increement the write offset and resize the buffer if it needs.\n */\n const woAdd = (amount: number) => {\n if (woffset + amount > buffer.byteLength) {\n const newsize = getNextSize(buffer.byteLength, woffset + amount)\n const newBuffer = new Uint8Array(newsize)\n newBuffer.set(buffer)\n buffer = newBuffer\n view = new DataView(buffer.buffer)\n }\n\n woffset += amount\n return woffset - amount\n }\n\n /**\n * Increment the read offset and throw an error if it's trying to read\n * outside the bounds.\n */\n const roAdd = (amount: number) => {\n if (roffset + amount > woffset) {\n throw new Error('Outside of the bounds of writen data.')\n }\n\n roffset += amount\n return roffset - amount\n }\n\n return {\n /**\n * @returns The entire current Uint8Array.\n *\n * WARNING: if the buffer grows, the view had changed itself,\n * and the reference will be a invalid one.\n */\n buffer(): Uint8Array {\n return buffer\n },\n /**\n * @returns The capacity of the current buffer\n */\n bufferLength(): number {\n return buffer.length\n },\n /**\n * Resets byteBuffer to avoid creating a new one\n */\n resetBuffer(): void {\n roffset = 0\n woffset = 0\n },\n /**\n * @returns The current read offset\n */\n currentReadOffset(): number {\n return roffset\n },\n /**\n * @returns The current write offset\n */\n currentWriteOffset(): number {\n return woffset\n },\n /**\n * Reading purpose\n * Returns the previuos offsset size before incrementing\n */\n incrementReadOffset(amount: number): number {\n return roAdd(amount)\n },\n /**\n * @returns How many bytes are available to read.\n */\n remainingBytes(): number {\n return woffset - roffset\n },\n readFloat32(): number {\n return view.getFloat32(roAdd(4))\n },\n readFloat64(): number {\n return view.getFloat64(roAdd(8))\n },\n readInt8(): number {\n return view.getInt8(roAdd(1))\n },\n readInt16(): number {\n return view.getInt16(roAdd(2))\n },\n readInt32(): number {\n return view.getInt32(roAdd(4))\n },\n readInt64(): bigint {\n return view.getBigInt64(roAdd(8))\n },\n readUint8(): number {\n return view.getUint8(roAdd(1))\n },\n readUint16(): number {\n return view.getUint16(roAdd(2))\n },\n readUint32(): number {\n return view.getUint32(roAdd(4))\n },\n readUint64(): bigint {\n return view.getBigUint64(roAdd(8))\n },\n readBuffer() {\n const length = view.getUint32(roAdd(4))\n return buffer.subarray(roAdd(length), roAdd(0))\n },\n /**\n * Writing purpose\n */\n /**\n * Increment offset\n * @param amount - how many bytes\n * @returns The offset when this reserving starts.\n */\n incrementWriteOffset(amount: number): number {\n return woAdd(amount)\n },\n /**\n * @returns The total number of bytes writen in the buffer.\n */\n size(): number {\n return woffset\n },\n /**\n * Take care using this function, if you modify the data after, the\n * returned subarray will change too. If you'll modify the content of the\n * bytebuffer, maybe you want to use toCopiedBinary()\n *\n * @returns The subarray from 0 to offset as reference.\n */\n toBinary() {\n return buffer.subarray(0, woffset)\n },\n\n /**\n * Safe copied buffer of the current data of ByteBuffer\n *\n * @returns The subarray from 0 to offset.\n */\n toCopiedBinary() {\n return new Uint8Array(this.toBinary())\n },\n\n writeBuffer(value: Uint8Array, writeLength: boolean = true) {\n if (writeLength) {\n this.writeUint32(value.byteLength)\n }\n\n const o = woAdd(value.byteLength)\n buffer.set(value, o)\n },\n writeFloat32(value: number): void {\n const o = woAdd(4)\n view.setFloat32(o, value)\n },\n writeFloat64(value: number): void {\n const o = woAdd(8)\n view.setFloat64(o, value)\n },\n writeInt8(value: number): void {\n const o = woAdd(1)\n view.setInt8(o, value)\n },\n writeInt16(value: number): void {\n const o = woAdd(2)\n view.setInt16(o, value)\n },\n writeInt32(value: number): void {\n const o = woAdd(4)\n view.setInt32(o, value)\n },\n writeInt64(value: bigint): void {\n const o = woAdd(8)\n view.setBigInt64(o, value)\n },\n writeUint8(value: number): void {\n const o = woAdd(1)\n view.setUint8(o, value)\n },\n writeUint16(value: number): void {\n const o = woAdd(2)\n view.setUint16(o, value)\n },\n writeUint32(value: number): void {\n const o = woAdd(4)\n view.setUint32(o, value)\n },\n writeUint64(value: bigint): void {\n const o = woAdd(8)\n view.setBigUint64(o, value)\n },\n // Dataview Proxy\n getFloat32(offset: number): number {\n return view.getFloat32(offset)\n },\n getFloat64(offset: number): number {\n return view.getFloat64(offset)\n },\n getInt8(offset: number): number {\n return view.getInt8(offset)\n },\n getInt16(offset: number): number {\n return view.getInt16(offset)\n },\n getInt32(offset: number): number {\n return view.getInt32(offset)\n },\n getInt64(offset: number): bigint {\n return view.getBigInt64(offset)\n },\n getUint8(offset: number): number {\n return view.getUint8(offset)\n },\n getUint16(offset: number): number {\n return view.getUint16(offset)\n },\n getUint32(offset: number): number {\n return view.getUint32(offset)\n },\n getUint64(offset: number): bigint {\n return view.getBigUint64(offset)\n },\n setFloat32(offset: number, value: number): void {\n view.setFloat32(offset, value)\n },\n setFloat64(offset: number, value: number): void {\n view.setFloat64(offset, value)\n },\n setInt8(offset: number, value: number): void {\n view.setInt8(offset, value)\n },\n setInt16(offset: number, value: number): void {\n view.setInt16(offset, value)\n },\n setInt32(offset: number, value: number): void {\n view.setInt32(offset, value)\n },\n setInt64(offset: number, value: bigint): void {\n view.setBigInt64(offset, value)\n },\n setUint8(offset: number, value: number): void {\n view.setUint8(offset, value)\n },\n setUint16(offset: number, value: number): void {\n view.setUint16(offset, value)\n },\n setUint32(offset: number, value: number): void {\n view.setUint32(offset, value)\n },\n setUint64(offset: number, value: bigint): void {\n view.setBigUint64(offset, value)\n }\n }\n}\n\n/**\n * @public\n */\nexport type ByteBuffer = ReturnType<typeof createByteBuffer>\n","/**\n * The wire message is the top-level message that can be packed\n * inside it can contain a data with another structure or protocol\n *\n * Each wire message has three primitive property that it'll never change\n * ---> length uint32 (message size up to 4,294,967,295)\n * ---> version uint32 (for now just a number which is zero)\n * ---> message type uint32\n * The length indicates how many bytes are above self, the version in\n * combination with message type defines the set of handlers that will be\n * available to process the message\n *\n */\n\nimport { ByteBuffer } from './ByteBuffer'\n\ntype Uint32 = number\n\nexport namespace WireMessage {\n export enum Enum {\n RESERVED = 0,\n\n // Component Operation\n PUT_COMPONENT = 1,\n DELETE_COMPONENT = 2,\n\n MAX_MESSAGE_TYPE\n }\n\n /**\n * @param length - Uint32 the length of all message (including the header)\n * @param type - define the function which handles the data\n */\n export type Header = {\n length: Uint32\n type: Uint32\n }\n\n export const HEADER_LENGTH = 8\n /**\n * Validate if the message incoming is completed\n * @param buf - ByteBuffer\n */\n export function validate(buf: ByteBuffer) {\n const rem = buf.remainingBytes()\n if (rem < HEADER_LENGTH) {\n return false\n }\n\n const messageLength = buf.getUint32(buf.currentReadOffset())\n if (rem < messageLength) {\n return false\n }\n\n return true\n }\n\n export function readHeader(buf: ByteBuffer): Header | null {\n if (!validate(buf)) {\n return null\n }\n\n return {\n length: buf.readUint32(),\n type: buf.readUint32() as Enum\n }\n }\n}\n\nexport default WireMessage\n","import { ComponentDefinition } from '../../engine/component'\nimport { Entity } from '../../engine/entity'\nimport { ByteBuffer } from '../ByteBuffer'\nimport WireMessage from '../wireMessage'\n\nexport namespace ComponentOperation {\n /**\n * @param entity - Uint32 number of the entity\n * @param componentId - Uint32 number of id\n * @param timestamp - Uint64 Lamport timestamp\n * @param data - Uint8[] data of component\n */\n export type IPutComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data: Uint8Array\n }\n export type IDeleteComponent = {\n entity: Entity\n componentId: number\n timestamp: number\n data?: undefined\n }\n\n export const MESSAGE_HEADER_LENGTH = 20\n /**\n * Call this function for an optimal writing data passing the ByteBuffer\n * already allocated\n */\n export function write(\n type: WireMessage.Enum,\n entity: Entity,\n timestamp: number,\n componentDefinition: ComponentDefinition,\n buf: ByteBuffer\n ) {\n // reserve the beginning\n const startMessageOffset = buf.incrementWriteOffset(\n WireMessage.HEADER_LENGTH + MESSAGE_HEADER_LENGTH\n )\n\n // write body\n if (type === WireMessage.Enum.PUT_COMPONENT) {\n componentDefinition.writeToByteBuffer(entity, buf)\n }\n const messageLength = buf.size() - startMessageOffset\n\n // Write WireMessage header\n buf.setUint32(startMessageOffset, messageLength)\n buf.setUint32(startMessageOffset + 4, type)\n\n // Write ComponentOperation header\n buf.setUint32(startMessageOffset + 8, entity)\n buf.setUint32(startMessageOffset + 12, componentDefinition._id)\n buf.setUint64(startMessageOffset + 16, BigInt(timestamp))\n buf.setUint32(\n startMessageOffset + 24,\n messageLength - MESSAGE_HEADER_LENGTH - WireMessage.HEADER_LENGTH\n )\n }\n\n export function read(\n buf: ByteBuffer\n ): (WireMessage.Header & (IPutComponent | IDeleteComponent)) | null {\n const header = WireMessage.readHeader(buf)\n\n if (!header) {\n return null\n }\n\n const common = {\n ...header,\n entity: buf.readUint32() as Entity,\n componentId: buf.readInt32(),\n timestamp: Number(buf.readUint64())\n }\n\n if (header.type === WireMessage.Enum.DELETE_COMPONENT) {\n return common\n }\n\n return {\n ...common,\n data: buf.readBuffer()\n }\n }\n}\n","import { ComponentDefinition } from '../../engine/component'\nimport { Entity } from '../../engine/entity'\n\nexport namespace CrdtUtils {\n export type ComponentID = ComponentDefinition['_id']\n\n export function getKey(entity: Entity, componentId: ComponentID): string {\n return `${entity}.${componentId}`\n }\n\n export enum SynchronizedEntityType {\n // synchronizes entities with the NetworkSynchronized component only, used for networked games\n NETWORKED,\n // synchronizes entities needed by the renderer\n RENDERER\n }\n}\n\nexport default CrdtUtils\n","import { Entity } from './entity'\n\nexport namespace EntityUtils {\n /**\n * Range is the first element and the last possible element, they both are included in the interval.\n * [start, end]\n */\n export type EntityRange = readonly [number, number]\n\n export const MAX_ENTITIES = 0xffffffff\n export const DYNAMIC_ENTITIES_START_AT = 100e3\n export const RESERVED_STATIC_ENTITIES = 512\n\n export const RESERVED_ENTITIES_RANGE: EntityRange = [\n 0,\n RESERVED_STATIC_ENTITIES - 1\n ]\n\n export const STATIC_ENTITIES_RANGE: EntityRange = [\n RESERVED_STATIC_ENTITIES,\n DYNAMIC_ENTITIES_START_AT - 1\n ]\n\n export const DYNAMIC_ENTITIES_RANGE: EntityRange = [\n DYNAMIC_ENTITIES_START_AT,\n MAX_ENTITIES\n ]\n\n function isInRange(entity: Entity, range: EntityRange): boolean {\n return entity >= range[0] && entity <= range[1]\n }\n\n export function isDynamicEntity(entity: Entity) {\n return isInRange(entity, DYNAMIC_ENTITIES_RANGE)\n }\n\n export function isStaticEntity(entity: Entity) {\n return isInRange(entity, STATIC_ENTITIES_RANGE)\n }\n\n export function isReservedEntity(entity: Entity) {\n return isInRange(entity, RESERVED_ENTITIES_RANGE)\n }\n}\n\nexport default EntityUtils\n","import { crdtProtocol, Message as CrdtMessage } from '@dcl/crdt'\n\nimport type { PreEngine } from '../../engine'\nimport { Entity } from '../../engine/entity'\nimport { createByteBuffer } from '../../serialization/ByteBuffer'\nimport { ComponentOperation as Message } from '../../serialization/crdt/componentOperation'\nimport WireMessage from '../../serialization/wireMessage'\nimport { Transport } from './transports/types'\nimport { ReceiveMessage, TransportMessage } from './types'\nimport CrdtUtils from './utils'\n\nexport function crdtSceneSystem({\n engine,\n transports\n}: {\n engine: PreEngine\n transports: Transport[]\n}) {\n // CRDT Client\n const crdtClient = crdtProtocol<Uint8Array>()\n // Messages that we received at transport.onMessage waiting to be processed\n const receivedMessages: ReceiveMessage[] = []\n // Messages already processed by the engine but that we need to broadcast to other transports.\n const transportMessages: TransportMessage[] = []\n // Map of entities already processed at least once\n\n transports.forEach(\n (transport) => (transport.onmessage = parseChunkMessage(transport.type))\n )\n\n /**\n *\n * @param transportType tranport id to identiy messages\n * @returns a function to process received messages\n */\n function parseChunkMessage(transportType: string) {\n /**\n * Receives a chunk of binary messages and stores all the valid\n * Component Operation Messages at messages queue\n * @param chunkMessage A chunk of binary messages\n */\n return function parseChunkMessage(chunkMessage: Uint8Array) {\n const buffer = createByteBuffer({\n reading: { buffer: chunkMessage, currentOffset: 0 }\n })\n\n while (WireMessage.validate(buffer)) {\n const offset = buffer.currentReadOffset()\n const message = Message.read(buffer)!\n\n const { type, entity, componentId, data, timestamp } = message\n receivedMessages.push({\n type,\n entity,\n componentId,\n data,\n timestamp,\n transportType,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentReadOffset())\n })\n }\n }\n }\n\n /**\n * Return and clear the messaes queue\n * @returns messages recieved by the transport to process on the next tick\n */\n function getMessages<T = unknown>(value: T[]) {\n const messagesToProcess = Array.from(value)\n value.length = 0\n return messagesToProcess\n }\n\n /**\n * This fn will be called on every tick.\n * Process all the messages queue received by the transport\n */\n function receiveMessages() {\n const messagesToProcess = getMessages(receivedMessages)\n for (const transport of transports) {\n const buffer = createByteBuffer()\n for (const message of messagesToProcess) {\n const { data, timestamp, componentId, entity, type } = message\n const crdtMessage: CrdtMessage<Uint8Array> = {\n key: CrdtUtils.getKey(entity, componentId),\n data: data || null,\n timestamp: timestamp\n }\n const component = engine.getComponent(componentId)\n const current = crdtClient.processMessage(crdtMessage)\n\n // CRDT outdated message. Resend this message through the wire\n if (crdtMessage !== current) {\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n Message.write(type, entity, current.timestamp, component, buffer)\n } else {\n // Process CRDT Message\n if (type === WireMessage.Enum.DELETE_COMPONENT) {\n component.deleteFrom(entity)\n } else {\n const opts = {\n reading: { buffer: message.data!, currentOffset: 0 }\n }\n const bb = createByteBuffer(opts)\n\n // Update engine component\n component.upsertFromBinary(message.entity, bb)\n component.clearDirty()\n }\n // Add message to transport queue to be processed by others transports\n transportMessages.push(message)\n }\n }\n\n if (buffer.size()) {\n transport.send(buffer.toBinary())\n }\n }\n }\n\n /**\n * Iterates the dirty map and generates crdt messages to be send\n * @param dirtyMap a map of { entities: [componentId] }\n */\n function createMessages(dirtyMap: Map<Entity, Set<number>>) {\n // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages\n const crdtMessages = getMessages(transportMessages)\n const buffer = createByteBuffer()\n\n for (const [entity, componentsId] of dirtyMap) {\n for (const componentId of componentsId) {\n const component = engine.getComponent(componentId)\n const entityComponent = component.has(entity)\n ? component.toBinary(entity).toBinary()\n : null\n const event = crdtClient.createEvent(\n CrdtUtils.getKey(entity, componentId),\n entityComponent\n )\n const offset = buffer.currentWriteOffset()\n const type = component.has(entity)\n ? WireMessage.Enum.PUT_COMPONENT\n : WireMessage.Enum.DELETE_COMPONENT\n const transportMessage: Omit<TransportMessage, 'messageBuffer'> = {\n type,\n componentId,\n entity,\n timestamp: event.timestamp\n }\n if (transports.some((t) => t.filter(transportMessage))) {\n Message.write(type, entity, event.timestamp, component, buffer)\n crdtMessages.push({\n ...transportMessage,\n messageBuffer: buffer\n .buffer()\n .subarray(offset, buffer.currentWriteOffset())\n })\n }\n }\n }\n\n // Send messages to transports\n const transportBuffer = createByteBuffer()\n for (const transport of transports) {\n transportBuffer.resetBuffer()\n for (const message of crdtMessages) {\n if (transport.filter(message)) {\n transportBuffer.writeBuffer(message.messageBuffer, false)\n }\n }\n if (transportBuffer.size()) {\n transport.send(transportBuffer.toBinary())\n }\n }\n }\n\n return {\n createMessages,\n receiveMessages\n }\n}\n","import { EntityUtils } from './entity-utils'\n\ndeclare const entitySymbol: unique symbol\n/**\n * @public\n */\nexport type Entity = number & { [entitySymbol]: true }\n\nexport function EntityContainer() {\n const staticEntity = Entity(EntityUtils.STATIC_ENTITIES_RANGE)\n const dynamicEntity = Entity(EntityUtils.DYNAMIC_ENTITIES_RANGE)\n return {\n generateEntity(dynamic: boolean = false): Entity {\n if (dynamic) {\n return dynamicEntity.generateEntity()\n } else {\n return staticEntity.generateEntity()\n }\n },\n removeEntity(entity: Entity): boolean {\n return (\n staticEntity.removeEntity(entity) || dynamicEntity.removeEntity(entity)\n )\n },\n isEntityExists(entity: Entity): boolean {\n return (\n EntityUtils.isReservedEntity(entity) ||\n staticEntity.getExistingEntities().has(entity) ||\n dynamicEntity.getExistingEntities().has(entity)\n )\n },\n getExistingEntities(): Set<Entity> {\n return new Set([\n ...staticEntity.getExistingEntities(),\n ...dynamicEntity.getExistingEntities()\n ])\n }\n }\n}\n\nfunction Entity(range: EntityUtils.EntityRange) {\n function createEntity(entity: number): Entity {\n return entity as Entity\n }\n\n let entityCounter = range[0]\n const usedEntities: Set<Entity> = new Set()\n\n function generateEntity(): Entity {\n if (entityCounter >= range[1]) {\n throw new Error(\n `It fails trying to generate an entity out of range [${range[0]}, ${range[1]}].`\n )\n }\n\n const entity = createEntity(entityCounter)\n entityCounter++\n\n usedEntities.add(entity)\n return entity\n }\n\n function removeEntity(entity: Entity) {\n return usedEntities.delete(entity)\n }\n\n return {\n getExistingEntities() {\n return new Set(usedEntities)\n },\n generateEntity,\n removeEntity\n }\n}\n","import type { DeepReadonly } from '../Math'\nexport type { DeepReadonly }\n\nexport function deepReadonly<T extends Record<string, unknown>>(\n val: T\n): DeepReadonly<T> {\n // Fail only on development due to perf issues\n // if (isProd()) {\n // return val\n // }\n\n return Object.freeze({ ...val })\n}\n\nexport function isNotUndefined<T>(val: T | undefined): val is T {\n return !!val\n}\n","import type { EcsType } from '../built-in-types/EcsType'\nimport { ByteBuffer, createByteBuffer } from '../serialization/ByteBuffer'\nimport { Entity } from './entity'\nimport { deepReadonly, DeepReadonly } from './utils'\n\n/**\n * @public\n */\nexport type EcsResult<T extends EcsType> = T extends EcsType\n ? ReturnType<T['deserialize']>\n : never\n\n/**\n * @public\n */\nexport type ComponentType<T extends EcsType> = EcsResult<T>\n\n/**\n * @public\n */\nexport type ComponentDefinition<T extends EcsType = EcsType<any>> = {\n _id: number\n has(entity: Entity): boolean\n getFrom(entity: Entity): DeepReadonly<ComponentType<T>>\n\n getOrNull(entity: Entity): DeepReadonly<ComponentType<T>> | null\n\n // adds this component to the list \"to be reviewed next frame\"\n create(entity: Entity, val?: ComponentType<T>): ComponentType<T>\n\n // adds this component to the list \"to be reviewed next frame\"\n mutable(entity: Entity): ComponentType<T>\n createOrReplace(entity: Entity, val?: ComponentType<T>): ComponentType<T>\n deleteFrom(entity: Entity): ComponentType<T> | null\n\n upsertFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n updateFromBinary(entity: Entity, data: ByteBuffer): ComponentType<T> | null\n // allocates a buffer and returns new buffer\n toBinary(entity: Entity): ByteBuffer\n // writes to a pre-allocated buffer\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void\n\n iterator(): Iterable<[Entity, ComponentType<T>]>\n\n // Dirty\n dirtyIterator(): Iterable<Entity>\n clearDirty(): void\n isDirty(entity: Entity): boolean\n}\n\nexport function defineComponent<T extends EcsType>(\n componentId: number,\n spec: T\n // meta: { syncFlags }\n): ComponentDefinition<T> {\n const data = new Map<Entity, ComponentType<T>>()\n const dirtyIterator = new Set<Entity>()\n\n return {\n _id: componentId,\n isDirty: function (entity: Entity): boolean {\n return dirtyIterator.has(entity)\n },\n has: function (entity: Entity): boolean {\n return data.has(entity)\n },\n deleteFrom: function (entity: Entity): ComponentType<T> | null {\n const component = data.get(entity)\n data.delete(entity)\n dirtyIterator.add(entity)\n return component || null\n },\n getOrNull: function (\n entity: Entity\n ): DeepReadonly<ComponentType<T>> | null {\n const component = data.get(entity)\n return component ? deepReadonly(component) : null\n },\n getFrom: function (entity: Entity): DeepReadonly<ComponentType<T>> {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[getFrom] Component ${componentId} for ${entity} not found`\n )\n }\n return deepReadonly(component)\n },\n create: function (\n entity: Entity,\n value?: ComponentType<T>\n ): ComponentType<T> {\n const component = data.get(entity)\n if (component) {\n throw new Error(\n `[create] Component ${componentId} for ${entity} already exists`\n )\n }\n const usedValue = value === undefined ? spec.create() : value\n data.set(entity, usedValue)\n dirtyIterator.add(entity)\n return usedValue\n },\n createOrReplace: function (\n entity: Entity,\n value?: ComponentType<T>\n ): ComponentType<T> {\n const usedValue = value === undefined ? spec.create() : value\n data.set(entity, usedValue!)\n dirtyIterator.add(entity)\n return usedValue!\n },\n mutable: function (entity: Entity): ComponentType<T> {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[mutable] Component ${componentId} for ${entity} not found`\n )\n }\n dirtyIterator.add(entity)\n return component\n },\n iterator: function* (): Iterable<[Entity, ComponentType<T>]> {\n for (const [entity, component] of data) {\n yield [entity, component]\n }\n },\n dirtyIterator: function* (): Iterable<Entity> {\n for (const entity of dirtyIterator) {\n yield entity\n }\n },\n toBinary(entity: Entity): ByteBuffer {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[toBinary] Component ${componentId} for ${entity} not found`\n )\n }\n\n const writeBuffer = createByteBuffer()\n spec.serialize(component, writeBuffer)\n return writeBuffer\n },\n writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[writeToByteBuffer] Component ${componentId} for ${entity} not found`\n )\n }\n\n spec.serialize(component, buffer)\n },\n updateFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const component = data.get(entity)\n if (!component) {\n throw new Error(\n `[updateFromBinary] Component ${componentId} for ${entity} not found`\n )\n }\n return this.upsertFromBinary(entity, buffer)\n },\n upsertFromBinary(\n entity: Entity,\n buffer: ByteBuffer\n ): ComponentType<T> | null {\n const newValue = spec.deserialize(buffer)\n data.set(entity, newValue)\n dirtyIterator.add(entity)\n return newValue\n },\n clearDirty: function () {\n dirtyIterator.clear()\n }\n }\n}\n","/**\n * @public\n */\nexport type Update = (dt: number) => void\n\nexport const SYSTEMS_REGULAR_PRIORITY = 100e3\n\ntype SystemItem = {\n fn: Update\n priority: number\n name?: string\n}\n\nexport function SystemContainer() {\n const systems: SystemItem[] = []\n\n function sort() {\n systems.sort((a, b) => b.priority - a.priority)\n }\n\n function add(fn: Update, priority: number, name?: string): void {\n if (systems.find((item) => item.fn === fn)) {\n throw new Error('System already added')\n } else if (name && systems.find((item) => item.name === name)) {\n throw new Error('System name already used')\n }\n\n systems.push({\n fn,\n priority,\n name\n })\n sort()\n }\n\n function remove(selector: string | Update) {\n let index = -1\n\n if (typeof selector === 'string') {\n index = systems.findIndex((item) => item.name === selector)\n } else {\n index = systems.findIndex((item) => item.fn === selector)\n }\n\n if (index === -1) {\n return false\n }\n\n systems.splice(index, 1)\n sort()\n return true\n }\n\n return {\n add,\n remove,\n getSystems() {\n return systems\n }\n }\n}\n","import { defineSdkComponents, SdkComponents } from '../components'\nimport { crdtSceneSystem } from '../systems/crdt'\nimport { Entity, EntityContainer } from './entity'\nimport {\n ComponentType,\n ComponentDefinition,\n defineComponent as defComponent\n} from './component'\nimport type { ComponentEcsType, IEngineParams } from './types'\nimport type { DeepReadonly } from '../Math'\nimport type { EcsType } from '../built-in-types/EcsType'\nimport { IEngine } from './types'\nimport { ByteBuffer } from '../serialization/ByteBuffer'\nimport { SystemContainer, SYSTEMS_REGULAR_PRIORITY, Update } from './systems'\n\nexport { ComponentType, Entity, ByteBuffer, SdkComponents, ComponentDefinition }\nexport * from './types'\n\nfunction preEngine() {\n const entityContainer = EntityContainer()\n const componentsDefinition = new Map<number, ComponentDefinition<any>>()\n // TODO: find a way to make this work.\n // Maybe a proxy/callback to be up-to-date\n const entitiesComponent = new Map<\n number,\n Set<ComponentDefinition<any>['_id']>\n >()\n const systems = SystemContainer()\n\n function addSystem(\n fn: Update,\n priority: number = SYSTEMS_REGULAR_PRIORITY,\n name?: string\n ) {\n systems.add(fn, priority, name)\n }\n\n function removeSystem(selector: string | Update) {\n return systems.remove(selector)\n }\n\n function addEntity(dynamic: boolean = false) {\n // entitiesCompnonent.set(entity, new Set())\n const entity = entityContainer.generateEntity(dynamic)\n return entity\n }\n\n function addDynamicEntity() {\n return addEntity(true)\n }\n\n function removeEntity(entity: Entity) {\n for (const [, component] of componentsDefinition) {\n if (component.has(entity)) {\n component.deleteFrom(entity)\n }\n }\n\n return entityContainer.removeEntity(entity)\n }\n\n function defineComponent<T extends EcsType>(\n componentId: number,\n spec: T\n ): ComponentDefinition<T> {\n if (componentsDefinition.get(componentId)) {\n throw new Error(`Component ${componentId} already declared`)\n }\n const newComponent = defComponent<T>(componentId, spec)\n componentsDefinition.set(componentId, newComponent)\n return newComponent\n }\n\n function getComponent<T extends EcsType>(\n componentId: number\n ): ComponentDefinition<T> {\n const component = componentsDefinition.get(componentId)\n if (!component) {\n throw new Error(\n 'Component not found. You need to declare the components at the beginnig of the engine declaration'\n )\n }\n return component\n }\n\n function* mutableGroupOf<\n T extends [ComponentDefinition, ...ComponentDefinition[]]\n >(...components: T): Iterable<[Entity, ...ComponentEcsType<T>]> {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.mutable(entity))] as [\n Entity,\n ...ComponentEcsType<T>\n ]\n }\n }\n\n function* groupOf<T extends [ComponentDefinition, ...ComponentDefinition[]]>(\n ...components: T\n ): Iterable<[Entity, ...DeepReadonly<ComponentEcsType<T>>]> {\n for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {\n yield [entity, ...groupComp.map((c) => c.getFrom(entity))] as [\n Entity,\n ...DeepReadonly<ComponentEcsType<T>>\n ]\n }\n }\n\n function* getComponentDefGroup<T extends ComponentDefinition[]>(\n ...args: T\n ): Iterable<[Entity, ...T]> {\n const [firstComponentDef, ...componentDefinitions] = args\n for (const [entity] of firstComponentDef.iterator()) {\n let matches = true\n for (const componentDef of componentDefinitions) {\n if (!componentDef.has(entity)) {\n matches = false\n break\n }\n }\n\n if (matches) {\n yield [entity, ...args]\n }\n }\n }\n\n function getSystems() {\n return systems.getSystems()\n }\n\n return {\n entitiesComponent,\n componentsDefinition,\n addEntity,\n addDynamicEntity,\n removeEntity,\n addSystem,\n getSystems,\n removeSystem,\n defineComponent,\n mutableGroupOf,\n groupOf,\n getComponent\n }\n}\n\n/**\n * @internal\n */\nexport type PreEngine = ReturnType<typeof preEngine>\n\n/**\n * @public\n */\nexport function Engine({ transports }: IEngineParams = {}): IEngine {\n const engine = preEngine()\n const crdtSystem = crdtSceneSystem({ engine, transports: transports || [] })\n const baseComponents = defineSdkComponents(engine)\n\n function update(dt: number) {\n crdtSystem.receiveMessages()\n\n for (const system of engine.getSystems()) {\n system.fn(dt)\n }\n\n // Selected components that only exist one frame\n // then, they are deleted but their crdt state keeps\n const removeSelectedComponents = [\n baseComponents.OnPointerDownResult,\n baseComponents.OnPointerUpResult\n ]\n const excludeComponentIds = removeSelectedComponents.map((item) => item._id)\n for (const componentDef of removeSelectedComponents) {\n for (const [entity] of engine.groupOf(componentDef)) {\n componentDef.deleteFrom(entity)\n }\n }\n\n // TODO: Perf tip\n // Should we add some dirtyIteratorSet at engine level so we dont have\n // to iterate all the component definitions to get the dirty ones ?\n const dirtySet = new Map<Entity, Set<number>>()\n for (const [componentId, definition] of engine.componentsDefinition) {\n if (excludeComponentIds.includes(componentId)) continue\n\n for (const entity of definition.dirtyIterator()) {\n if (!dirtySet.has(entity)) {\n dirtySet.set(entity, new Set())\n }\n dirtySet.get(entity)!.add(componentId)\n }\n }\n crdtSystem.createMessages(dirtySet)\n\n for (const [_componentId, definition] of engine.componentsDefinition) {\n definition.clearDirty()\n }\n }\n\n return {\n addEntity: engine.addEntity,\n addDynamicEntity: engine.addDynamicEntity,\n removeEntity: engine.removeEntity,\n addSystem: engine.addSystem,\n removeSystem: engine.removeSystem,\n defineComponent: engine.defineComponent,\n mutableGroupOf: engine.mutableGroupOf,\n groupOf: engine.groupOf,\n getComponent: engine.getComponent,\n update,\n baseComponents\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { EcsType } from './EcsType'\nimport { ToOptional } from './typing'\n\n/**\n * @public\n */\nexport interface Spec {\n [key: string]: EcsType\n}\n\n/**\n * @public\n */\nexport type Result<T extends Spec> = ToOptional<{\n [K in keyof T]: T[K] extends EcsType\n ? ReturnType<T[K]['deserialize']>\n : T[K] extends Spec\n ? Result<T[K]>\n : never\n}>\n\n/**\n * @public\n */\nexport function MapType<T extends Spec>(spec: T): EcsType<Result<T>> {\n return {\n serialize(value: Result<T>, builder: ByteBuffer): void {\n for (const key in spec) {\n // TODO: as any\n spec[key].serialize((value as any)[key], builder)\n }\n },\n deserialize(reader: ByteBuffer): Result<T> {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].deserialize(reader)\n }\n return newValue\n },\n create() {\n const newValue: Result<T> = {} as any\n for (const key in spec) {\n // TODO: as any\n ;(newValue as any)[key] = spec[key].create()\n }\n return newValue\n }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { EcsType } from './EcsType'\n\n/**\n * @public\n */\nexport function ArrayType<T>(type: EcsType<T>): EcsType<Array<T>> {\n return {\n serialize(value: Array<T>, builder: ByteBuffer): void {\n builder.writeUint32(value.length)\n for (const item of value) {\n type.serialize(item, builder)\n }\n },\n deserialize(reader: ByteBuffer): Array<T> {\n const newArray: Array<T> = []\n const length = reader.readUint32()\n for (let index = 0; index < length; index++) {\n newArray.push(type.deserialize(reader))\n }\n return newArray\n },\n create() {\n return []\n }\n }\n}\n","import { ByteBuffer } from '../serialization/ByteBuffer'\nimport { EcsType } from './EcsType'\n\n/**\n * @public\n */\nexport function Optional<T>(spec: EcsType<T>): EcsType<T | undefined> {\n return {\n serialize(value: T | undefined, builder: ByteBuffer): void {\n if (value) {\n builder.writeInt8(1)\n spec.serialize(value, builder)\n } else {\n builder.writeInt8(0)\n }\n },\n deserialize(reader: ByteBuffer): T | undefined {\n const exists = reader.readInt8()\n if (exists) {\n return spec.deserialize(reader)\n }\n },\n create() {\n return undefined\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const Int64: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt64(BigInt(value))\n },\n deserialize(reader: ByteBuffer): number {\n return Number(reader.readInt64())\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int32: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt32()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int16: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt16(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt16()\n },\n create() {\n return 0\n }\n}\n\n/**\n * @public\n */\nexport const Int8: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeInt8(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readInt8()\n },\n create() {\n return 0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const Float32: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat32(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat32()\n },\n create() {\n return 0.0\n }\n}\n\n/**\n * @public\n */\nexport const Float64: EcsType<number> = {\n serialize(value: number, builder: ByteBuffer): void {\n builder.writeFloat64(value)\n },\n deserialize(reader: ByteBuffer): number {\n return reader.readFloat64()\n },\n create() {\n return 0.0\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const FlatString: EcsType<string> = {\n serialize(value: string, builder: ByteBuffer): void {\n builder.writeBuffer(new TextEncoder().encode(value))\n },\n deserialize(reader: ByteBuffer): string {\n return new TextDecoder().decode(reader.readBuffer())\n },\n create() {\n return ''\n }\n}\n\n/**\n * @public\n */\nexport const EcsString = FlatString\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport function Enum<T>(type: EcsType<any>): EcsType<T> {\n return {\n serialize(value: T, builder: ByteBuffer): void {\n type.serialize(value, builder)\n },\n deserialize(reader: ByteBuffer): T {\n return type.deserialize(reader)\n },\n create() {\n return type.create()\n }\n }\n}\n","import { ByteBuffer } from '../../serialization/ByteBuffer'\nimport { EcsType } from '../EcsType'\n\n/**\n * @public\n */\nexport const EcsBoolean: EcsType<boolean> = {\n serialize(value: boolean, builder: ByteBuffer): void {\n builder.writeInt8(value ? 1 : 0)\n },\n deserialize(reader: ByteBuffer): boolean {\n return reader.readInt8() === 1\n },\n create() {\n return false\n }\n}\n","import { TransportMessage } from '../types'\nimport { Transport } from './types'\nimport { ComponentIds } from '../../../components/generated/index.gen'\nimport { LEGACY_COMPONENT_ID } from '../../../components/legacy/types'\n\nconst componentIds = Object.values(ComponentIds)\n .filter((a) => typeof a === 'number')\n .map(Number)\nconst rendererComponentIds = componentIds.concat(LEGACY_COMPONENT_ID.TRANSFORM)\n\nexport function createRendererTransport(): Transport {\n const type = 'renderer'\n return {\n type,\n send(message: Uint8Array): void {\n // TODO: replace with new rpc\n dcl\n .callRpc('@decentraland/ExperimentalAPI', 'sendToRenderer', [\n { data: new Uint8Array(message) }\n ])\n .catch(dcl.error)\n },\n filter(message: TransportMessage): boolean {\n // Echo message, ignore them\n if (message.transportType === type) {\n return false\n }\n\n // Only send renderer components (Proto Generated)\n if (!rendererComponentIds.includes(message.componentId)) {\n return false\n }\n\n return !!message\n }\n }\n}\n","import { TransportMessage } from '../types'\nimport { Transport } from './types'\n\nexport function createNetworkTransport(): Transport {\n // const rpc = new RpcTransport()\n function send(..._args: any[]) {\n // console.log('NetworkMessage Sent: ', ...args)\n }\n\n const type = 'network-transport'\n return {\n send,\n type,\n filter(message: TransportMessage): boolean {\n // Echo message, ignore them\n if (message.transportType === type) {\n return false\n }\n\n // TODO: Static entities & Network components\n\n return !!message // validComponents.includes(componentId)\n }\n }\n}\n","/**\n * @alpha * This file initialization is an alpha one. This is based on the old-ecs\n * init and it'll be changing.\n */\n\nimport { Engine } from './engine'\nimport { createRendererTransport } from './systems/crdt/transports/rendererTransport'\nimport { createNetworkTransport } from './systems/crdt/transports/networkTransport'\n\nconst rendererTransport = createRendererTransport()\nexport const engine = Engine({\n transports: [rendererTransport, createNetworkTransport()]\n})\n\nif (dcl) {\n dcl.loadModule('@decentraland/ExperimentalAPI', {}).catch(dcl.error)\n\n async function pullRendererMessages() {\n const response = await dcl.callRpc(\n '@decentraland/ExperimentalAPI',\n 'messageFromRenderer',\n []\n )\n\n if (response.data?.length) {\n if (rendererTransport.onmessage) {\n for (const byteArray of response.data) {\n rendererTransport.onmessage(byteArray)\n }\n }\n }\n }\n\n dcl.onUpdate((dt: number) => {\n pullRendererMessages()\n .catch(dcl.error)\n .finally(() => engine.update(dt))\n })\n}\n"],"names":["Object","defineProperty","exports","value","Vector3","create","x","y","z","copy","source","dest","length","vector","Math","sqrt","scaleToRef","scale","result","normalizeFromLength","len","normalizeFromLengthToRef","lerpToRef","start","end","amount","add","vector1","vector2","subtract","minuend","subtrahend","subtractToRef","opposite","clone","assign","lengthSquared","normalize","normalizeToRef","dot","left","right","rotate","q","qx","qy","qz","w","qw","ix","iy","iz","iw","lerp","cross","Zero","crossToRef","One","Up","Down","Forward","Backward","Right","Left","Scalar","TwoPi","PI","sign","_value","isNaN","clamp","min","max","repeat","floor","deltaAngle","current","target","num","moveTowards","maxDelta","abs","withinEpsilon","a","b","epsilon","toHex","i","str","toString","toUpperCase","log2","log","LOG2E","denormalize","normalized","pingPong","tx","t","smoothStep","from","to","moveTowardsAngle","lerpAngle","inverseLerp","hermite","value1","tangent1","value2","tangent2","squared","cubed","randomRange","random","rangeToPercent","percentToRange","percent","normalizeRadians","angle","Orientation","Space","RAD2DEG","DEG2RAD","ToLinearSpace","ToGammaSpace","Epsilon","Quaternion","Vector3_1","require$$0","Scalar_1","require$$1","types_1","require$$2","rotationYawPitchRoll","yaw","pitch","roll","halfPitch","halfYaw","halfRoll","c1","cos","c2","c3","s1","sin","s2","s3","quat1","quat2","dotVal","acos","qLength","Identity","slerp","slerpToRef","multiplyToRef","self","q1","q2","euler","rotateTowards","maxDegreesDelta","lookRotation","forward","up","forwardNew","upNew","m00","m01","m02","m10","m11","m12","m20","m21","m22","num8","quaternion","num7","num4","num6","num3","num5","num2","fromToRotation","v0","v1","eulerAngles","out","unit","test","atan2","asin","rotationYawPitchRollToRef","fromRotationMatrixToRef","matrix","data","_m","m13","m23","m31","m32","m33","trace","s","flag","multiply","angleAxis","degress","axis","radians","a2","__createBinding","this","o","m","k","k2","undefined","enumerable","get","__exportStar","p","prototype","hasOwnProperty","call","require$$3","aspromise","fn","ctx","params","Array","arguments","offset","index","pending","Promise","resolve","reject","err","apply","base64","string","n","charAt","ceil","b64","s64","encode","buffer","parts","chunk","j","push","String","fromCharCode","slice","join","invalidEncoding","decode","c","charCodeAt","Error","EventEmitter","_listeners","eventemitter","on","evt","off","listeners","splice","emit","args","factory","Float32Array","f32","f8b","Uint8Array","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","round","exponent","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","bind","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","float","inquire","moduleName","mod","eval","replace","keys","e","inquire_1","utf8","read","write","pool_1","alloc","size","SIZE","MAX","slab","longbits","LongBits","util","zero","toNumber","zzEncode","zzDecode","zeroHash","fromNumber","isString","Long","parseInt","fromString","low","high","unsigned","toLong","Boolean","fromHash","hash","toHash","mask","part0","part1","part2","merge","dst","src","ifNotSet","newError","name","CustomError","message","properties","captureStackTrace","stack","constructor","asPromise","require$$4","require$$5","pool","require$$6","require$$7","isNode","global","process","versions","node","window","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","isObject","isset","isSet","obj","prop","isArray","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","bits","fromBits","lcFirst","toLowerCase","substring","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","bytes","json","_configure","encoding","allocUnsafe","writer","Writer","BufferWriter","Op","next","noop","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","subarray","_push","uint32","int32","sint32","uint64","int64","sint64","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","set","fork","reset","ldelim","finish","BufferWriter_","writer_buffer","writeStringBuffer","writeBytesBuffer","byteLength","reader","Reader","BufferReader","indexOutOfRange","writeLength","RangeError","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","_slice","skip","skipType","wireType","BufferReader_","reader_buffer","utf8Slice","service","Service","rpcImpl","requestDelimited","responseDelimited","TypeError","rpcCall","method","requestCtor","responseCtor","request","callback","response","setTimeout","endedByRPC","roots","protobuf","configure","build","rpc","minimalExports","requireMinimal","createBasePBAnimator","PBAnimator","[object Object]","_m0.Writer","v","PBAnimationState","input","_m0.Reader","tag","createBasePBAnimationState","clip","playing","weight","speed","loop","shouldReset","COMPONENT_ID","Animator","builder","writeBuffer","deserialize","remainingBytes","createBasePBAudioSource","volume","audioClipUrl","PBAudioSource","AudioSource","createBasePBAvatarAttach","avatarId","anchorPointId","PBAvatarAttach","AvatarAttach","createBaseColor3","r","g","Color3","createBasePBAvatarShape","id","bodyShape","skinColor","hairColor","eyeColor","wearables","expressionTriggerId","expressionTriggerTimestamp","stickerTriggerId","stickerTriggerTimestamp","talking","PBAvatarShape","longToNumber","globalThis","long","gt","MAX_SAFE_INTEGER","AvatarShape","createBasePBBoxShape","withCollisions","isPointerBlocker","visible","uvs","PBBoxShape","end2","BoxShape","createBaseVector3","CameraMode","createBasePBCameraModeArea","area","mode","PBCameraModeArea","CameraModeArea","createBasePBCylinderShape","radiusTop","radiusBottom","PBCylinderShape","CylinderShape","createBasePBGLTFShape","PBGLTFShape","GLTFShape","createBasePBNFTShape","assetId","style","color","PBNFTShape","NFTShape","createBasePBOnPointerDown","button","hoverText","distance","showFeedback","PBOnPointerDown","OnPointerDown","createBasePBOnPointerDownResult","meshName","origin","direction","point","normal","timestamp","PBOnPointerDownResult","OnPointerDownResult","createBasePBOnPointerUp","PBOnPointerUp","OnPointerUp","createBasePBOnPointerUpResult","PBOnPointerUpResult","OnPointerUpResult","createBasePBPlaneShape","PBPlaneShape","PlaneShape","createBasePBSphereShape","PBSphereShape","SphereShape","createBasePBTextShape","text","font","opacity","fontSize","fontAutoSize","hTextAlign","vTextAlign","width","height","paddingTop","paddingRight","paddingBottom","paddingLeft","lineSpacing","lineCount","textWrapping","shadowBlur","shadowOffsetX","shadowOffsetY","outlineWidth","shadowColor","outlineColor","textColor","PBTextShape","TextShape","ComponentIds","defineProtocolBufferComponents","defineComponent","Animator.COMPONENT_ID","Animator.Animator","AudioSource.COMPONENT_ID","AudioSource.AudioSource","AvatarAttach.COMPONENT_ID","AvatarAttach.AvatarAttach","AvatarShape.COMPONENT_ID","AvatarShape.AvatarShape","BoxShape.COMPONENT_ID","BoxShape.BoxShape","CameraModeArea.COMPONENT_ID","CameraModeArea.CameraModeArea","CylinderShape.COMPONENT_ID","CylinderShape.CylinderShape","GLTFShape.COMPONENT_ID","GLTFShape.GLTFShape","NFTShape.COMPONENT_ID","NFTShape.NFTShape","OnPointerDown.COMPONENT_ID","OnPointerDown.OnPointerDown","OnPointerDownResult.COMPONENT_ID","OnPointerDownResult.OnPointerDownResult","OnPointerUp.COMPONENT_ID","OnPointerUp.OnPointerUp","OnPointerUpResult.COMPONENT_ID","OnPointerUpResult.OnPointerUpResult","PlaneShape.COMPONENT_ID","PlaneShape.PlaneShape","SphereShape.COMPONENT_ID","SphereShape.SphereShape","TextShape.COMPONENT_ID","TextShape.TextShape","TRANSFORM_LENGTH","Transform","ptr","incrementWriteOffset","setFloat32","position","rotation","setUint32","parent","incrementReadOffset","getFloat32","getUint32","LEGACY_COMPONENT_ID","defineLegacyComponents","ID","TRANSFORM","LegacyTransform","defineSdkComponents","engine","types","sameData","equals","crdtProtocol","state","updateState","key","remoteTimestamp","createEvent","processMessage","compareData","getState","distExports","requireDist","getNextSize","currentSize","intendedSize","minNewSize","defaultInitialCapacity","createByteBuffer","options","initialROffset","_a","reading","currentOffset","initialBuffer","initialWOffset","writing","initialCapacity","view","DataView","byteOffset","woffset","roffset","woAdd","newsize","roAdd","bufferLength","currentReadOffset","currentWriteOffset","readFloat32","readFloat64","getFloat64","readInt8","getInt8","readInt16","getInt16","readInt32","getInt32","readInt64","getBigInt64","readUint8","getUint8","readUint16","getUint16","readUint32","readUint64","getBigUint64","toBinary","writeUint32","setFloat64","setInt8","setInt16","setInt32","setBigInt64","setUint8","setUint16","setBigUint64","getInt64","getUint64","WireMessage","validate","rem","HEADER_LENGTH","Enum","readHeader","type","WireMessage$1","ComponentOperation","CrdtUtils","MESSAGE_HEADER_LENGTH","entity","componentDefinition","startMessageOffset","PUT_COMPONENT","writeToByteBuffer","messageLength","_id","setUint64","BigInt","header","common","componentId","DELETE_COMPONENT","readBuffer","SynchronizedEntityType","getKey","CrdtUtils$1","EntityUtils","crdtSceneSystem","transports","crdtClient","receivedMessages","transportMessages","getMessages","messagesToProcess","forEach","transport","onmessage","transportType","chunkMessage","Message","messageBuffer","createMessages","dirtyMap","crdtMessages","componentsId","component","getComponent","entityComponent","has","event","transportMessage","some","filter","transportBuffer","resetBuffer","send","receiveMessages","crdtMessage","deleteFrom","bb","upsertFromBinary","clearDirty","EntityContainer","staticEntity","Entity","STATIC_ENTITIES_RANGE","dynamicEntity","DYNAMIC_ENTITIES_RANGE","generateEntity","dynamic","removeEntity","isEntityExists","isReservedEntity","getExistingEntities","Set","range","entityCounter","usedEntities","delete","deepReadonly","spec","Map","dirtyIterator","isDirty","getOrNull","getFrom","usedValue","createOrReplace","mutable","iterator","serialize","newValue","clear","isInRange","MAX_ENTITIES","DYNAMIC_ENTITIES_START_AT","RESERVED_STATIC_ENTITIES","RESERVED_ENTITIES_RANGE","isDynamicEntity","isStaticEntity","SYSTEMS_REGULAR_PRIORITY","SystemContainer","systems","sort","priority","find","item","remove","selector","findIndex","getSystems","preEngine","entityContainer","componentsDefinition","entitiesComponent","addEntity","getComponentDefGroup","firstComponentDef","componentDefinitions","matches","componentDef","addDynamicEntity","addSystem","removeSystem","newComponent","defComponent","mutableGroupOf","components","groupComp","map","groupOf","Engine","crdtSystem","baseComponents","update","dt","system","removeSelectedComponents","excludeComponentIds","dirtySet","definition","includes","_componentId","MapType","ArrayType","newArray","Optional","writeInt8","Int64","writeInt64","Int32","writeInt32","Int16","writeInt16","Int8","Float32","writeFloat32","Float64","writeFloat64","FlatString","TextEncoder","TextDecoder","EcsString","EcsBoolean","componentIds","values","rendererComponentIds","concat","createRendererTransport","dcl","callRpc","catch","error","createNetworkTransport","_args","rendererTransport","async","pullRendererMessages","byteArray","loadModule","onUpdate","finally","distExports$1"],"mappings":"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"}