@lego-fan9/asset-studio-web 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Util/EndianBinaryReader.ts","../src/Util/path/index.js","../src/Util/FileReader.ts","../src/Enums/ClassIDType.ts","../src/Util/UnityVersions.ts","../src/Files/Bundle/Models/BundleHeader.ts","../src/Files/Bundle/Models/BundleNode.ts","../src/Files/Bundle/Models/BundleStorageBlock.ts","../src/Files/StreamFile.ts","../src/Decompression/Lz4/lz4.js","../src/Decompression/Lzma/lzma_main.ts","../src/Decompression/Lzma/sync.ts","../src/Decompression/Decompression.ts","../src/Files/Bundle/BundleFile.ts","../src/Files/Serialized/Models/SerializedFileHeader.ts","../src/Files/Serialized/Models/TypeTreeNode.ts","../src/Files/Serialized/Models/CommonStrings.ts","../src/Files/Serialized/Models/TypeTree.ts","../src/Files/Serialized/Models/SerializedType.ts","../src/Files/Serialized/Models/ObjectInfo.ts","../src/Files/Serialized/Models/LocalSerializedObjectIdentifier.ts","../src/Files/Serialized/Models/FileIdentifier.ts","../src/Util/ObjectReader.ts","../src/Classes/Object.ts","../src/Files/Serialized/SerializedFile.ts","../src/Classes/PPtr.ts","../src/Classes/EditorExtension.ts","../src/Classes/NamedObject.ts","../src/Classes/Texture.ts","../src/Util/ResourceReader.ts","../src/Classes/GLTextureSettings.ts","../src/Classes/StreamingInfo.ts","../src/Classes/Texture2D.ts","../src/Exporters/ImageDecoders/header-info.ts","../src/Exporters/ImageDecoders/extract-bits.ts","../src/Exporters/ImageDecoders/bptc-tables.ts","../src/Exporters/ImageDecoders/bc7.ts","../src/Exporters/ImageDecoders/decode.ts","../src/Exporters/Texture2D.ts","../src/AssetsManager.ts"],"sourcesContent":["import { EndianType } from \"../Enums/Endian.js\"\r\n\r\nexport class EndianBinaryReader {\r\n public view: DataView;\r\n public buffer: ArrayBuffer\r\n public endian: EndianType\r\n\r\n protected internalOffset = 0;\r\n protected baseOffset = 0;\r\n protected length = 0;\r\n\r\n get offset() {\r\n return this.internalOffset;\r\n }\r\n\r\n set offset(value: number) {\r\n if (value < this.baseOffset || value > this.baseOffset + this.length) {\r\n console.log(`Out of bounds!`);\r\n }\r\n \r\n this.internalOffset = value;\r\n }\r\n\r\n constructor(buffer: ArrayBuffer, endian?: EndianType | null);\r\n constructor(reader: EndianBinaryReader);\r\n constructor(bufferOrReader: ArrayBuffer | EndianBinaryReader, endian?: EndianType | null) {\r\n if (bufferOrReader instanceof EndianBinaryReader) {\r\n const reader = bufferOrReader;\r\n this.view = reader.view;\r\n this.buffer = reader.buffer;\r\n this.offset = reader.offset;\r\n this.endian = reader.endian;\r\n this.length = reader.length\r\n return;\r\n }\r\n\r\n this.buffer = bufferOrReader;\r\n this.view = new DataView(this.buffer);\r\n this.offset = 0;\r\n this.length = this.view.byteLength;\r\n\r\n this.endian = endian ?? EndianType.BigEndian;\r\n }\r\n\r\n private getEndian(endian?: EndianType): boolean {\r\n const actualEndian = endian ?? this.endian;\r\n return actualEndian === EndianType.LittleEndian;\r\n }\r\n\r\n public AlignStream(to: number) {\r\n const mod = this.offset % to;\r\n if (mod != 0) {\r\n this.offset += to - mod;\r\n }\r\n }\r\n\r\n public ReadByte(): number {\r\n return this.view.getUint8(this.offset++)\r\n }\r\n\r\n public ReadBytes(count: number, readTo?: Uint8Array): Uint8Array {\r\n if (!readTo) {\r\n readTo = new Uint8Array(count);\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n readTo[i] = this.ReadByte();\r\n }\r\n\r\n return readTo;\r\n }\r\n\r\n public ReadStringToNull(maxLen?: number): string {\r\n let response = \"\";\r\n\r\n while (this.offset < this.view.byteLength) {\r\n if (maxLen !== undefined && response.length >= maxLen) {\r\n break;\r\n }\r\n\r\n const char = this.ReadByte();\r\n\r\n if (char === 0) {\r\n break;\r\n }\r\n\r\n response += String.fromCharCode(char);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n public ReadAlignedString(): string {\r\n const length = this.ReadInt32();\r\n if (length > this.view.byteLength - this.offset) {\r\n throw new Error(\"Tried to read past end of buffer\");\r\n }\r\n\r\n if (length <= 0) {\r\n return \"\";\r\n }\r\n\r\n const response = new TextDecoder(\"utf-8\").decode(this.ReadBytes(length));\r\n \r\n this.AlignStream(4);\r\n\r\n return response;\r\n }\r\n\r\n public ReadBoolean(): boolean {\r\n return this.ReadByte() !== 0;\r\n }\r\n\r\n public ReadUint16(endian?: EndianType): number {\r\n const num = this.view.getUint16(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 2;\r\n\r\n return num;\r\n }\r\n\r\n public ReadInt16(endian?: EndianType): number {\r\n const num = this.view.getInt16(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 2;\r\n\r\n return num;\r\n }\r\n\r\n public ReadUint32(endian?: EndianType): number {\r\n const num = this.view.getUint32(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 4;\r\n\r\n return num;\r\n }\r\n\r\n public ReadInt32(endian?: EndianType): number {\r\n const num = this.view.getInt32(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 4;\r\n\r\n return num;\r\n }\r\n\r\n public ReadUint64(endian?: EndianType): bigint {\r\n const num = this.view.getBigUint64(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 8;\r\n\r\n return num;\r\n }\r\n\r\n public ReadInt64(endian?: EndianType): bigint {\r\n const num = this.view.getBigInt64(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 8;\r\n\r\n return num;\r\n }\r\n\r\n public ReadUint32At(pos: number, endian?: EndianType): number {\r\n return this.view.getUint32(pos, this.getEndian(endian))\r\n }\r\n\r\n public ReadInt64At(pos: number, endian?: EndianType): bigint {\r\n return this.view.getBigInt64(pos, this.getEndian(endian))\r\n }\r\n\r\n public ReadSingle(endian?: EndianType): number {\r\n const num = this.view.getFloat32(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 4;\r\n\r\n return num;\r\n }\r\n\r\n public ReadDouble(endian?: EndianType): number {\r\n const num = this.view.getFloat64(this.offset, this.getEndian(endian));\r\n\r\n this.offset += 8;\r\n\r\n return num;\r\n }\r\n\r\n public IndexOf(pattern: Uint8Array, start: number = this.offset): number {\r\n const len = this.view.byteLength;\r\n const patLen = pattern.length;\r\n\r\n if (patLen === 0) return -1;\r\n\r\n outer: for (let i = start; i <= len - patLen; i++) {\r\n for (let j = 0; j < patLen; j++) {\r\n if (this.view.getUint8(i + j) !== pattern[j]) {\r\n continue outer;\r\n }\r\n }\r\n return i;\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n public LastOffsetOf(pattern: Uint8Array, start: number = this.offset): number {\r\n const len = this.view.byteLength;\r\n const patLen = pattern.length;\r\n\r\n if (patLen === 0) return -1;\r\n\r\n const maxStart = Math.min(start, len - patLen);\r\n\r\n outer: for (let i = maxStart; i >= 0; i--) {\r\n for (let j = 0; j < patLen; j++) {\r\n if (this.view.getUint8(i + j) !== pattern[j]) {\r\n continue outer;\r\n }\r\n }\r\n return i;\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n public Slice(start: number, length: number): Uint8Array {\r\n return new Uint8Array(this.buffer.slice(start, start + length));\r\n }\r\n\r\n public isAllZero(): boolean {\r\n for (let i = 0; i < this.view.byteLength; i++) {\r\n if (this.view.getUint8(i) !== 0) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\r\n// transplited with Babel\r\n\r\n// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\nfunction assertPath(path) {\r\n if (typeof path !== 'string') {\r\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\r\n }\r\n}\r\n\r\n// Resolves . and .. elements in a path with directory names\r\nfunction normalizeStringPosix(path, allowAboveRoot) {\r\n var res = '';\r\n var lastSegmentLength = 0;\r\n var lastSlash = -1;\r\n var dots = 0;\r\n var code;\r\n for (var i = 0; i <= path.length; ++i) {\r\n if (i < path.length)\r\n code = path.charCodeAt(i);\r\n else if (code === 47 /*/*/)\r\n break;\r\n else\r\n code = 47 /*/*/;\r\n if (code === 47 /*/*/) {\r\n if (lastSlash === i - 1 || dots === 1) {\r\n // NOOP\r\n } else if (lastSlash !== i - 1 && dots === 2) {\r\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\r\n if (res.length > 2) {\r\n var lastSlashIndex = res.lastIndexOf('/');\r\n if (lastSlashIndex !== res.length - 1) {\r\n if (lastSlashIndex === -1) {\r\n res = '';\r\n lastSegmentLength = 0;\r\n } else {\r\n res = res.slice(0, lastSlashIndex);\r\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\r\n }\r\n lastSlash = i;\r\n dots = 0;\r\n continue;\r\n }\r\n } else if (res.length === 2 || res.length === 1) {\r\n res = '';\r\n lastSegmentLength = 0;\r\n lastSlash = i;\r\n dots = 0;\r\n continue;\r\n }\r\n }\r\n if (allowAboveRoot) {\r\n if (res.length > 0)\r\n res += '/..';\r\n else\r\n res = '..';\r\n lastSegmentLength = 2;\r\n }\r\n } else {\r\n if (res.length > 0)\r\n res += '/' + path.slice(lastSlash + 1, i);\r\n else\r\n res = path.slice(lastSlash + 1, i);\r\n lastSegmentLength = i - lastSlash - 1;\r\n }\r\n lastSlash = i;\r\n dots = 0;\r\n } else if (code === 46 /*.*/ && dots !== -1) {\r\n ++dots;\r\n } else {\r\n dots = -1;\r\n }\r\n }\r\n return res;\r\n}\r\n\r\nfunction _format(sep, pathObject) {\r\n var dir = pathObject.dir || pathObject.root;\r\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir === pathObject.root) {\r\n return dir + base;\r\n }\r\n return dir + sep + base;\r\n}\r\n\r\nvar posix = {\r\n // path.resolve([from ...], to)\r\n resolve: function resolve() {\r\n var resolvedPath = '';\r\n var resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path;\r\n if (i >= 0)\r\n path = arguments[i];\r\n else {\r\n path = \"/\";\r\n }\r\n\r\n assertPath(path);\r\n\r\n // Skip empty entries\r\n if (path.length === 0) {\r\n continue;\r\n }\r\n\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n // Normalize the path\r\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\r\n\r\n if (resolvedAbsolute) {\r\n if (resolvedPath.length > 0)\r\n return '/' + resolvedPath;\r\n else\r\n return '/';\r\n } else if (resolvedPath.length > 0) {\r\n return resolvedPath;\r\n } else {\r\n return '.';\r\n }\r\n },\r\n\r\n normalize: function normalize(path) {\r\n assertPath(path);\r\n\r\n if (path.length === 0) return '.';\r\n\r\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\r\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\r\n\r\n // Normalize the path\r\n path = normalizeStringPosix(path, !isAbsolute);\r\n\r\n if (path.length === 0 && !isAbsolute) path = '.';\r\n if (path.length > 0 && trailingSeparator) path += '/';\r\n\r\n if (isAbsolute) return '/' + path;\r\n return path;\r\n },\r\n\r\n isAbsolute: function isAbsolute(path) {\r\n assertPath(path);\r\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\r\n },\r\n\r\n join: function join() {\r\n if (arguments.length === 0)\r\n return '.';\r\n var joined;\r\n for (var i = 0; i < arguments.length; ++i) {\r\n var arg = arguments[i];\r\n assertPath(arg);\r\n if (arg.length > 0) {\r\n if (joined === undefined)\r\n joined = arg;\r\n else\r\n joined += '/' + arg;\r\n }\r\n }\r\n if (joined === undefined)\r\n return '.';\r\n return posix.normalize(joined);\r\n },\r\n\r\n relative: function relative(from, to) {\r\n assertPath(from);\r\n assertPath(to);\r\n\r\n if (from === to) return '';\r\n\r\n from = posix.resolve(from);\r\n to = posix.resolve(to);\r\n\r\n if (from === to) return '';\r\n\r\n // Trim any leading backslashes\r\n var fromStart = 1;\r\n for (; fromStart < from.length; ++fromStart) {\r\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\r\n break;\r\n }\r\n var fromEnd = from.length;\r\n var fromLen = fromEnd - fromStart;\r\n\r\n // Trim any leading backslashes\r\n var toStart = 1;\r\n for (; toStart < to.length; ++toStart) {\r\n if (to.charCodeAt(toStart) !== 47 /*/*/)\r\n break;\r\n }\r\n var toEnd = to.length;\r\n var toLen = toEnd - toStart;\r\n\r\n // Compare paths to find the longest common path from root\r\n var length = fromLen < toLen ? fromLen : toLen;\r\n var lastCommonSep = -1;\r\n var i = 0;\r\n for (; i <= length; ++i) {\r\n if (i === length) {\r\n if (toLen > length) {\r\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\r\n // We get here if `from` is the exact base path for `to`.\r\n // For example: from='/foo/bar'; to='/foo/bar/baz'\r\n return to.slice(toStart + i + 1);\r\n } else if (i === 0) {\r\n // We get here if `from` is the root\r\n // For example: from='/'; to='/foo'\r\n return to.slice(toStart + i);\r\n }\r\n } else if (fromLen > length) {\r\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\r\n // We get here if `to` is the exact base path for `from`.\r\n // For example: from='/foo/bar/baz'; to='/foo/bar'\r\n lastCommonSep = i;\r\n } else if (i === 0) {\r\n // We get here if `to` is the root.\r\n // For example: from='/foo'; to='/'\r\n lastCommonSep = 0;\r\n }\r\n }\r\n break;\r\n }\r\n var fromCode = from.charCodeAt(fromStart + i);\r\n var toCode = to.charCodeAt(toStart + i);\r\n if (fromCode !== toCode)\r\n break;\r\n else if (fromCode === 47 /*/*/)\r\n lastCommonSep = i;\r\n }\r\n\r\n var out = '';\r\n // Generate the relative path based on the path difference between `to`\r\n // and `from`\r\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\r\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\r\n if (out.length === 0)\r\n out += '..';\r\n else\r\n out += '/..';\r\n }\r\n }\r\n\r\n // Lastly, append the rest of the destination (`to`) path that comes after\r\n // the common path parts\r\n if (out.length > 0)\r\n return out + to.slice(toStart + lastCommonSep);\r\n else {\r\n toStart += lastCommonSep;\r\n if (to.charCodeAt(toStart) === 47 /*/*/)\r\n ++toStart;\r\n return to.slice(toStart);\r\n }\r\n },\r\n\r\n _makeLong: function _makeLong(path) {\r\n return path;\r\n },\r\n\r\n dirname: function dirname(path) {\r\n assertPath(path);\r\n if (path.length === 0) return '.';\r\n var code = path.charCodeAt(0);\r\n var hasRoot = code === 47 /*/*/;\r\n var end = -1;\r\n var matchedSlash = true;\r\n for (var i = path.length - 1; i >= 1; --i) {\r\n code = path.charCodeAt(i);\r\n if (code === 47 /*/*/) {\r\n if (!matchedSlash) {\r\n end = i;\r\n break;\r\n }\r\n } else {\r\n // We saw the first non-path separator\r\n matchedSlash = false;\r\n }\r\n }\r\n\r\n if (end === -1) return hasRoot ? '/' : '.';\r\n if (hasRoot && end === 1) return '//';\r\n return path.slice(0, end);\r\n },\r\n\r\n basename: function basename(path, ext) {\r\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\r\n assertPath(path);\r\n\r\n var start = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n var i;\r\n\r\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\r\n if (ext.length === path.length && ext === path) return '';\r\n var extIdx = ext.length - 1;\r\n var firstNonSlashEnd = -1;\r\n for (i = path.length - 1; i >= 0; --i) {\r\n var code = path.charCodeAt(i);\r\n if (code === 47 /*/*/) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n start = i + 1;\r\n break;\r\n }\r\n } else {\r\n if (firstNonSlashEnd === -1) {\r\n // We saw the first non-path separator, remember this index in case\r\n // we need it if the extension ends up not matching\r\n matchedSlash = false;\r\n firstNonSlashEnd = i + 1;\r\n }\r\n if (extIdx >= 0) {\r\n // Try to match the explicit extension\r\n if (code === ext.charCodeAt(extIdx)) {\r\n if (--extIdx === -1) {\r\n // We matched the extension, so mark this as the end of our path\r\n // component\r\n end = i;\r\n }\r\n } else {\r\n // Extension does not match, so our result is the entire path\r\n // component\r\n extIdx = -1;\r\n end = firstNonSlashEnd;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\r\n return path.slice(start, end);\r\n } else {\r\n for (i = path.length - 1; i >= 0; --i) {\r\n if (path.charCodeAt(i) === 47 /*/*/) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n start = i + 1;\r\n break;\r\n }\r\n } else if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // path component\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n }\r\n\r\n if (end === -1) return '';\r\n return path.slice(start, end);\r\n }\r\n },\r\n\r\n extname: function extname(path) {\r\n assertPath(path);\r\n var startDot = -1;\r\n var startPart = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n // Track the state of characters (if any) we see before our first dot and\r\n // after any path separator we find\r\n var preDotState = 0;\r\n for (var i = path.length - 1; i >= 0; --i) {\r\n var code = path.charCodeAt(i);\r\n if (code === 47 /*/*/) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n startPart = i + 1;\r\n break;\r\n }\r\n continue;\r\n }\r\n if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // extension\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n if (code === 46 /*.*/) {\r\n // If this is our first dot, mark it as the start of our extension\r\n if (startDot === -1)\r\n startDot = i;\r\n else if (preDotState !== 1)\r\n preDotState = 1;\r\n } else if (startDot !== -1) {\r\n // We saw a non-dot and non-path separator before our dot, so we should\r\n // have a good chance at having a non-empty extension\r\n preDotState = -1;\r\n }\r\n }\r\n\r\n if (startDot === -1 || end === -1 ||\r\n // We saw a non-dot character immediately before the dot\r\n preDotState === 0 ||\r\n // The (right-most) trimmed path component is exactly '..'\r\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\r\n return '';\r\n }\r\n return path.slice(startDot, end);\r\n },\r\n\r\n format: function format(pathObject) {\r\n if (pathObject === null || typeof pathObject !== 'object') {\r\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\r\n }\r\n return _format('/', pathObject);\r\n },\r\n\r\n parse: function parse(path) {\r\n assertPath(path);\r\n\r\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\r\n if (path.length === 0) return ret;\r\n var code = path.charCodeAt(0);\r\n var isAbsolute = code === 47 /*/*/;\r\n var start;\r\n if (isAbsolute) {\r\n ret.root = '/';\r\n start = 1;\r\n } else {\r\n start = 0;\r\n }\r\n var startDot = -1;\r\n var startPart = 0;\r\n var end = -1;\r\n var matchedSlash = true;\r\n var i = path.length - 1;\r\n\r\n // Track the state of characters (if any) we see before our first dot and\r\n // after any path separator we find\r\n var preDotState = 0;\r\n\r\n // Get non-dir info\r\n for (; i >= start; --i) {\r\n code = path.charCodeAt(i);\r\n if (code === 47 /*/*/) {\r\n // If we reached a path separator that was not part of a set of path\r\n // separators at the end of the string, stop now\r\n if (!matchedSlash) {\r\n startPart = i + 1;\r\n break;\r\n }\r\n continue;\r\n }\r\n if (end === -1) {\r\n // We saw the first non-path separator, mark this as the end of our\r\n // extension\r\n matchedSlash = false;\r\n end = i + 1;\r\n }\r\n if (code === 46 /*.*/) {\r\n // If this is our first dot, mark it as the start of our extension\r\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\r\n } else if (startDot !== -1) {\r\n // We saw a non-dot and non-path separator before our dot, so we should\r\n // have a good chance at having a non-empty extension\r\n preDotState = -1;\r\n }\r\n }\r\n\r\n if (startDot === -1 || end === -1 ||\r\n // We saw a non-dot character immediately before the dot\r\n preDotState === 0 ||\r\n // The (right-most) trimmed path component is exactly '..'\r\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\r\n if (end !== -1) {\r\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\r\n }\r\n } else {\r\n if (startPart === 0 && isAbsolute) {\r\n ret.name = path.slice(1, startDot);\r\n ret.base = path.slice(1, end);\r\n } else {\r\n ret.name = path.slice(startPart, startDot);\r\n ret.base = path.slice(startPart, end);\r\n }\r\n ret.ext = path.slice(startDot, end);\r\n }\r\n\r\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\r\n\r\n return ret;\r\n },\r\n\r\n sep: '/',\r\n delimiter: ':',\r\n win32: null,\r\n posix: null\r\n};\r\n\r\nposix.posix = posix;\r\n\r\nexport default posix;","import { EndianBinaryReader } from \"./EndianBinaryReader.js\"\r\nimport { FileType } from \"../Enums/FileType.js\"\r\nimport path from \"../Util/path/index.js\";\r\n\r\nconst GZipMagic = new Uint8Array([0x1f, 0x8b]);\r\nconst BrotliMagic = new Uint8Array([0x62, 0x72, 0x6F, 0x74, 0x6C, 0x69]);\r\nconst ZipMagic = new Uint8Array([0x50, 0x4B, 0x03, 0x04]);\r\nconst ZipSpannedMagic = new Uint8Array([0x50, 0x4B, 0x07, 0x08]);\r\nconst UnityFSMagic = new Uint8Array([0x55, 0x6E, 0x69, 0x74, 0x79, 0x46, 0x53, 0x00]);\r\n\r\nexport class FileReader extends EndianBinaryReader {\r\n public FullPath: string;\r\n public FileName: string;\r\n public FileType: FileType;\r\n private HeaderBuff: EndianBinaryReader;\r\n\r\n constructor(filepath: string, reader: EndianBinaryReader) {\r\n super(reader);\r\n\r\n this.HeaderBuff = new EndianBinaryReader(this.buffer.slice(0, 1152), this.endian)\r\n\r\n this.FullPath = path.resolve(filepath);\r\n this.FileName = path.basename(filepath);\r\n\r\n this.FileType = this.CheckFileType();\r\n }\r\n\r\n private CheckFileType(): FileType {\r\n const signature = this.HeaderBuff.ReadStringToNull(20);\r\n\r\n switch (signature) {\r\n case \"UnityWeb\":\r\n case \"UnityRaw\":\r\n case \"UnityArchive\":\r\n case \"UnityWebData1.0\":\r\n case \"TuanjieWebData1.0\":\r\n throw new Error(\"Unsupported file type\");\r\n case \"UnityFS\":\r\n this.CheckBundleDataOffset();\r\n return FileType.BundleFile;\r\n default:\r\n const dataLen = this.HeaderBuff.view.byteLength;\r\n\r\n let magic = dataLen > 2 ? this.HeaderBuff.Slice(0, 2) : new Uint8Array();\r\n if (Uint8ArrayCompare(magic, GZipMagic)) {\r\n return FileType.GZipFile;\r\n }\r\n\r\n magic = dataLen > 38 ? this.HeaderBuff.Slice(32, 6) : new Uint8Array();\r\n if (Uint8ArrayCompare(magic, BrotliMagic)) {\r\n return FileType.BrotliFile;\r\n }\r\n\r\n if (this.IsSerializedFile()) {\r\n return FileType.AssetsFile;\r\n }\r\n\r\n magic = dataLen > 4 ? this.HeaderBuff.Slice(0, 4) : new Uint8Array();\r\n if (Uint8ArrayCompare(magic, ZipMagic) || Uint8ArrayCompare(magic, ZipSpannedMagic)) {\r\n return FileType.ZipFile;\r\n }\r\n\r\n if (this.CheckBundleDataOffset()) {\r\n return FileType.BundleFile\r\n }\r\n\r\n return FileType.ResourceFile;\r\n }\r\n }\r\n\r\n private IsSerializedFile(): boolean {\r\n const fileSize = this.view.byteLength;\r\n\r\n if (fileSize < 20) {\r\n return false;\r\n }\r\n\r\n // let m_FileSize: BigInt = BigInt(this.HeaderBuff.ReadUint32At(4));\r\n let m_Version = this.HeaderBuff.ReadUint32At(8);\r\n let m_DataOffset: BigInt = BigInt(this.HeaderBuff.ReadUint32At(12));\r\n\r\n if (m_Version >= 22) {\r\n if (fileSize < 48) {\r\n return false;\r\n }\r\n\r\n // m_FileSize = this.HeaderBuff.ReadInt64At(12);\r\n m_DataOffset = this.HeaderBuff.ReadInt64At(32);\r\n }\r\n\r\n const BigIntFileSize: BigInt = BigInt(fileSize)\r\n if (m_DataOffset > BigIntFileSize) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private CheckBundleDataOffset(): boolean {\r\n var lastOffset = this.HeaderBuff.LastOffsetOf(UnityFSMagic);\r\n if (lastOffset <= 0) {\r\n return false;\r\n }\r\n\r\n var firstOffset = this.HeaderBuff.IndexOf(UnityFSMagic);\r\n if (firstOffset == lastOffset || lastOffset - firstOffset < 200) {\r\n this.offset = lastOffset;\r\n\r\n return true;\r\n }\r\n\r\n const tempOffset = this.HeaderBuff.offset;\r\n\r\n this.HeaderBuff.ReadStringToNull();\r\n this.HeaderBuff.ReadStringToNull();\r\n const bundleSize = this.HeaderBuff.ReadInt64();\r\n\r\n this.HeaderBuff.offset = tempOffset;\r\n\r\n if (bundleSize > 200n && BigInt(firstOffset) + bundleSize < BigInt(lastOffset)) {\r\n this.offset = firstOffset;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction Uint8ArrayCompare(a: Uint8Array, b: Uint8Array): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] !== b[i]) return false;\r\n }\r\n\r\n return true;\r\n}","export enum ClassIDType {\r\n UnknownType = -1,\r\n Object = 0,\r\n GameObject = 1,\r\n Component = 2,\r\n LevelGameManager = 3,\r\n Transform = 4,\r\n TimeManager = 5,\r\n GlobalGameManager = 6,\r\n Behaviour = 8,\r\n GameManager = 9,\r\n AudioManager = 11,\r\n ParticleAnimator = 12,\r\n InputManager = 13,\r\n EllipsoidParticleEmitter = 15,\r\n Pipeline = 17,\r\n EditorExtension = 18,\r\n Physics2DSettings = 19,\r\n Camera = 20,\r\n Material = 21,\r\n MeshRenderer = 23,\r\n Renderer = 25,\r\n ParticleRenderer = 26,\r\n Texture = 27,\r\n Texture2D = 28,\r\n OcclusionCullingSettings = 29,\r\n GraphicsSettings = 30,\r\n MeshFilter = 33,\r\n OcclusionPortal = 41,\r\n Mesh = 43,\r\n Skybox = 45,\r\n QualitySettings = 47,\r\n Shader = 48,\r\n TextAsset = 49,\r\n Rigidbody2D = 50,\r\n Physics2DManager = 51,\r\n Collider2D = 53,\r\n Rigidbody = 54,\r\n PhysicsManager = 55,\r\n Collider = 56,\r\n Joint = 57,\r\n CircleCollider2D = 58,\r\n HingeJoint = 59,\r\n PolygonCollider2D = 60,\r\n BoxCollider2D = 61,\r\n PhysicsMaterial2D = 62,\r\n MeshCollider = 64,\r\n BoxCollider = 65,\r\n CompositeCollider2D = 66,\r\n EdgeCollider2D = 68,\r\n CapsuleCollider2D = 70,\r\n ComputeShader = 72,\r\n AnimationClip = 74,\r\n ConstantForce = 75,\r\n WorldParticleCollider = 76,\r\n TagManager = 78,\r\n AudioListener = 81,\r\n AudioSource = 82,\r\n AudioClip = 83,\r\n RenderTexture = 84,\r\n CustomRenderTexture = 86,\r\n MeshParticleEmitter = 87,\r\n ParticleEmitter = 88,\r\n Cubemap = 89,\r\n Avatar = 90,\r\n AnimatorController = 91,\r\n GUILayer = 92,\r\n RuntimeAnimatorController = 93,\r\n ScriptMapper = 94,\r\n Animator = 95,\r\n TrailRenderer = 96,\r\n DelayedCallManager = 98,\r\n TextMesh = 102,\r\n RenderSettings = 104,\r\n Light = 108,\r\n CGProgram = 109,\r\n BaseAnimationTrack = 110,\r\n Animation = 111,\r\n MonoBehaviour = 114,\r\n MonoScript = 115,\r\n MonoManager = 116,\r\n Texture3D = 117,\r\n NewAnimationTrack = 118,\r\n Projector = 119,\r\n LineRenderer = 120,\r\n Flare = 121,\r\n Halo = 122,\r\n LensFlare = 123,\r\n FlareLayer = 124,\r\n HaloLayer = 125,\r\n NavMeshAreas = 126,\r\n NavMeshProjectSettings = 126,\r\n HaloManager = 127,\r\n Font = 128,\r\n PlayerSettings = 129,\r\n NamedObject = 130,\r\n GUITexture = 131,\r\n GUIText = 132,\r\n GUIElement = 133,\r\n PhysicMaterial = 134,\r\n SphereCollider = 135,\r\n CapsuleCollider = 136,\r\n SkinnedMeshRenderer = 137,\r\n FixedJoint = 138,\r\n RaycastCollider = 140,\r\n BuildSettings = 141,\r\n AssetBundle = 142,\r\n CharacterController = 143,\r\n CharacterJoint = 144,\r\n SpringJoint = 145,\r\n WheelCollider = 146,\r\n ResourceManager = 147,\r\n NetworkView = 148,\r\n NetworkManager = 149,\r\n PreloadData = 150,\r\n MovieTexture = 152,\r\n ConfigurableJoint = 153,\r\n TerrainCollider = 154,\r\n MasterServerInterface = 155,\r\n TerrainData = 156,\r\n LightmapSettings = 157,\r\n WebCamTexture = 158,\r\n EditorSettings = 159,\r\n InteractiveCloth = 160,\r\n ClothRenderer = 161,\r\n EditorUserSettings = 162,\r\n SkinnedCloth = 163,\r\n AudioReverbFilter = 164,\r\n AudioHighPassFilter = 165,\r\n AudioChorusFilter = 166,\r\n AudioReverbZone = 167,\r\n AudioEchoFilter = 168,\r\n AudioLowPassFilter = 169,\r\n AudioDistortionFilter = 170,\r\n SparseTexture = 171,\r\n AudioBehaviour = 180,\r\n AudioFilter = 181,\r\n WindZone = 182,\r\n Cloth = 183,\r\n SubstanceArchive = 184,\r\n ProceduralMaterial = 185,\r\n ProceduralTexture = 186,\r\n Texture2DArray = 187,\r\n Texture2DArrayImage = -187, //fake type\r\n CubemapArray = 188,\r\n OffMeshLink = 191,\r\n OcclusionArea = 192,\r\n Tree = 193,\r\n NavMeshObsolete = 194,\r\n NavMeshAgent = 195,\r\n NavMeshSettings = 196,\r\n LightProbesLegacy = 197,\r\n ParticleSystem = 198,\r\n ParticleSystemRenderer = 199,\r\n ShaderVariantCollection = 200,\r\n LODGroup = 205,\r\n BlendTree = 206,\r\n Motion = 207,\r\n NavMeshObstacle = 208,\r\n SortingGroup = 210,\r\n SpriteRenderer = 212,\r\n Sprite = 213,\r\n CachedSpriteAtlas = 214,\r\n ReflectionProbe = 215,\r\n ReflectionProbes = 216,\r\n Terrain = 218,\r\n LightProbeGroup = 220,\r\n AnimatorOverrideController = 221,\r\n CanvasRenderer = 222,\r\n Canvas = 223,\r\n RectTransform = 224,\r\n CanvasGroup = 225,\r\n BillboardAsset = 226,\r\n BillboardRenderer = 227,\r\n SpeedTreeWindAsset = 228,\r\n AnchoredJoint2D = 229,\r\n Joint2D = 230,\r\n SpringJoint2D = 231,\r\n DistanceJoint2D = 232,\r\n HingeJoint2D = 233,\r\n SliderJoint2D = 234,\r\n WheelJoint2D = 235,\r\n ClusterInputManager = 236,\r\n BaseVideoTexture = 237,\r\n NavMeshData = 238,\r\n AudioMixer = 240,\r\n AudioMixerController = 241,\r\n AudioMixerGroupController = 243,\r\n AudioMixerEffectController = 244,\r\n AudioMixerSnapshotController = 245,\r\n PhysicsUpdateBehaviour2D = 246,\r\n ConstantForce2D = 247,\r\n Effector2D = 248,\r\n AreaEffector2D = 249,\r\n PointEffector2D = 250,\r\n PlatformEffector2D = 251,\r\n SurfaceEffector2D = 252,\r\n BuoyancyEffector2D = 253,\r\n RelativeJoint2D = 254,\r\n FixedJoint2D = 255,\r\n FrictionJoint2D = 256,\r\n TargetJoint2D = 257,\r\n LightProbes = 258,\r\n LightProbeProxyVolume = 259,\r\n SampleClip = 271,\r\n AudioMixerSnapshot = 272,\r\n AudioMixerGroup = 273,\r\n NScreenBridge = 280,\r\n AssetBundleManifest = 290,\r\n UnityAdsManager = 292,\r\n RuntimeInitializeOnLoadManager = 300,\r\n CloudWebServicesManager = 301,\r\n UnityAnalyticsManager = 303,\r\n CrashReportManager = 304,\r\n PerformanceReportingManager = 305,\r\n UnityConnectSettings = 310,\r\n AvatarMask = 319,\r\n PlayableDirector = 320,\r\n VideoPlayer = 328,\r\n VideoClip = 329,\r\n ParticleSystemForceField = 330,\r\n SpriteMask = 331,\r\n WorldAnchor = 362,\r\n OcclusionCullingData = 363,\r\n //kLargestRuntimeClassID = 364\r\n SmallestEditorClassID = 1000,\r\n PrefabInstance = 1001,\r\n EditorExtensionImpl = 1002,\r\n AssetImporter = 1003,\r\n AssetDatabaseV1 = 1004,\r\n Mesh3DSImporter = 1005,\r\n TextureImporter = 1006,\r\n ShaderImporter = 1007,\r\n ComputeShaderImporter = 1008,\r\n AudioImporter = 1020,\r\n HierarchyState = 1026,\r\n GUIDSerializer = 1027,\r\n AssetMetaData = 1028,\r\n DefaultAsset = 1029,\r\n DefaultImporter = 1030,\r\n TextScriptImporter = 1031,\r\n SceneAsset = 1032,\r\n NativeFormatImporter = 1034,\r\n MonoImporter = 1035,\r\n AssetServerCache = 1037,\r\n LibraryAssetImporter = 1038,\r\n ModelImporter = 1040,\r\n FBXImporter = 1041,\r\n TrueTypeFontImporter = 1042,\r\n MovieImporter = 1044,\r\n EditorBuildSettings = 1045,\r\n DDSImporter = 1046,\r\n InspectorExpandedState = 1048,\r\n AnnotationManager = 1049,\r\n PluginImporter = 1050,\r\n EditorUserBuildSettings = 1051,\r\n PVRImporter = 1052,\r\n ASTCImporter = 1053,\r\n KTXImporter = 1054,\r\n IHVImageFormatImporter = 1055,\r\n AnimatorStateTransition = 1101,\r\n AnimatorState = 1102,\r\n HumanTemplate = 1105,\r\n AnimatorStateMachine = 1107,\r\n PreviewAnimationClip = 1108,\r\n AnimatorTransition = 1109,\r\n SpeedTreeImporter = 1110,\r\n AnimatorTransitionBase = 1111,\r\n SubstanceImporter = 1112,\r\n LightmapParameters = 1113,\r\n LightingDataAsset = 1120,\r\n GISRaster = 1121,\r\n GISRasterImporter = 1122,\r\n CadImporter = 1123,\r\n SketchUpImporter = 1124,\r\n BuildReport = 1125,\r\n PackedAssets = 1126,\r\n VideoClipImporter = 1127,\r\n ActivationLogComponent = 2000,\r\n //kLargestEditorClassID = 2001\r\n //kClassIdOutOfHierarchy = 100000\r\n //int = 100000,\r\n //bool = 100001,\r\n //float = 100002,\r\n MonoObject = 100003,\r\n Collision = 100004,\r\n Vector3f = 100005,\r\n RootMotionData = 100006,\r\n Collision2D = 100007,\r\n AudioMixerLiveUpdateFloat = 100008,\r\n AudioMixerLiveUpdateBool = 100009,\r\n Polygon2D = 100010,\r\n //void = 100011,\r\n TilemapCollider2D = 19719996,\r\n AssetImporterLog = 41386430,\r\n GraphicsStateCollection = 55640938,\r\n VFXRenderer = 73398921,\r\n SerializableManagedRefTestClass = 76251197,\r\n Grid = 156049354,\r\n ScenesUsingAssets = 156483287,\r\n ArticulationBody = 171741748,\r\n Preset = 181963792,\r\n EmptyObject = 277625683,\r\n IConstraint = 285090594,\r\n TestObjectWithSpecialLayoutOne = 293259124,\r\n AssemblyDefinitionReferenceImporter = 294290339,\r\n SiblingDerived = 334799969,\r\n TestObjectWithSerializedMapStringNonAlignedStruct = 342846651,\r\n AudioResource = 355983997,\r\n SubDerived = 367388927,\r\n AssetImportInProgressProxy = 369655926,\r\n PluginBuildInfo = 382020655,\r\n MemorySettings = 387306366,\r\n BuildMetaDataImporter = 403037116,\r\n BuildInstructionImporter = 403037117,\r\n EditorProjectAccess = 426301858,\r\n PrefabImporter = 468431735,\r\n TestObjectWithSerializedArray = 478637458,\r\n TestObjectWithSerializedAnimationCurve = 478637459,\r\n TilemapRenderer = 483693784,\r\n ScriptableCamera = 488575907,\r\n SpriteAtlasAsset = 612988286,\r\n SpriteAtlasDatabase = 638013454,\r\n AudioBuildInfo = 641289076,\r\n CachedSpriteAtlasRuntimeData = 644342135,\r\n RendererFake = 646504946,\r\n MultiplayerManager = 655991488,\r\n AssemblyDefinitionReferenceAsset = 662584278,\r\n BuiltAssetBundleInfoSet = 668709126,\r\n SpriteAtlas = 687078895,\r\n RayTracingShaderImporter = 747330370,\r\n BuildArchiveImporter = 780535461,\r\n PreviewImporter = 815301076,\r\n RayTracingShader = 825902497,\r\n LightingSettings = 850595691,\r\n PlatformModuleSetup = 877146078,\r\n VersionControlSettings = 890905787,\r\n CustomCollider2D = 893571522,\r\n AimConstraint = 895512359,\r\n VFXManager = 937362698,\r\n RoslynAnalyzerConfigAsset = 947337230,\r\n RuleSetFileAsset = 954905827,\r\n VisualEffectSubgraph = 994735392,\r\n VisualEffectSubgraphOperator = 994735403,\r\n VisualEffectSubgraphBlock = 994735404,\r\n LocalizationImporter = 1027052791,\r\n Derived = 1091556383,\r\n PropertyModificationsTargetTestObject = 1111377672,\r\n ReferencesArtifactGenerator = 1114811875,\r\n AssemblyDefinitionAsset = 1152215463,\r\n SceneVisibilityState = 1154873562,\r\n LookAtConstraint = 1183024399,\r\n SpriteAtlasImporter = 1210832254,\r\n MultiArtifactTestImporter = 1223240404,\r\n AudioContainerElement = 1233149941,\r\n GameObjectRecorder = 1268269756,\r\n AudioRandomContainer = 1307931743,\r\n LightingDataAssetParent = 1325145578,\r\n PresetManager = 1386491679,\r\n TestObjectWithSpecialLayoutTwo = 1392443030,\r\n StreamingManager = 1403656975,\r\n LowerResBlitTexture = 1480428607,\r\n VideoBuildInfo = 1521398425,\r\n C4DImporter = 1541671625,\r\n StreamingController = 1542919678,\r\n RenderPassAttachment = 1571458007,\r\n TestObjectVectorPairStringBool = 1628831178,\r\n ShaderContainer = 1557264870,\r\n RoslynAdditionalFileAsset = 1597193336,\r\n RoslynAdditionalFileImporter = 1642787288,\r\n MultiplayerRolesData = 1652712579,\r\n SceneRoots = 1660057539,\r\n BrokenPrefabAsset = 1731078267,\r\n AndroidAssetPackImporter = 1736697216,\r\n VulkanDeviceFilterLists = 1740304944,\r\n GridLayout = 1742807556,\r\n AssemblyDefinitionImporter = 1766753193,\r\n ParentConstraint = 1773428102,\r\n FakeComponent = 1803986026,\r\n RuleSetFileImporter = 1777034230,\r\n PositionConstraint = 1818360608,\r\n RotationConstraint = 1818360609,\r\n ScaleConstraint = 1818360610,\r\n Tilemap = 1839735485,\r\n PackageManifest = 1896753125,\r\n PackageManifestImporter = 1896753126,\r\n RoslynAnalyzerConfigImporter = 1903396204,\r\n UIRenderer = 1931382933,\r\n TerrainLayer = 1953259897,\r\n SpriteShapeRenderer = 1971053207,\r\n NativeObjectType = 1977754360,\r\n TestObjectWithSerializedMapStringBool = 1981279845,\r\n SerializableManagedHost = 1995898324,\r\n VisualEffectAsset = 2058629509,\r\n VisualEffectImporter = 2058629510,\r\n VisualEffectResource = 2058629511,\r\n VisualEffectObject = 2059678085,\r\n VisualEffect = 2083052967,\r\n LocalizationAsset = 2083778819,\r\n ScriptedImporter = 2089858483,\r\n ShaderIncludeImporter = 2103361453,\r\n}","/*\r\n\r\n This file is written by ChatGPT. It is the only file I plan to write with gpt.\r\n\r\n Also it is awful.\r\n \r\n*/\r\n\r\nexport const BuildTypes = {\r\n Alpha: \"a\",\r\n Beta: \"b\",\r\n Final: \"f\",\r\n Patch: \"p\",\r\n Tuanjie: \"t\",\r\n} as const;\r\n\r\nexport type BuildType = typeof BuildTypes[keyof typeof BuildTypes];\r\n\r\ntype VersionTuple2 = [number, number];\r\ntype VersionTuple3 = [number, number, number];\r\n\r\nexport class UnityVersion {\r\n readonly major: number;\r\n readonly minor: number;\r\n readonly patch: number;\r\n readonly build: number;\r\n readonly buildType?: string;\r\n readonly fullVersion: string;\r\n\r\n constructor(version: string);\r\n constructor(major?: number, minor?: number, patch?: number);\r\n\r\n constructor(a?: string | number, b = 0, c = 0) {\r\n if (typeof a === \"string\") {\r\n const version = a;\r\n\r\n if (!version) {\r\n throw new Error(\"Unity version cannot be empty.\");\r\n }\r\n\r\n try {\r\n const nums = version.match(/\\d+/g)?.map(Number) ?? [];\r\n if (nums.length < 3) {\r\n throw new Error();\r\n }\r\n\r\n this.major = nums[0];\r\n this.minor = nums[1];\r\n this.patch = nums[2];\r\n this.build = nums[3] ?? 0;\r\n this.fullVersion = version;\r\n } catch {\r\n throw new Error(`Failed to parse Unity version: \"${version}\".`);\r\n }\r\n\r\n const nonDigits = version.match(/\\D+/g) ?? [];\r\n if (nonDigits.length > 2) {\r\n this.buildType = nonDigits[2];\r\n }\r\n } else {\r\n this.major = a ?? 0;\r\n this.minor = b;\r\n this.patch = c;\r\n\r\n this.fullVersion = `${this.major}.${this.minor}.${this.patch}`;\r\n\r\n if (!this.isStripped) {\r\n this.build = 1;\r\n this.buildType = BuildTypes.Final;\r\n this.fullVersion += `${this.buildType}${this.build}`;\r\n } else {\r\n this.build = 0;\r\n }\r\n }\r\n }\r\n\r\n get isStripped(): boolean {\r\n return this.major === 0 && this.minor === 0 && this.patch === 0;\r\n }\r\n\r\n get isAlpha(): boolean {\r\n return this.buildType === BuildTypes.Alpha;\r\n }\r\n\r\n get isBeta(): boolean {\r\n return this.buildType === BuildTypes.Beta;\r\n }\r\n\r\n get isPatch(): boolean {\r\n return this.buildType === BuildTypes.Patch;\r\n }\r\n\r\n get isTuanjie(): boolean {\r\n return (\r\n this.buildType === BuildTypes.Tuanjie &&\r\n this.compareToTuple3([2022, 3, 2]) >= 0\r\n );\r\n }\r\n\r\n static tryParse(version: string): { success: boolean; value: UnityVersion | null } {\r\n try {\r\n return { success: true, value: new UnityVersion(version) };\r\n } catch {\r\n return { success: false, value: null };\r\n }\r\n }\r\n\r\n compareTo(other: UnityVersion | VersionTuple2 | VersionTuple3): number {\r\n if (other instanceof UnityVersion) {\r\n return this.compareToTuple3([other.major, other.minor, other.patch]);\r\n }\r\n\r\n if (other.length === 2) {\r\n return this.compareToTuple2(other);\r\n }\r\n\r\n return this.compareToTuple3(other);\r\n }\r\n\r\n private compareToTuple2(other: VersionTuple2): number {\r\n const [om, on] = other;\r\n\r\n if (this.major !== om) return this.major - om;\r\n if (this.minor !== on) return this.minor - on;\r\n return 0;\r\n }\r\n\r\n private compareToTuple3(other: VersionTuple3): number {\r\n const [om, on, op] = other;\r\n\r\n const r = this.compareToTuple2([om, on]);\r\n if (r !== 0) return r;\r\n\r\n return this.patch - op;\r\n }\r\n\r\n equals(other: UnityVersion): boolean {\r\n return (\r\n this.major === other.major &&\r\n this.minor === other.minor &&\r\n this.patch === other.patch\r\n );\r\n }\r\n\r\n getHashCode(): number {\r\n let result = this.major * 31;\r\n result = result * 31 + this.minor;\r\n result = result * 31 + this.patch;\r\n result = result * 31 + this.build;\r\n return result;\r\n }\r\n\r\n toTuple(): [number, number, number] {\r\n return [this.major, this.minor, this.patch];\r\n }\r\n\r\n toArray(): number[] {\r\n return [this.major, this.minor, this.patch];\r\n }\r\n\r\n toString(): string {\r\n return this.fullVersion;\r\n }\r\n}\r\n\r\nexport function isInRange(\r\n ver: UnityVersion,\r\n lower: UnityVersion | number | VersionTuple2 | VersionTuple3,\r\n upper: UnityVersion | number | VersionTuple2 | VersionTuple3\r\n): boolean {\r\n const geLower = compareLower(ver, lower) >= 0;\r\n const ltUpper = compareUpper(ver, upper) < 0;\r\n return geLower && ltUpper;\r\n}\r\n\r\nfunction compareLower(\r\n ver: UnityVersion,\r\n lower: UnityVersion | number | VersionTuple2 | VersionTuple3\r\n): number {\r\n if (lower instanceof UnityVersion) return ver.compareTo(lower);\r\n if (typeof lower === \"number\") return ver.major - lower;\r\n return ver.compareTo(lower);\r\n}\r\n\r\nfunction compareUpper(\r\n ver: UnityVersion,\r\n upper: UnityVersion | number | VersionTuple2 | VersionTuple3\r\n): number {\r\n if (upper instanceof UnityVersion) return ver.compareTo(upper);\r\n if (typeof upper === \"number\") return ver.major - upper;\r\n return ver.compareTo(upper);\r\n}","import { UnityVersion } from \"../../../Util/UnityVersions.js\";\r\nimport { ArchiveFlags } from \"../../../Enums/ArchiveFlags.js\"\r\nimport { FileReader } from \"../../../Util/FileReader.js\";\r\n\r\nexport class BundleHeader {\r\n public signature = \"\";\r\n public version = 0;\r\n public unityVersion = \"\";\r\n public unityRevision = new UnityVersion();\r\n public size = 0n;\r\n public compressedBlocksInfoSize = 0;\r\n public uncompressedBlocksInfoSize = 0;\r\n public flags: ArchiveFlags = ArchiveFlags.NotInitialized;\r\n\r\n public ReadHeader(reader: FileReader) {\r\n this.signature = reader.ReadStringToNull();\r\n this.version = reader.ReadUint32();\r\n this.unityVersion = reader.ReadStringToNull();\r\n this.unityRevision = new UnityVersion(reader.ReadStringToNull())\r\n }\r\n\r\n public ReadHeader2(reader: FileReader) {\r\n this.size = reader.ReadInt64();\r\n this.compressedBlocksInfoSize = reader.ReadUint32();\r\n this.uncompressedBlocksInfoSize = reader.ReadUint32();\r\n this.flags = reader.ReadUint32() as ArchiveFlags;\r\n if (this.signature != \"UnityFS\") {\r\n reader.ReadByte();\r\n }\r\n }\r\n}","import { EndianBinaryReader } from \"../../../Util/EndianBinaryReader.js\";\r\n\r\nexport class BundleNode {\r\n public offset = 0n;\r\n public size = 0n;\r\n public flags = 0;\r\n public path = \"\";\r\n\r\n constructor(reader?: EndianBinaryReader) {\r\n if (!reader) {\r\n return;\r\n }\r\n\r\n this.offset = reader.ReadInt64();\r\n this.size = reader.ReadInt64();\r\n this.flags = reader.ReadUint32();\r\n this.path = reader.ReadStringToNull();\r\n }\r\n}","import { StorageBlockFlags } from \"../../../Enums/StorageBlockFlags.js\";\r\nimport { EndianBinaryReader } from \"../../../Util/EndianBinaryReader.js\";\r\n\r\nexport class BundleStorageBlock {\r\n public compressedSize = 0;\r\n public uncompressedSize = 0;\r\n public flags: StorageBlockFlags = StorageBlockFlags.NotInitialized;\r\n\r\n constructor(reader?: EndianBinaryReader) {\r\n if (!reader) {\r\n return;\r\n }\r\n\r\n this.uncompressedSize = reader.ReadUint32();\r\n this.compressedSize = reader.ReadUint32();\r\n this.flags = reader.ReadUint16() as StorageBlockFlags;\r\n }\r\n}","import { EndianBinaryReader } from \"../Util/EndianBinaryReader.js\"\r\n\r\nexport class StreamFile {\r\n public path = \"\";\r\n public fileName = \"\";\r\n public stream: EndianBinaryReader;\r\n\r\n constructor(path: string, fileName: string, stream: EndianBinaryReader) {\r\n this.path = path;\r\n this.fileName = fileName;\r\n this.stream = stream;\r\n }\r\n}","// lz4.js - An implementation of Lz4 in plain JavaScript.\r\n//\r\n// TODO:\r\n// - Unify header parsing/writing.\r\n// - Support options (block size, checksums)\r\n// - Support streams\r\n// - Better error handling (handle bad offset, etc.)\r\n// - HC support (better search algorithm)\r\n// - Tests/benchmarking\r\n\r\nimport { hash as _hash } from './xxh32.js';\r\nimport { readU32, readU64, hashU32, writeU32 } from './util.js';\r\n\r\n// Constants\r\n// --\r\n\r\n// Compression format parameters/constants.\r\nvar minMatch = 4;\r\nvar minLength = 13;\r\nvar searchLimit = 5;\r\nvar skipTrigger = 6;\r\nvar hashSize = 1 << 16;\r\n\r\n// Token constants.\r\nvar mlBits = 4;\r\nvar mlMask = (1 << mlBits) - 1;\r\nvar runBits = 4;\r\nvar runMask = (1 << runBits) - 1;\r\n\r\n// Shared buffers\r\nvar blockBuf = makeBuffer(5 << 20);\r\nvar hashTable = makeHashTable();\r\n\r\n// Frame constants.\r\nvar magicNum = 0x184D2204;\r\n\r\n// Frame descriptor flags.\r\nvar fdContentChksum = 0x4;\r\nvar fdContentSize = 0x8;\r\nvar fdBlockChksum = 0x10;\r\n// var fdBlockIndep = 0x20;\r\nvar fdVersion = 0x40;\r\nvar fdVersionMask = 0xC0;\r\n\r\n// Block sizes.\r\nvar bsUncompressed = 0x80000000;\r\nvar bsDefault = 7;\r\nvar bsShift = 4;\r\nvar bsMask = 7;\r\nvar bsMap = {\r\n 4: 0x10000,\r\n 5: 0x40000,\r\n 6: 0x100000,\r\n 7: 0x400000\r\n};\r\n\r\n// Utility functions/primitives\r\n// --\r\n\r\n// Makes our hashtable. On older browsers, may return a plain array.\r\nfunction makeHashTable () {\r\n try {\r\n return new Uint32Array(hashSize);\r\n } catch (error) {\r\n var hashTable = new Array(hashSize);\r\n\r\n for (var i = 0; i < hashSize; i++) {\r\n hashTable[i] = 0;\r\n }\r\n\r\n return hashTable;\r\n }\r\n}\r\n\r\n// Clear hashtable.\r\nfunction clearHashTable (table) {\r\n for (var i = 0; i < hashSize; i++) {\r\n hashTable[i] = 0;\r\n }\r\n}\r\n\r\n// Makes a byte buffer. On older browsers, may return a plain array.\r\nfunction makeBuffer (size) {\r\n try {\r\n return new Uint8Array(size);\r\n } catch (error) {\r\n var buf = new Array(size);\r\n\r\n for (var i = 0; i < size; i++) {\r\n buf[i] = 0;\r\n }\r\n\r\n return buf;\r\n }\r\n}\r\n\r\nfunction sliceArray (array, start, end) {\r\n if (typeof array.buffer !== undefined) {\r\n if (Uint8Array.prototype.slice) {\r\n return array.slice(start, end);\r\n } else {\r\n // Uint8Array#slice polyfill.\r\n var len = array.length;\r\n\r\n // Calculate start.\r\n start = start | 0;\r\n start = (start < 0) ? Math.max(len + start, 0) : Math.min(start, len);\r\n\r\n // Calculate end.\r\n end = (end === undefined) ? len : end | 0;\r\n end = (end < 0) ? Math.max(len + end, 0) : Math.min(end, len);\r\n\r\n // Copy into new array.\r\n var arraySlice = new Uint8Array(end - start);\r\n for (var i = start, n = 0; i < end;) {\r\n arraySlice[n++] = array[i++];\r\n }\r\n\r\n return arraySlice;\r\n }\r\n } else {\r\n // Assume normal array.\r\n return array.slice(start, end);\r\n }\r\n}\r\n\r\n// Implementation\r\n// --\r\n\r\n// Calculates an upper bound for lz4 compression.\r\nexport function compressBound (n) {\r\n return (n + (n / 255) + 16) | 0;\r\n}\r\n\r\n// Calculates an upper bound for lz4 decompression, by reading the data.\r\nexport function decompressBound (src) {\r\n var sIndex = 0;\r\n\r\n // Read magic number\r\n if (readU32(src, sIndex) !== magicNum) {\r\n throw new Error('invalid magic number');\r\n }\r\n\r\n sIndex += 4;\r\n\r\n // Read descriptor\r\n var descriptor = src[sIndex++];\r\n\r\n // Check version\r\n if ((descriptor & fdVersionMask) !== fdVersion) {\r\n throw new Error('incompatible descriptor version ' + (descriptor & fdVersionMask));\r\n }\r\n\r\n // Read flags\r\n var useBlockSum = (descriptor & fdBlockChksum) !== 0;\r\n var useContentSize = (descriptor & fdContentSize) !== 0;\r\n\r\n // Read block size\r\n var bsIdx = (src[sIndex++] >> bsShift) & bsMask;\r\n\r\n if (bsMap[bsIdx] === undefined) {\r\n throw new Error('invalid block size ' + bsIdx);\r\n }\r\n\r\n var maxBlockSize = bsMap[bsIdx];\r\n\r\n // Get content size\r\n if (useContentSize) {\r\n return readU64(src, sIndex);\r\n }\r\n\r\n // Checksum\r\n sIndex++;\r\n\r\n // Read blocks.\r\n var maxSize = 0;\r\n while (true) {\r\n var blockSize = readU32(src, sIndex);\r\n sIndex += 4;\r\n\r\n if (blockSize & bsUncompressed) {\r\n blockSize &= ~bsUncompressed;\r\n maxSize += blockSize;\r\n } else if (blockSize > 0) {\r\n maxSize += maxBlockSize;\r\n }\r\n\r\n if (blockSize === 0) {\r\n return maxSize;\r\n }\r\n\r\n if (useBlockSum) {\r\n sIndex += 4;\r\n }\r\n\r\n sIndex += blockSize;\r\n }\r\n}\r\n\r\n// Creates a buffer of a given byte-size, falling back to plain arrays.\r\nconst _makeBuffer = makeBuffer;\r\nexport { _makeBuffer as makeBuffer };\r\n\r\n// Decompresses a block of Lz4.\r\nexport function decompressBlock (src, dst, sIndex, sLength, dIndex) {\r\n var mLength, mOffset, sEnd, n, i;\r\n var hasCopyWithin = dst.copyWithin !== undefined && dst.fill !== undefined;\r\n\r\n // Setup initial state.\r\n sEnd = sIndex + sLength;\r\n\r\n // Consume entire input block.\r\n while (sIndex < sEnd) {\r\n var token = src[sIndex++];\r\n\r\n // Copy literals.\r\n var literalCount = (token >> 4);\r\n if (literalCount > 0) {\r\n // Parse length.\r\n if (literalCount === 0xf) {\r\n while (true) {\r\n literalCount += src[sIndex];\r\n if (src[sIndex++] !== 0xff) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Copy literals\r\n for (n = sIndex + literalCount; sIndex < n;) {\r\n dst[dIndex++] = src[sIndex++];\r\n }\r\n }\r\n\r\n if (sIndex >= sEnd) {\r\n break;\r\n }\r\n\r\n // Copy match.\r\n mLength = (token & 0xf);\r\n\r\n // Parse offset.\r\n mOffset = src[sIndex++] | (src[sIndex++] << 8);\r\n\r\n // Parse length.\r\n if (mLength === 0xf) {\r\n while (true) {\r\n mLength += src[sIndex];\r\n if (src[sIndex++] !== 0xff) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n mLength += minMatch;\r\n\r\n // Copy match\r\n // prefer to use typedarray.copyWithin for larger matches\r\n // NOTE: copyWithin doesn't work as required by LZ4 for overlapping sequences\r\n // e.g. mOffset=1, mLength=30 (repeach char 30 times)\r\n // we special case the repeat char w/ array.fill\r\n if (hasCopyWithin && mOffset === 1) {\r\n dst.fill(dst[dIndex - 1] | 0, dIndex, dIndex + mLength);\r\n dIndex += mLength;\r\n } else if (hasCopyWithin && mOffset > mLength && mLength > 31) {\r\n dst.copyWithin(dIndex, dIndex - mOffset, dIndex - mOffset + mLength);\r\n dIndex += mLength;\r\n } else {\r\n for (i = dIndex - mOffset, n = i + mLength; i < n;) {\r\n dst[dIndex++] = dst[i++] | 0;\r\n }\r\n }\r\n }\r\n\r\n return dIndex;\r\n}\r\n\r\n// Compresses a block with Lz4.\r\nexport function compressBlock (src, dst, sIndex, sLength, hashTable) {\r\n var mIndex, mAnchor, mLength, mOffset, mStep;\r\n var literalCount, dIndex, sEnd, n;\r\n\r\n // Setup initial state.\r\n dIndex = 0;\r\n sEnd = sLength + sIndex;\r\n mAnchor = sIndex;\r\n\r\n // Process only if block is large enough.\r\n if (sLength >= minLength) {\r\n var searchMatchCount = (1 << skipTrigger) + 3;\r\n\r\n // Consume until last n literals (Lz4 spec limitation.)\r\n while (sIndex + minMatch < sEnd - searchLimit) {\r\n var seq = readU32(src, sIndex);\r\n var hash = hashU32(seq) >>> 0;\r\n\r\n // Crush hash to 16 bits.\r\n hash = ((hash >> 16) ^ hash) >>> 0 & 0xffff;\r\n\r\n // Look for a match in the hashtable. NOTE: remove one; see below.\r\n mIndex = hashTable[hash] - 1;\r\n\r\n // Put pos in hash table. NOTE: add one so that zero = invalid.\r\n hashTable[hash] = sIndex + 1;\r\n\r\n // Determine if there is a match (within range.)\r\n if (mIndex < 0 || ((sIndex - mIndex) >>> 16) > 0 || readU32(src, mIndex) !== seq) {\r\n mStep = searchMatchCount++ >> skipTrigger;\r\n sIndex += mStep;\r\n continue;\r\n }\r\n\r\n searchMatchCount = (1 << skipTrigger) + 3;\r\n\r\n // Calculate literal count and offset.\r\n literalCount = sIndex - mAnchor;\r\n mOffset = sIndex - mIndex;\r\n\r\n // We've already matched one word, so get that out of the way.\r\n sIndex += minMatch;\r\n mIndex += minMatch;\r\n\r\n // Determine match length.\r\n // N.B.: mLength does not include minMatch, Lz4 adds it back\r\n // in decoding.\r\n mLength = sIndex;\r\n while (sIndex < sEnd - searchLimit && src[sIndex] === src[mIndex]) {\r\n sIndex++;\r\n mIndex++;\r\n }\r\n mLength = sIndex - mLength;\r\n\r\n // Write token + literal count.\r\n var token = mLength < mlMask ? mLength : mlMask;\r\n if (literalCount >= runMask) {\r\n dst[dIndex++] = (runMask << mlBits) + token;\r\n for (n = literalCount - runMask; n >= 0xff; n -= 0xff) {\r\n dst[dIndex++] = 0xff;\r\n }\r\n dst[dIndex++] = n;\r\n } else {\r\n dst[dIndex++] = (literalCount << mlBits) + token;\r\n }\r\n\r\n // Write literals.\r\n for (var i = 0; i < literalCount; i++) {\r\n dst[dIndex++] = src[mAnchor + i];\r\n }\r\n\r\n // Write offset.\r\n dst[dIndex++] = mOffset;\r\n dst[dIndex++] = (mOffset >> 8);\r\n\r\n // Write match length.\r\n if (mLength >= mlMask) {\r\n for (n = mLength - mlMask; n >= 0xff; n -= 0xff) {\r\n dst[dIndex++] = 0xff;\r\n }\r\n dst[dIndex++] = n;\r\n }\r\n\r\n // Move the anchor.\r\n mAnchor = sIndex;\r\n }\r\n }\r\n\r\n // Nothing was encoded.\r\n if (mAnchor === 0) {\r\n return 0;\r\n }\r\n\r\n // Write remaining literals.\r\n // Write literal token+count.\r\n literalCount = sEnd - mAnchor;\r\n if (literalCount >= runMask) {\r\n dst[dIndex++] = (runMask << mlBits);\r\n for (n = literalCount - runMask; n >= 0xff; n -= 0xff) {\r\n dst[dIndex++] = 0xff;\r\n }\r\n dst[dIndex++] = n;\r\n } else {\r\n dst[dIndex++] = (literalCount << mlBits);\r\n }\r\n\r\n // Write literals.\r\n sIndex = mAnchor;\r\n while (sIndex < sEnd) {\r\n dst[dIndex++] = src[sIndex++];\r\n }\r\n\r\n return dIndex;\r\n}\r\n\r\n// Decompresses a frame of Lz4 data.\r\nexport function decompressFrame (src, dst) {\r\n var useBlockSum, useContentSum, useContentSize, descriptor;\r\n var sIndex = 0;\r\n var dIndex = 0;\r\n\r\n // Read magic number\r\n if (readU32(src, sIndex) !== magicNum) {\r\n throw new Error('invalid magic number');\r\n }\r\n\r\n sIndex += 4;\r\n\r\n // Read descriptor\r\n descriptor = src[sIndex++];\r\n\r\n // Check version\r\n if ((descriptor & fdVersionMask) !== fdVersion) {\r\n throw new Error('incompatible descriptor version');\r\n }\r\n\r\n // Read flags\r\n useBlockSum = (descriptor & fdBlockChksum) !== 0;\r\n useContentSum = (descriptor & fdContentChksum) !== 0;\r\n useContentSize = (descriptor & fdContentSize) !== 0;\r\n\r\n // Read block size\r\n var bsIdx = (src[sIndex++] >> bsShift) & bsMask;\r\n\r\n if (bsMap[bsIdx] === undefined) {\r\n throw new Error('invalid block size');\r\n }\r\n\r\n if (useContentSize) {\r\n // TODO: read content size\r\n sIndex += 8;\r\n }\r\n\r\n sIndex++;\r\n\r\n // Read blocks.\r\n while (true) {\r\n var compSize;\r\n\r\n compSize = readU32(src, sIndex);\r\n sIndex += 4;\r\n\r\n if (compSize === 0) {\r\n break;\r\n }\r\n\r\n if (useBlockSum) {\r\n // TODO: read block checksum\r\n sIndex += 4;\r\n }\r\n\r\n // Check if block is compressed\r\n if ((compSize & bsUncompressed) !== 0) {\r\n // Mask off the 'uncompressed' bit\r\n compSize &= ~bsUncompressed;\r\n\r\n // Copy uncompressed data into destination buffer.\r\n for (var j = 0; j < compSize; j++) {\r\n dst[dIndex++] = src[sIndex++];\r\n }\r\n } else {\r\n // Decompress into blockBuf\r\n dIndex = decompressBlock(src, dst, sIndex, compSize, dIndex);\r\n sIndex += compSize;\r\n }\r\n }\r\n\r\n if (useContentSum) {\r\n // TODO: read content checksum\r\n sIndex += 4;\r\n }\r\n\r\n return dIndex;\r\n}\r\n\r\n// Compresses data to an Lz4 frame.\r\nexport function compressFrame (src, dst) {\r\n var dIndex = 0;\r\n\r\n // Write magic number.\r\n writeU32(dst, dIndex, magicNum);\r\n dIndex += 4;\r\n\r\n // Descriptor flags.\r\n dst[dIndex++] = fdVersion;\r\n dst[dIndex++] = bsDefault << bsShift;\r\n\r\n // Descriptor checksum.\r\n dst[dIndex] = _hash(0, dst, 4, dIndex - 4) >> 8;\r\n dIndex++;\r\n\r\n // Write blocks.\r\n var maxBlockSize = bsMap[bsDefault];\r\n var remaining = src.length;\r\n var sIndex = 0;\r\n\r\n // Clear the hashtable.\r\n clearHashTable(hashTable);\r\n\r\n // Split input into blocks and write.\r\n while (remaining > 0) {\r\n var compSize = 0;\r\n var blockSize = remaining > maxBlockSize ? maxBlockSize : remaining;\r\n\r\n compSize = compressBlock(src, blockBuf, sIndex, blockSize, hashTable);\r\n\r\n if (compSize > blockSize || compSize === 0) {\r\n // Output uncompressed.\r\n writeU32(dst, dIndex, 0x80000000 | blockSize);\r\n dIndex += 4;\r\n\r\n for (var z = sIndex + blockSize; sIndex < z;) {\r\n dst[dIndex++] = src[sIndex++];\r\n }\r\n\r\n remaining -= blockSize;\r\n } else {\r\n // Output compressed.\r\n writeU32(dst, dIndex, compSize);\r\n dIndex += 4;\r\n\r\n for (var j = 0; j < compSize;) {\r\n dst[dIndex++] = blockBuf[j++];\r\n }\r\n\r\n sIndex += blockSize;\r\n remaining -= blockSize;\r\n }\r\n }\r\n\r\n // Write blank end block.\r\n writeU32(dst, dIndex, 0);\r\n dIndex += 4;\r\n\r\n return dIndex;\r\n}\r\n\r\n// Decompresses a buffer containing an Lz4 frame. maxSize is optional; if not\r\n// provided, a maximum size will be determined by examining the data. The\r\n// buffer returned will always be perfectly-sized.\r\nexport function decompress (src, maxSize) {\r\n var dst, size;\r\n\r\n if (maxSize === undefined) {\r\n maxSize = decompressBound(src);\r\n }\r\n dst = _makeBuffer(maxSize);\r\n size = decompressFrame(src, dst);\r\n\r\n if (size !== maxSize) {\r\n dst = sliceArray(dst, 0, size);\r\n }\r\n\r\n return dst;\r\n}\r\n\r\n// Compresses a buffer to an Lz4 frame. maxSize is optional; if not provided,\r\n// a buffer will be created based on the theoretical worst output size for a\r\n// given input size. The buffer returned will always be perfectly-sized.\r\nexport function compress (src, maxSize) {\r\n var dst, size;\r\n\r\n if (maxSize === undefined) {\r\n maxSize = compressBound(src.length);\r\n }\r\n\r\n dst = _makeBuffer(maxSize);\r\n size = compressFrame(src, dst);\r\n\r\n if (size !== maxSize) {\r\n dst = sliceArray(dst, 0, size);\r\n }\r\n\r\n return dst;\r\n}","/// © 2015 Nathan Rugg <nmrugg@gmail.com> | MIT\r\n/// See LICENSE for more details.\r\n\r\n/** xs */\r\n///NOTE: This is the master file that is used to generate lzma-c.js and lzma-d.js.\r\n/// Comments are used to determine which parts are to be removed.\r\n///\r\n/// cs-ce (compression start-end)\r\n/// ds-de (decompression start-end)\r\n/// xs-xe (only in this file start-end)\r\n/// co (compression only)\r\n/// do (decompression only)\r\n/** xe */\r\n\r\n// @ts-nocheck\r\n\r\n// Type definitions\r\ntype LongLit = [number, number]\r\ntype CompressMode = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\r\ntype OnFinishCallback = (\r\n result: Uint8Array | string | null,\r\n error: Error | null,\r\n) => void\r\ntype OnProgressCallback = (percent: number) => void\r\n\r\nconst action_compress = 1\r\nconst action_decompress = 2\r\nconst action_progress = 3\r\n\r\nconst wait = setTimeout\r\nconst __4294967296 = 4294967296\r\nconst N1_longLit: LongLit = [4294967295, -__4294967296]\r\n/** cs */\r\nconst MIN_VALUE: LongLit = [0, -9223372036854775808]\r\n/** ce */\r\nconst P0_longLit: LongLit = [0, 0]\r\nconst P1_longLit: LongLit = [1, 0]\r\n\r\nfunction update_progress(percent: number, cbn: number): void {\r\n // Only call postMessage if we're in a Worker context\r\n if (\r\n typeof cbn !== 'undefined' &&\r\n typeof self !== 'undefined' &&\r\n typeof self.postMessage === 'function'\r\n ) {\r\n self.postMessage({\r\n action: action_progress,\r\n cbn: cbn,\r\n result: percent,\r\n })\r\n }\r\n}\r\n\r\nfunction initDim(len: number): any[] {\r\n return new Array(len)\r\n}\r\n\r\n/**\r\n * Utility class for 64-bit integer operations using [low, high] tuple representation\r\n */\r\nclass LongInt {\r\n static add(a: LongLit, b: LongLit): LongLit {\r\n return LongInt.create(a[0] + b[0], a[1] + b[1])\r\n }\r\n\r\n /** cs */\r\n static and(a: LongLit, b: LongLit): LongLit {\r\n return LongInt.makeFromBits(\r\n ~~Math.max(Math.min(a[1] / __4294967296, 2147483647), -2147483648) &\r\n ~~Math.max(Math.min(b[1] / __4294967296, 2147483647), -2147483648),\r\n LongInt.lowBits(a) & LongInt.lowBits(b),\r\n )\r\n }\r\n /** ce */\r\n\r\n static compare(a: LongLit, b: LongLit): number {\r\n if (a[0] == b[0] && a[1] == b[1]) {\r\n return 0\r\n }\r\n const nega = a[1] < 0\r\n const negb = b[1] < 0\r\n if (nega && !negb) {\r\n return -1\r\n }\r\n if (!nega && negb) {\r\n return 1\r\n }\r\n if (LongInt.sub(a, b)[1] < 0) {\r\n return -1\r\n }\r\n return 1\r\n }\r\n\r\n static create(valueLow: number, valueHigh: number): LongLit {\r\n valueHigh %= 1.8446744073709552e19\r\n valueLow %= 1.8446744073709552e19\r\n let diffHigh = valueHigh % __4294967296\r\n let diffLow = Math.floor(valueLow / __4294967296) * __4294967296\r\n valueHigh = valueHigh - diffHigh + diffLow\r\n valueLow = valueLow - diffLow + diffHigh\r\n while (valueLow < 0) {\r\n valueLow += __4294967296\r\n valueHigh -= __4294967296\r\n }\r\n while (valueLow > 4294967295) {\r\n valueLow -= __4294967296\r\n valueHigh += __4294967296\r\n }\r\n valueHigh = valueHigh % 1.8446744073709552e19\r\n while (valueHigh > 9223372032559808512) {\r\n valueHigh -= 1.8446744073709552e19\r\n }\r\n while (valueHigh < -9223372036854775808) {\r\n valueHigh += 1.8446744073709552e19\r\n }\r\n return [valueLow, valueHigh]\r\n }\r\n\r\n /** cs */\r\n static eq(a: LongLit, b: LongLit): boolean {\r\n return a[0] == b[0] && a[1] == b[1]\r\n }\r\n /** ce */\r\n\r\n static fromInt(value: number): LongLit {\r\n if (value >= 0) {\r\n return [value, 0]\r\n } else {\r\n return [value + __4294967296, -__4294967296]\r\n }\r\n }\r\n\r\n static lowBits(a: LongLit): number {\r\n if (a[0] >= 2147483648) {\r\n return ~~Math.max(Math.min(a[0] - __4294967296, 2147483647), -2147483648)\r\n } else {\r\n return ~~Math.max(Math.min(a[0], 2147483647), -2147483648)\r\n }\r\n }\r\n\r\n /** cs */\r\n static makeFromBits(highBits: number, lowBits: number): LongLit {\r\n const high = highBits * __4294967296\r\n let low = lowBits\r\n if (lowBits < 0) {\r\n low += __4294967296\r\n }\r\n return [low, high]\r\n }\r\n\r\n private static pwrAsDouble(n: number): number {\r\n if (n <= 30) {\r\n return 1 << n\r\n } else {\r\n return LongInt.pwrAsDouble(30) * LongInt.pwrAsDouble(n - 30)\r\n }\r\n }\r\n\r\n static shl(a: LongLit, n: number): LongLit {\r\n n &= 63\r\n if (LongInt.eq(a, MIN_VALUE)) {\r\n if (!n) {\r\n return a\r\n }\r\n return P0_longLit\r\n }\r\n if (a[1] < 0) {\r\n throw new Error('Neg')\r\n }\r\n const twoToN = LongInt.pwrAsDouble(n)\r\n let newHigh = (a[1] * twoToN) % 1.8446744073709552e19\r\n let newLow = a[0] * twoToN\r\n const diff = newLow - (newLow % __4294967296)\r\n newHigh += diff\r\n newLow -= diff\r\n if (newHigh >= 9223372036854775807) {\r\n newHigh -= 1.8446744073709552e19\r\n }\r\n return [newLow, newHigh]\r\n }\r\n\r\n static shr(a: LongLit, n: number): LongLit {\r\n n &= 63\r\n const shiftFact = LongInt.pwrAsDouble(n)\r\n return LongInt.create(Math.floor(a[0] / shiftFact), a[1] / shiftFact)\r\n }\r\n\r\n static shru(a: LongLit, n: number): LongLit {\r\n n &= 63\r\n let sr = LongInt.shr(a, n)\r\n if (a[1] < 0) {\r\n sr = LongInt.add(sr, LongInt.shl([2, 0], 63 - n))\r\n }\r\n return sr\r\n }\r\n /** ce */\r\n\r\n static sub(a: LongLit, b: LongLit): LongLit {\r\n return LongInt.create(a[0] - b[0], a[1] - b[1])\r\n }\r\n\r\n static toDouble(a: LongLit): number {\r\n return a[1] + a[0]\r\n }\r\n}\r\n\r\n// Legacy function wrappers for compatibility during refactoring\r\nfunction add(a: LongLit, b: LongLit): LongLit {\r\n return LongInt.add(a, b)\r\n}\r\n/** cs */\r\nfunction and(a: LongLit, b: LongLit): LongLit {\r\n return LongInt.and(a, b)\r\n}\r\n/** ce */\r\nfunction compare(a: LongLit, b: LongLit): number {\r\n return LongInt.compare(a, b)\r\n}\r\n/** cs */\r\nfunction eq(a: LongLit, b: LongLit): boolean {\r\n return LongInt.eq(a, b)\r\n}\r\n/** ce */\r\nfunction fromInt(value: number): LongLit {\r\n return LongInt.fromInt(value)\r\n}\r\nfunction lowBits_0(a: LongLit): number {\r\n return LongInt.lowBits(a)\r\n}\r\n/** cs */\r\nfunction shl(a: LongLit, n: number): LongLit {\r\n return LongInt.shl(a, n)\r\n}\r\nfunction shr(a: LongLit, n: number): LongLit {\r\n return LongInt.shr(a, n)\r\n}\r\nfunction shru(a: LongLit, n: number): LongLit {\r\n return LongInt.shru(a, n)\r\n}\r\n/** ce */\r\nfunction sub(a: LongLit, b: LongLit): LongLit {\r\n return LongInt.sub(a, b)\r\n}\r\nfunction toDouble(a: LongLit): number {\r\n return LongInt.toDouble(a)\r\n}\r\n\r\n/**\r\n * Simple byte array input stream\r\n */\r\nclass ByteArrayInputStream {\r\n buf: any[]\r\n pos: number\r\n count: number\r\n\r\n constructor(buf: any[]) {\r\n this.buf = buf\r\n this.pos = 0\r\n this.count = buf.length\r\n }\r\n\r\n read(): number {\r\n if (this.pos >= this.count) return -1\r\n return this.buf[this.pos++] & 255\r\n }\r\n\r\n readBytes(buf: any[], off: number, len: number): number {\r\n if (this.pos >= this.count) return -1\r\n len = Math.min(len, this.count - this.pos)\r\n arraycopy(this.buf, this.pos, buf, off, len)\r\n this.pos += len\r\n return len\r\n }\r\n}\r\n\r\n/**\r\n * Simple byte array output stream\r\n */\r\nclass ByteArrayOutputStream {\r\n buf: any[]\r\n count: number\r\n\r\n constructor() {\r\n this.buf = new Array(32)\r\n this.count = 0\r\n }\r\n\r\n toByteArray(): Uint8Array {\r\n const data = this.buf.slice(0, this.count)\r\n return new Uint8Array(data)\r\n }\r\n\r\n writeByte(b: number): void {\r\n this.buf[this.count++] = (b << 24) >> 24\r\n }\r\n\r\n writeBytes(buf: any[], off: number, len: number): void {\r\n arraycopy(buf, off, this.buf, this.count, len)\r\n this.count += len\r\n }\r\n}\r\n\r\n// Legacy function wrappers for compatibility during refactoring\r\nfunction $ByteArrayInputStream(this$static: any, buf: any[]): any {\r\n const stream = new ByteArrayInputStream(buf)\r\n this$static.buf = stream.buf\r\n this$static.pos = stream.pos\r\n this$static.count = stream.count\r\n this$static.read = () => stream.read()\r\n this$static.readBytes = (b: any[], o: number, l: number) =>\r\n stream.readBytes(b, o, l)\r\n return this$static\r\n}\r\n\r\nfunction $read(this$static: any): number {\r\n if (this$static.pos >= this$static.count) return -1\r\n return this$static.buf[this$static.pos++] & 255\r\n}\r\n\r\nfunction $read_0(\r\n this$static: any,\r\n buf: any[],\r\n off: number,\r\n len: number,\r\n): number {\r\n if (this$static.pos >= this$static.count) return -1\r\n len = Math.min(len, this$static.count - this$static.pos)\r\n arraycopy(this$static.buf, this$static.pos, buf, off, len)\r\n this$static.pos += len\r\n return len\r\n}\r\n\r\nfunction $ByteArrayOutputStream(): ByteArrayOutputStream {\r\n return new ByteArrayOutputStream()\r\n}\r\n\r\nfunction $toByteArray(this$static: ByteArrayOutputStream): Uint8Array {\r\n return this$static.toByteArray()\r\n}\r\n\r\nfunction $write(this$static: ByteArrayOutputStream, b: number): void {\r\n this$static.writeByte(b)\r\n}\r\n\r\nfunction $write_0(\r\n this$static: ByteArrayOutputStream,\r\n buf: any[],\r\n off: number,\r\n len: number,\r\n): void {\r\n this$static.writeBytes(buf, off, len)\r\n}\r\n\r\n/** cs */\r\nfunction $getChars(\r\n this$static: string,\r\n srcBegin: number,\r\n srcEnd: number,\r\n dst: any[],\r\n dstBegin: number,\r\n): void {\r\n for (let srcIdx = srcBegin; srcIdx < srcEnd; ++srcIdx) {\r\n dst[dstBegin++] = this$static.charCodeAt(srcIdx)\r\n }\r\n}\r\n/** ce */\r\n\r\nfunction arraycopy(\r\n src: any[],\r\n srcOfs: number,\r\n dest: any[],\r\n destOfs: number,\r\n len: number,\r\n): void {\r\n for (let i = 0; i < len; ++i) {\r\n dest[destOfs + i] = src[srcOfs + i]\r\n }\r\n}\r\n\r\n/** cs */\r\nfunction $configure(this$static, encoder) {\r\n $SetDictionarySize_0(encoder, 1 << this$static.s)\r\n encoder._numFastBytes = this$static.f\r\n $SetMatchFinder(encoder, this$static.m)\r\n\r\n /// lc is always 3\r\n /// lp is always 0\r\n /// pb is always 2\r\n encoder._numLiteralPosStateBits = 0\r\n encoder._numLiteralContextBits = 3\r\n encoder._posStateBits = 2\r\n ///this$static._posStateMask = (1 << pb) - 1;\r\n encoder._posStateMask = 3\r\n}\r\n\r\nfunction $init(this$static, input, output, length_0, mode) {\r\n var encoder, i\r\n if (compare(length_0, N1_longLit) < 0)\r\n throw new Error('invalid length ' + length_0)\r\n this$static.length_0 = length_0\r\n encoder = $Encoder({})\r\n $configure(mode, encoder)\r\n //encoder._writeEndMark = typeof LZMA.disableEndMark == \"undefined\";\r\n $WriteCoderProperties(encoder, output)\r\n for (i = 0; i < 64; i += 8) $write(output, lowBits_0(shr(length_0, i)) & 255)\r\n this$static.chunker =\r\n ((encoder._needReleaseMFStream = 0),\r\n ((encoder._inStream = input),\r\n (encoder._finished = 0),\r\n $Create_2(encoder),\r\n (encoder._rangeEncoder.Stream = output),\r\n $Init_4(encoder),\r\n $FillDistancesPrices(encoder),\r\n $FillAlignPrices(encoder),\r\n (encoder._lenEncoder._tableSize = encoder._numFastBytes + 1 - 2),\r\n $UpdateTables(encoder._lenEncoder, 1 << encoder._posStateBits),\r\n (encoder._repMatchLenEncoder._tableSize = encoder._numFastBytes + 1 - 2),\r\n $UpdateTables(encoder._repMatchLenEncoder, 1 << encoder._posStateBits),\r\n (encoder.nowPos64 = P0_longLit),\r\n undefined),\r\n $Chunker_0({}, encoder))\r\n}\r\n\r\nfunction $LZMAByteArrayCompressor(this$static, data, mode) {\r\n this$static.output = $ByteArrayOutputStream()\r\n $init(\r\n this$static,\r\n $ByteArrayInputStream({}, data),\r\n this$static.output,\r\n fromInt(data.length),\r\n mode,\r\n )\r\n return this$static\r\n}\r\n/** ce */\r\n\r\n/** ds */\r\nfunction $init_0(this$static, input, output) {\r\n var decoder,\r\n hex_length = '',\r\n i,\r\n properties: any[] = [],\r\n r,\r\n tmp_length\r\n\r\n for (i = 0; i < 5; ++i) {\r\n r = $read(input)\r\n if (r == -1) throw new Error('truncated input')\r\n properties[i] = (r << 24) >> 24\r\n }\r\n\r\n decoder = $Decoder({})\r\n if (!$SetDecoderProperties(decoder, properties)) {\r\n throw new Error('corrupted input')\r\n }\r\n for (i = 0; i < 64; i += 8) {\r\n r = $read(input)\r\n if (r == -1) throw new Error('truncated input')\r\n r = r.toString(16)\r\n if (r.length == 1) r = '0' + r\r\n hex_length = r + '' + hex_length\r\n }\r\n\r\n /// Was the length set in the header (if it was compressed from a stream, the length is all f\"s).\r\n if (/^0+$|^f+$/i.test(hex_length)) {\r\n /// The length is unknown, so set to -1.\r\n this$static.length_0 = N1_longLit\r\n } else {\r\n ///NOTE: If there is a problem with the decoder because of the length, you can always set the length to -1 (N1_longLit) which means unknown.\r\n tmp_length = parseInt(hex_length, 16)\r\n /// If the length is too long to handle, just set it to unknown.\r\n if (tmp_length > 4294967295) {\r\n this$static.length_0 = N1_longLit\r\n } else {\r\n this$static.length_0 = fromInt(tmp_length)\r\n }\r\n }\r\n\r\n this$static.chunker = $CodeInChunks(\r\n decoder,\r\n input,\r\n output,\r\n this$static.length_0,\r\n )\r\n}\r\n\r\nfunction $LZMAByteArrayDecompressor(this$static, data) {\r\n this$static.output = $ByteArrayOutputStream()\r\n $init_0(this$static, $ByteArrayInputStream({}, data), this$static.output)\r\n return this$static\r\n}\r\n/** de */\r\n/** cs */\r\nfunction $Create_4(this$static, keepSizeBefore, keepSizeAfter, keepSizeReserv) {\r\n var blockSize\r\n this$static._keepSizeBefore = keepSizeBefore\r\n this$static._keepSizeAfter = keepSizeAfter\r\n blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv\r\n if (this$static._bufferBase == null || this$static._blockSize != blockSize) {\r\n this$static._bufferBase = null\r\n this$static._blockSize = blockSize\r\n this$static._bufferBase = initDim(this$static._blockSize)\r\n }\r\n this$static._pointerToLastSafePosition =\r\n this$static._blockSize - keepSizeAfter\r\n}\r\n\r\nfunction $GetIndexByte(this$static, index) {\r\n return this$static._bufferBase[\r\n this$static._bufferOffset + this$static._pos + index\r\n ]\r\n}\r\n\r\nfunction $GetMatchLen(this$static, index, distance, limit) {\r\n var i, pby\r\n if (this$static._streamEndWasReached) {\r\n if (this$static._pos + index + limit > this$static._streamPos) {\r\n limit = this$static._streamPos - (this$static._pos + index)\r\n }\r\n }\r\n ++distance\r\n pby = this$static._bufferOffset + this$static._pos + index\r\n for (\r\n i = 0;\r\n i < limit &&\r\n this$static._bufferBase[pby + i] ==\r\n this$static._bufferBase[pby + i - distance];\r\n ++i\r\n ) {\r\n //\r\n }\r\n return i\r\n}\r\n\r\nfunction $GetNumAvailableBytes(this$static) {\r\n return this$static._streamPos - this$static._pos\r\n}\r\n\r\nfunction $MoveBlock(this$static) {\r\n var i, numBytes, offset\r\n offset =\r\n this$static._bufferOffset + this$static._pos - this$static._keepSizeBefore\r\n if (offset > 0) {\r\n --offset\r\n }\r\n numBytes = this$static._bufferOffset + this$static._streamPos - offset\r\n for (i = 0; i < numBytes; ++i) {\r\n this$static._bufferBase[i] = this$static._bufferBase[offset + i]\r\n }\r\n this$static._bufferOffset -= offset\r\n}\r\n\r\nfunction $MovePos_1(this$static) {\r\n var pointerToPostion\r\n this$static._pos += 1\r\n if (this$static._pos > this$static._posLimit) {\r\n pointerToPostion = this$static._bufferOffset + this$static._pos\r\n if (pointerToPostion > this$static._pointerToLastSafePosition) {\r\n $MoveBlock(this$static)\r\n }\r\n $ReadBlock(this$static)\r\n }\r\n}\r\n\r\nfunction $ReadBlock(this$static) {\r\n var numReadBytes, pointerToPostion, size\r\n if (this$static._streamEndWasReached) return\r\n\r\n while (true) {\r\n size =\r\n -this$static._bufferOffset +\r\n this$static._blockSize -\r\n this$static._streamPos\r\n if (!size) return\r\n numReadBytes = $read_0(\r\n this$static._stream,\r\n this$static._bufferBase,\r\n this$static._bufferOffset + this$static._streamPos,\r\n size,\r\n )\r\n if (numReadBytes == -1) {\r\n this$static._posLimit = this$static._streamPos\r\n pointerToPostion = this$static._bufferOffset + this$static._posLimit\r\n if (pointerToPostion > this$static._pointerToLastSafePosition) {\r\n this$static._posLimit =\r\n this$static._pointerToLastSafePosition - this$static._bufferOffset\r\n }\r\n this$static._streamEndWasReached = 1\r\n return\r\n }\r\n this$static._streamPos += numReadBytes\r\n if (\r\n this$static._streamPos >=\r\n this$static._pos + this$static._keepSizeAfter\r\n ) {\r\n this$static._posLimit =\r\n this$static._streamPos - this$static._keepSizeAfter\r\n }\r\n }\r\n}\r\n\r\nfunction $ReduceOffsets(this$static, subValue) {\r\n this$static._bufferOffset += subValue\r\n this$static._posLimit -= subValue\r\n this$static._pos -= subValue\r\n this$static._streamPos -= subValue\r\n}\r\n\r\n/**\r\n * CRC32 lookup table for hash calculations\r\n */\r\nclass CrcTableClass {\r\n static readonly table: number[] = (() => {\r\n const table: number[] = []\r\n for (let i = 0; i < 256; ++i) {\r\n let r = i\r\n for (let j = 0; j < 8; ++j) {\r\n if ((r & 1) != 0) {\r\n r >>>= 1\r\n r ^= -306674912\r\n } else {\r\n r >>>= 1\r\n }\r\n }\r\n table[i] = r\r\n }\r\n return table\r\n })()\r\n}\r\n\r\nconst CrcTable = CrcTableClass.table\r\n\r\nfunction $Create_3(\r\n this$static,\r\n historySize,\r\n keepAddBufferBefore,\r\n matchMaxLen,\r\n keepAddBufferAfter,\r\n) {\r\n var cyclicBufferSize, hs, windowReservSize\r\n if (historySize < 1073741567) {\r\n this$static._cutValue = 16 + (matchMaxLen >> 1)\r\n windowReservSize =\r\n ~~(\r\n (historySize + keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) /\r\n 2\r\n ) + 256\r\n $Create_4(\r\n this$static,\r\n historySize + keepAddBufferBefore,\r\n matchMaxLen + keepAddBufferAfter,\r\n windowReservSize,\r\n )\r\n this$static._matchMaxLen = matchMaxLen\r\n cyclicBufferSize = historySize + 1\r\n if (this$static._cyclicBufferSize != cyclicBufferSize) {\r\n this$static._son = initDim(\r\n (this$static._cyclicBufferSize = cyclicBufferSize) * 2,\r\n )\r\n }\r\n\r\n hs = 65536\r\n if (this$static.HASH_ARRAY) {\r\n hs = historySize - 1\r\n hs |= hs >> 1\r\n hs |= hs >> 2\r\n hs |= hs >> 4\r\n hs |= hs >> 8\r\n hs >>= 1\r\n hs |= 65535\r\n if (hs > 16777216) hs >>= 1\r\n this$static._hashMask = hs\r\n hs += 1\r\n hs += this$static.kFixHashSize\r\n }\r\n\r\n if (hs != this$static._hashSizeSum) {\r\n this$static._hash = initDim((this$static._hashSizeSum = hs))\r\n }\r\n }\r\n}\r\n\r\nfunction $GetMatches(this$static, distances) {\r\n var count,\r\n cur,\r\n curMatch,\r\n curMatch2,\r\n curMatch3,\r\n cyclicPos,\r\n delta,\r\n hash2Value,\r\n hash3Value,\r\n hashValue,\r\n len,\r\n len0,\r\n len1,\r\n lenLimit,\r\n matchMinPos,\r\n maxLen,\r\n offset,\r\n pby1,\r\n ptr0,\r\n ptr1,\r\n temp\r\n if (this$static._pos + this$static._matchMaxLen <= this$static._streamPos) {\r\n lenLimit = this$static._matchMaxLen\r\n } else {\r\n lenLimit = this$static._streamPos - this$static._pos\r\n if (lenLimit < this$static.kMinMatchCheck) {\r\n $MovePos_0(this$static)\r\n return 0\r\n }\r\n }\r\n offset = 0\r\n matchMinPos =\r\n this$static._pos > this$static._cyclicBufferSize\r\n ? this$static._pos - this$static._cyclicBufferSize\r\n : 0\r\n cur = this$static._bufferOffset + this$static._pos\r\n maxLen = 1\r\n hash2Value = 0\r\n hash3Value = 0\r\n if (this$static.HASH_ARRAY) {\r\n temp =\r\n CrcTable[this$static._bufferBase[cur] & 255] ^\r\n (this$static._bufferBase[cur + 1] & 255)\r\n hash2Value = temp & 1023\r\n temp ^= (this$static._bufferBase[cur + 2] & 255) << 8\r\n hash3Value = temp & 65535\r\n hashValue =\r\n (temp ^ (CrcTable[this$static._bufferBase[cur + 3] & 255] << 5)) &\r\n this$static._hashMask\r\n } else {\r\n hashValue =\r\n (this$static._bufferBase[cur] & 255) ^\r\n ((this$static._bufferBase[cur + 1] & 255) << 8)\r\n }\r\n\r\n curMatch = this$static._hash[this$static.kFixHashSize + hashValue] || 0\r\n if (this$static.HASH_ARRAY) {\r\n curMatch2 = this$static._hash[hash2Value] || 0\r\n curMatch3 = this$static._hash[1024 + hash3Value] || 0\r\n this$static._hash[hash2Value] = this$static._pos\r\n this$static._hash[1024 + hash3Value] = this$static._pos\r\n if (curMatch2 > matchMinPos) {\r\n if (\r\n this$static._bufferBase[this$static._bufferOffset + curMatch2] ==\r\n this$static._bufferBase[cur]\r\n ) {\r\n distances[offset++] = maxLen = 2\r\n distances[offset++] = this$static._pos - curMatch2 - 1\r\n }\r\n }\r\n if (curMatch3 > matchMinPos) {\r\n if (\r\n this$static._bufferBase[this$static._bufferOffset + curMatch3] ==\r\n this$static._bufferBase[cur]\r\n ) {\r\n if (curMatch3 == curMatch2) {\r\n offset -= 2\r\n }\r\n distances[offset++] = maxLen = 3\r\n distances[offset++] = this$static._pos - curMatch3 - 1\r\n curMatch2 = curMatch3\r\n }\r\n }\r\n if (offset != 0 && curMatch2 == curMatch) {\r\n offset -= 2\r\n maxLen = 1\r\n }\r\n }\r\n this$static._hash[this$static.kFixHashSize + hashValue] = this$static._pos\r\n ptr0 = (this$static._cyclicBufferPos << 1) + 1\r\n ptr1 = this$static._cyclicBufferPos << 1\r\n len0 = len1 = this$static.kNumHashDirectBytes\r\n if (this$static.kNumHashDirectBytes != 0) {\r\n if (curMatch > matchMinPos) {\r\n if (\r\n this$static._bufferBase[\r\n this$static._bufferOffset + curMatch + this$static.kNumHashDirectBytes\r\n ] != this$static._bufferBase[cur + this$static.kNumHashDirectBytes]\r\n ) {\r\n distances[offset++] = maxLen = this$static.kNumHashDirectBytes\r\n distances[offset++] = this$static._pos - curMatch - 1\r\n }\r\n }\r\n }\r\n count = this$static._cutValue\r\n\r\n while (true) {\r\n if (curMatch <= matchMinPos || count == 0) {\r\n count -= 1\r\n this$static._son[ptr0] = this$static._son[ptr1] = 0\r\n break\r\n }\r\n delta = this$static._pos - curMatch\r\n cyclicPos =\r\n (delta <= this$static._cyclicBufferPos\r\n ? this$static._cyclicBufferPos - delta\r\n : this$static._cyclicBufferPos -\r\n delta +\r\n this$static._cyclicBufferSize) << 1\r\n pby1 = this$static._bufferOffset + curMatch\r\n len = len0 < len1 ? len0 : len1\r\n if (\r\n this$static._bufferBase[pby1 + len] == this$static._bufferBase[cur + len]\r\n ) {\r\n while ((len += 1) != lenLimit) {\r\n if (\r\n this$static._bufferBase[pby1 + len] !=\r\n this$static._bufferBase[cur + len]\r\n ) {\r\n break\r\n }\r\n }\r\n if (maxLen < len) {\r\n distances[offset++] = maxLen = len\r\n distances[offset++] = delta - 1\r\n if (len == lenLimit) {\r\n this$static._son[ptr1] = this$static._son[cyclicPos]\r\n this$static._son[ptr0] = this$static._son[cyclicPos + 1]\r\n break\r\n }\r\n }\r\n }\r\n if (\r\n (this$static._bufferBase[pby1 + len] & 255) <\r\n (this$static._bufferBase[cur + len] & 255)\r\n ) {\r\n this$static._son[ptr1] = curMatch\r\n ptr1 = cyclicPos + 1\r\n curMatch = this$static._son[ptr1]\r\n len1 = len\r\n } else {\r\n this$static._son[ptr0] = curMatch\r\n ptr0 = cyclicPos\r\n curMatch = this$static._son[ptr0]\r\n len0 = len\r\n }\r\n }\r\n $MovePos_0(this$static)\r\n return offset\r\n}\r\n\r\nfunction $Init_5(this$static) {\r\n this$static._bufferOffset = 0\r\n this$static._pos = 0\r\n this$static._streamPos = 0\r\n this$static._streamEndWasReached = 0\r\n $ReadBlock(this$static)\r\n this$static._cyclicBufferPos = 0\r\n $ReduceOffsets(this$static, -1)\r\n}\r\n\r\nfunction $MovePos_0(this$static) {\r\n var subValue\r\n if ((this$static._cyclicBufferPos += 1) >= this$static._cyclicBufferSize) {\r\n this$static._cyclicBufferPos = 0\r\n }\r\n $MovePos_1(this$static)\r\n if (this$static._pos == 1073741823) {\r\n subValue = this$static._pos - this$static._cyclicBufferSize\r\n $NormalizeLinks(\r\n this$static._son,\r\n this$static._cyclicBufferSize * 2,\r\n subValue,\r\n )\r\n $NormalizeLinks(this$static._hash, this$static._hashSizeSum, subValue)\r\n $ReduceOffsets(this$static, subValue)\r\n }\r\n}\r\n\r\n///NOTE: This is only called after reading one whole gigabyte.\r\nfunction $NormalizeLinks(items, numItems, subValue) {\r\n var i, value\r\n for (i = 0; i < numItems; ++i) {\r\n value = items[i] || 0\r\n if (value <= subValue) {\r\n value = 0\r\n } else {\r\n value -= subValue\r\n }\r\n items[i] = value\r\n }\r\n}\r\n\r\nfunction $SetType(this$static, numHashBytes) {\r\n this$static.HASH_ARRAY = numHashBytes > 2\r\n if (this$static.HASH_ARRAY) {\r\n this$static.kNumHashDirectBytes = 0\r\n this$static.kMinMatchCheck = 4\r\n this$static.kFixHashSize = 66560\r\n } else {\r\n this$static.kNumHashDirectBytes = 2\r\n this$static.kMinMatchCheck = 3\r\n this$static.kFixHashSize = 0\r\n }\r\n}\r\n\r\nfunction $Skip(this$static, num) {\r\n var count,\r\n cur,\r\n curMatch,\r\n cyclicPos,\r\n delta,\r\n hash2Value,\r\n hash3Value,\r\n hashValue,\r\n len,\r\n len0,\r\n len1,\r\n lenLimit,\r\n matchMinPos,\r\n pby1,\r\n ptr0,\r\n ptr1,\r\n temp\r\n do {\r\n if (this$static._pos + this$static._matchMaxLen <= this$static._streamPos) {\r\n lenLimit = this$static._matchMaxLen\r\n } else {\r\n lenLimit = this$static._streamPos - this$static._pos\r\n if (lenLimit < this$static.kMinMatchCheck) {\r\n $MovePos_0(this$static)\r\n continue\r\n }\r\n }\r\n matchMinPos =\r\n this$static._pos > this$static._cyclicBufferSize\r\n ? this$static._pos - this$static._cyclicBufferSize\r\n : 0\r\n cur = this$static._bufferOffset + this$static._pos\r\n if (this$static.HASH_ARRAY) {\r\n temp =\r\n CrcTable[this$static._bufferBase[cur] & 255] ^\r\n (this$static._bufferBase[cur + 1] & 255)\r\n hash2Value = temp & 1023\r\n this$static._hash[hash2Value] = this$static._pos\r\n temp ^= (this$static._bufferBase[cur + 2] & 255) << 8\r\n hash3Value = temp & 65535\r\n this$static._hash[1024 + hash3Value] = this$static._pos\r\n hashValue =\r\n (temp ^ (CrcTable[this$static._bufferBase[cur + 3] & 255] << 5)) &\r\n this$static._hashMask\r\n } else {\r\n hashValue =\r\n (this$static._bufferBase[cur] & 255) ^\r\n ((this$static._bufferBase[cur + 1] & 255) << 8)\r\n }\r\n curMatch = this$static._hash[this$static.kFixHashSize + hashValue]\r\n this$static._hash[this$static.kFixHashSize + hashValue] = this$static._pos\r\n ptr0 = (this$static._cyclicBufferPos << 1) + 1\r\n ptr1 = this$static._cyclicBufferPos << 1\r\n len0 = len1 = this$static.kNumHashDirectBytes\r\n count = this$static._cutValue\r\n\r\n while (true) {\r\n if (curMatch <= matchMinPos || count == 0) {\r\n count -= 1\r\n this$static._son[ptr0] = this$static._son[ptr1] = 0\r\n break\r\n }\r\n delta = this$static._pos - curMatch\r\n cyclicPos =\r\n (delta <= this$static._cyclicBufferPos\r\n ? this$static._cyclicBufferPos - delta\r\n : this$static._cyclicBufferPos -\r\n delta +\r\n this$static._cyclicBufferSize) << 1\r\n pby1 = this$static._bufferOffset + curMatch\r\n len = len0 < len1 ? len0 : len1\r\n if (\r\n this$static._bufferBase[pby1 + len] ==\r\n this$static._bufferBase[cur + len]\r\n ) {\r\n while ((len += 1) != lenLimit) {\r\n if (\r\n this$static._bufferBase[pby1 + len] !=\r\n this$static._bufferBase[cur + len]\r\n ) {\r\n break\r\n }\r\n }\r\n if (len == lenLimit) {\r\n this$static._son[ptr1] = this$static._son[cyclicPos]\r\n this$static._son[ptr0] = this$static._son[cyclicPos + 1]\r\n break\r\n }\r\n }\r\n if (\r\n (this$static._bufferBase[pby1 + len] & 255) <\r\n (this$static._bufferBase[cur + len] & 255)\r\n ) {\r\n this$static._son[ptr1] = curMatch\r\n ptr1 = cyclicPos + 1\r\n curMatch = this$static._son[ptr1]\r\n len1 = len\r\n } else {\r\n this$static._son[ptr0] = curMatch\r\n ptr0 = cyclicPos\r\n curMatch = this$static._son[ptr0]\r\n len0 = len\r\n }\r\n }\r\n $MovePos_0(this$static)\r\n } while ((num -= 1) != 0)\r\n}\r\n\r\n/** ce */\r\n/** ds */\r\nfunction $CopyBlock(this$static, distance, len) {\r\n var pos = this$static._pos - distance - 1\r\n if (pos < 0) {\r\n pos += this$static._windowSize\r\n }\r\n for (; len != 0; len -= 1) {\r\n if (pos >= this$static._windowSize) {\r\n pos = 0\r\n }\r\n this$static._buffer[this$static._pos] = this$static._buffer[pos]\r\n this$static._pos += 1\r\n pos += 1\r\n if (this$static._pos >= this$static._windowSize) {\r\n $Flush_0(this$static)\r\n }\r\n }\r\n}\r\n\r\nfunction $Create_5(this$static, windowSize) {\r\n if (this$static._buffer == null || this$static._windowSize != windowSize) {\r\n this$static._buffer = initDim(windowSize)\r\n }\r\n this$static._windowSize = windowSize\r\n this$static._pos = 0\r\n this$static._streamPos = 0\r\n}\r\n\r\nfunction $Flush_0(this$static) {\r\n var size = this$static._pos - this$static._streamPos\r\n if (!size) {\r\n return\r\n }\r\n $write_0(\r\n this$static._stream,\r\n this$static._buffer,\r\n this$static._streamPos,\r\n size,\r\n )\r\n if (this$static._pos >= this$static._windowSize) {\r\n this$static._pos = 0\r\n }\r\n this$static._streamPos = this$static._pos\r\n}\r\n\r\nfunction $GetByte(this$static, distance) {\r\n var pos = this$static._pos - distance - 1\r\n if (pos < 0) {\r\n pos += this$static._windowSize\r\n }\r\n return this$static._buffer[pos]\r\n}\r\n\r\nfunction $PutByte(this$static, b) {\r\n this$static._buffer[this$static._pos] = b\r\n this$static._pos += 1\r\n if (this$static._pos >= this$static._windowSize) {\r\n $Flush_0(this$static)\r\n }\r\n}\r\n\r\nfunction $ReleaseStream(this$static) {\r\n $Flush_0(this$static)\r\n this$static._stream = null\r\n}\r\n/** de */\r\n\r\n/**\r\n * LZMA utility functions used across encoding/decoding\r\n */\r\nclass LzmaUtils {\r\n static getLenToPosState(len: number): number {\r\n len -= 2\r\n if (len < 4) {\r\n return len\r\n }\r\n return 3\r\n }\r\n\r\n static stateUpdateChar(index: number): number {\r\n if (index < 4) {\r\n return 0\r\n }\r\n if (index < 10) {\r\n return index - 3\r\n }\r\n return index - 6\r\n }\r\n\r\n static initBitModels(probs: number[]): void {\r\n for (let i = probs.length - 1; i >= 0; --i) {\r\n probs[i] = 1024\r\n }\r\n }\r\n\r\n /** cs */\r\n static getPrice(prob: number, symbol: number): number {\r\n return ProbPrices[(((prob - symbol) ^ -symbol) & 2047) >>> 2]\r\n }\r\n /** ce */\r\n}\r\n\r\n// Legacy function wrappers\r\nfunction GetLenToPosState(len: number): number {\r\n return LzmaUtils.getLenToPosState(len)\r\n}\r\nfunction StateUpdateChar(index: number): number {\r\n return LzmaUtils.stateUpdateChar(index)\r\n}\r\nfunction InitBitModels(probs: number[]): void {\r\n LzmaUtils.initBitModels(probs)\r\n}\r\n/** cs */\r\nfunction GetPrice(prob: number, symbol: number): number {\r\n return LzmaUtils.getPrice(prob, symbol)\r\n}\r\n/** ce */\r\n\r\n/** cs */\r\nfunction $Chunker_0(this$static, encoder) {\r\n this$static.encoder = encoder\r\n this$static.decoder = null\r\n this$static.alive = 1\r\n return this$static\r\n}\r\n/** ce */\r\n/** ds */\r\nfunction $Chunker(this$static, decoder) {\r\n this$static.decoder = decoder\r\n this$static.encoder = null\r\n this$static.alive = 1\r\n return this$static\r\n}\r\n/** de */\r\n\r\n/** ds */\r\nfunction $processChunkDecode(this$static) {\r\n if (!this$static.alive) {\r\n throw new Error('bad state')\r\n }\r\n\r\n if (this$static.encoder) {\r\n throw new Error('No encoding')\r\n } else {\r\n $processDecoderChunk(this$static)\r\n }\r\n return this$static.alive\r\n}\r\n\r\nfunction $processDecoderChunk(this$static) {\r\n var result = $CodeOneChunk(this$static.decoder)\r\n if (result == -1) {\r\n throw new Error('corrupted input')\r\n }\r\n this$static.inBytesProcessed = N1_longLit\r\n this$static.outBytesProcessed = this$static.decoder.nowPos64\r\n if (\r\n result ||\r\n (compare(this$static.decoder.outSize, P0_longLit) >= 0 &&\r\n compare(this$static.decoder.nowPos64, this$static.decoder.outSize) >= 0)\r\n ) {\r\n $Flush_0(this$static.decoder.m_OutWindow)\r\n $ReleaseStream(this$static.decoder.m_OutWindow)\r\n this$static.decoder.m_RangeDecoder.Stream = null\r\n this$static.alive = 0\r\n }\r\n}\r\n/** de */\r\n/** cs */\r\nfunction $processChunkEncode(this$static) {\r\n if (!this$static.alive) {\r\n throw new Error('bad state')\r\n }\r\n\r\n if (this$static.encoder) {\r\n $processEncoderChunk(this$static)\r\n } else {\r\n throw new Error('No decoding')\r\n }\r\n return this$static.alive\r\n}\r\n\r\nfunction $processEncoderChunk(this$static) {\r\n $CodeOneBlock(\r\n this$static.encoder,\r\n this$static.encoder.processedInSize,\r\n this$static.encoder.processedOutSize,\r\n this$static.encoder.finished,\r\n )\r\n this$static.inBytesProcessed = this$static.encoder.processedInSize[0]\r\n if (this$static.encoder.finished[0]) {\r\n $ReleaseStreams(this$static.encoder)\r\n this$static.alive = 0\r\n }\r\n}\r\n/** ce */\r\n\r\n/** ds */\r\nfunction $CodeInChunks(this$static, inStream, outStream, outSize) {\r\n this$static.m_RangeDecoder.Stream = inStream\r\n $ReleaseStream(this$static.m_OutWindow)\r\n this$static.m_OutWindow._stream = outStream\r\n $Init_1(this$static)\r\n this$static.state = 0\r\n this$static.rep0 = 0\r\n this$static.rep1 = 0\r\n this$static.rep2 = 0\r\n this$static.rep3 = 0\r\n this$static.outSize = outSize\r\n this$static.nowPos64 = P0_longLit\r\n this$static.prevByte = 0\r\n return $Chunker({}, this$static)\r\n}\r\n\r\nfunction $CodeOneChunk(this$static) {\r\n var decoder2, distance, len, numDirectBits, posSlot, posState\r\n posState = lowBits_0(this$static.nowPos64) & this$static.m_PosStateMask\r\n if (\r\n !$DecodeBit(\r\n this$static.m_RangeDecoder,\r\n this$static.m_IsMatchDecoders,\r\n (this$static.state << 4) + posState,\r\n )\r\n ) {\r\n decoder2 = $GetDecoder(\r\n this$static.m_LiteralDecoder,\r\n lowBits_0(this$static.nowPos64),\r\n this$static.prevByte,\r\n )\r\n if (this$static.state < 7) {\r\n this$static.prevByte = $DecodeNormal(decoder2, this$static.m_RangeDecoder)\r\n } else {\r\n this$static.prevByte = $DecodeWithMatchByte(\r\n decoder2,\r\n this$static.m_RangeDecoder,\r\n $GetByte(this$static.m_OutWindow, this$static.rep0),\r\n )\r\n }\r\n $PutByte(this$static.m_OutWindow, this$static.prevByte)\r\n this$static.state = StateUpdateChar(this$static.state)\r\n this$static.nowPos64 = add(this$static.nowPos64, P1_longLit)\r\n } else {\r\n if (\r\n $DecodeBit(\r\n this$static.m_RangeDecoder,\r\n this$static.m_IsRepDecoders,\r\n this$static.state,\r\n )\r\n ) {\r\n len = 0\r\n if (\r\n !$DecodeBit(\r\n this$static.m_RangeDecoder,\r\n this$static.m_IsRepG0Decoders,\r\n this$static.state,\r\n )\r\n ) {\r\n if (\r\n !$DecodeBit(\r\n this$static.m_RangeDecoder,\r\n this$static.m_IsRep0LongDecoders,\r\n (this$static.state << 4) + posState,\r\n )\r\n ) {\r\n this$static.state = this$static.state < 7 ? 9 : 11\r\n len = 1\r\n }\r\n } else {\r\n if (\r\n !$DecodeBit(\r\n this$static.m_RangeDecoder,\r\n this$static.m_IsRepG1Decoders,\r\n this$static.state,\r\n )\r\n ) {\r\n distance = this$static.rep1\r\n } else {\r\n if (\r\n !$DecodeBit(\r\n this$static.m_RangeDecoder,\r\n this$static.m_IsRepG2Decoders,\r\n this$static.state,\r\n )\r\n ) {\r\n distance = this$static.rep2\r\n } else {\r\n distance = this$static.rep3\r\n this$static.rep3 = this$static.rep2\r\n }\r\n this$static.rep2 = this$static.rep1\r\n }\r\n this$static.rep1 = this$static.rep0\r\n this$static.rep0 = distance\r\n }\r\n if (!len) {\r\n len =\r\n $Decode(\r\n this$static.m_RepLenDecoder,\r\n this$static.m_RangeDecoder,\r\n posState,\r\n ) + 2\r\n this$static.state = this$static.state < 7 ? 8 : 11\r\n }\r\n } else {\r\n this$static.rep3 = this$static.rep2\r\n this$static.rep2 = this$static.rep1\r\n this$static.rep1 = this$static.rep0\r\n len =\r\n 2 +\r\n $Decode(this$static.m_LenDecoder, this$static.m_RangeDecoder, posState)\r\n this$static.state = this$static.state < 7 ? 7 : 10\r\n posSlot = $Decode_0(\r\n this$static.m_PosSlotDecoder[GetLenToPosState(len)],\r\n this$static.m_RangeDecoder,\r\n )\r\n if (posSlot >= 4) {\r\n numDirectBits = (posSlot >> 1) - 1\r\n this$static.rep0 = (2 | (posSlot & 1)) << numDirectBits\r\n if (posSlot < 14) {\r\n this$static.rep0 += ReverseDecode(\r\n this$static.m_PosDecoders,\r\n this$static.rep0 - posSlot - 1,\r\n this$static.m_RangeDecoder,\r\n numDirectBits,\r\n )\r\n } else {\r\n this$static.rep0 +=\r\n $DecodeDirectBits(this$static.m_RangeDecoder, numDirectBits - 4) <<\r\n 4\r\n this$static.rep0 += $ReverseDecode(\r\n this$static.m_PosAlignDecoder,\r\n this$static.m_RangeDecoder,\r\n )\r\n if (this$static.rep0 < 0) {\r\n if (this$static.rep0 == -1) {\r\n return 1\r\n }\r\n return -1\r\n }\r\n }\r\n } else this$static.rep0 = posSlot\r\n }\r\n if (\r\n compare(fromInt(this$static.rep0), this$static.nowPos64) >= 0 ||\r\n this$static.rep0 >= this$static.m_DictionarySizeCheck\r\n ) {\r\n return -1\r\n }\r\n $CopyBlock(this$static.m_OutWindow, this$static.rep0, len)\r\n this$static.nowPos64 = add(this$static.nowPos64, fromInt(len))\r\n this$static.prevByte = $GetByte(this$static.m_OutWindow, 0)\r\n }\r\n return 0\r\n}\r\n\r\nfunction $Decoder(this$static) {\r\n this$static.m_OutWindow = {}\r\n this$static.m_RangeDecoder = {}\r\n this$static.m_IsMatchDecoders = initDim(192)\r\n this$static.m_IsRepDecoders = initDim(12)\r\n this$static.m_IsRepG0Decoders = initDim(12)\r\n this$static.m_IsRepG1Decoders = initDim(12)\r\n this$static.m_IsRepG2Decoders = initDim(12)\r\n this$static.m_IsRep0LongDecoders = initDim(192)\r\n this$static.m_PosSlotDecoder = initDim(4)\r\n this$static.m_PosDecoders = initDim(114)\r\n this$static.m_PosAlignDecoder = $BitTreeDecoder({}, 4)\r\n this$static.m_LenDecoder = $Decoder$LenDecoder({})\r\n this$static.m_RepLenDecoder = $Decoder$LenDecoder({})\r\n this$static.m_LiteralDecoder = {}\r\n for (var i = 0; i < 4; ++i) {\r\n this$static.m_PosSlotDecoder[i] = $BitTreeDecoder({}, 6)\r\n }\r\n return this$static\r\n}\r\n\r\nfunction $Init_1(this$static) {\r\n this$static.m_OutWindow._streamPos = 0\r\n this$static.m_OutWindow._pos = 0\r\n InitBitModels(this$static.m_IsMatchDecoders)\r\n InitBitModels(this$static.m_IsRep0LongDecoders)\r\n InitBitModels(this$static.m_IsRepDecoders)\r\n InitBitModels(this$static.m_IsRepG0Decoders)\r\n InitBitModels(this$static.m_IsRepG1Decoders)\r\n InitBitModels(this$static.m_IsRepG2Decoders)\r\n InitBitModels(this$static.m_PosDecoders)\r\n $Init_0(this$static.m_LiteralDecoder)\r\n for (var i = 0; i < 4; ++i) {\r\n InitBitModels(this$static.m_PosSlotDecoder[i].Models)\r\n }\r\n $Init(this$static.m_LenDecoder)\r\n $Init(this$static.m_RepLenDecoder)\r\n InitBitModels(this$static.m_PosAlignDecoder.Models)\r\n $Init_8(this$static.m_RangeDecoder)\r\n}\r\n\r\nfunction $SetDecoderProperties(this$static, properties) {\r\n var dictionarySize, i, lc, lp, pb, remainder, val\r\n if (properties.length < 5) return 0\r\n val = properties[0] & 255\r\n lc = val % 9\r\n remainder = ~~(val / 9)\r\n lp = remainder % 5\r\n pb = ~~(remainder / 5)\r\n dictionarySize = 0\r\n for (i = 0; i < 4; ++i) {\r\n dictionarySize += (properties[1 + i] & 255) << (i * 8)\r\n }\r\n ///NOTE: If the input is bad, it might call for an insanely large dictionary size, which would crash the script.\r\n if (dictionarySize > 99999999 || !$SetLcLpPb(this$static, lc, lp, pb)) {\r\n return 0\r\n }\r\n return $SetDictionarySize(this$static, dictionarySize)\r\n}\r\n\r\nfunction $SetDictionarySize(this$static, dictionarySize) {\r\n if (dictionarySize < 0) {\r\n return 0\r\n }\r\n if (this$static.m_DictionarySize != dictionarySize) {\r\n this$static.m_DictionarySize = dictionarySize\r\n this$static.m_DictionarySizeCheck = Math.max(\r\n this$static.m_DictionarySize,\r\n 1,\r\n )\r\n $Create_5(\r\n this$static.m_OutWindow,\r\n Math.max(this$static.m_DictionarySizeCheck, 4096),\r\n )\r\n }\r\n return 1\r\n}\r\n\r\nfunction $SetLcLpPb(this$static, lc, lp, pb) {\r\n if (lc > 8 || lp > 4 || pb > 4) {\r\n return 0\r\n }\r\n $Create_0(this$static.m_LiteralDecoder, lp, lc)\r\n var numPosStates = 1 << pb\r\n $Create(this$static.m_LenDecoder, numPosStates)\r\n $Create(this$static.m_RepLenDecoder, numPosStates)\r\n this$static.m_PosStateMask = numPosStates - 1\r\n return 1\r\n}\r\n\r\nfunction $Create(this$static, numPosStates) {\r\n for (\r\n ;\r\n this$static.m_NumPosStates < numPosStates;\r\n this$static.m_NumPosStates += 1\r\n ) {\r\n this$static.m_LowCoder[this$static.m_NumPosStates] = $BitTreeDecoder({}, 3)\r\n this$static.m_MidCoder[this$static.m_NumPosStates] = $BitTreeDecoder({}, 3)\r\n }\r\n}\r\n\r\nfunction $Decode(this$static, rangeDecoder, posState) {\r\n if (!$DecodeBit(rangeDecoder, this$static.m_Choice, 0)) {\r\n return $Decode_0(this$static.m_LowCoder[posState], rangeDecoder)\r\n }\r\n var symbol = 8\r\n if (!$DecodeBit(rangeDecoder, this$static.m_Choice, 1)) {\r\n symbol += $Decode_0(this$static.m_MidCoder[posState], rangeDecoder)\r\n } else {\r\n symbol += 8 + $Decode_0(this$static.m_HighCoder, rangeDecoder)\r\n }\r\n return symbol\r\n}\r\n\r\nfunction $Decoder$LenDecoder(this$static) {\r\n this$static.m_Choice = initDim(2)\r\n this$static.m_LowCoder = initDim(16)\r\n this$static.m_MidCoder = initDim(16)\r\n this$static.m_HighCoder = $BitTreeDecoder({}, 8)\r\n this$static.m_NumPosStates = 0\r\n return this$static\r\n}\r\n\r\nfunction $Init(this$static) {\r\n InitBitModels(this$static.m_Choice)\r\n for (var posState = 0; posState < this$static.m_NumPosStates; ++posState) {\r\n InitBitModels(this$static.m_LowCoder[posState].Models)\r\n InitBitModels(this$static.m_MidCoder[posState].Models)\r\n }\r\n InitBitModels(this$static.m_HighCoder.Models)\r\n}\r\n\r\nfunction $Create_0(this$static, numPosBits, numPrevBits) {\r\n var i, numStates\r\n if (\r\n this$static.m_Coders != null &&\r\n this$static.m_NumPrevBits == numPrevBits &&\r\n this$static.m_NumPosBits == numPosBits\r\n )\r\n return\r\n this$static.m_NumPosBits = numPosBits\r\n this$static.m_PosMask = (1 << numPosBits) - 1\r\n this$static.m_NumPrevBits = numPrevBits\r\n numStates = 1 << (this$static.m_NumPrevBits + this$static.m_NumPosBits)\r\n this$static.m_Coders = initDim(numStates)\r\n for (i = 0; i < numStates; ++i)\r\n this$static.m_Coders[i] = $Decoder$LiteralDecoder$Decoder2({})\r\n}\r\n\r\nfunction $GetDecoder(this$static, pos, prevByte) {\r\n return this$static.m_Coders[\r\n ((pos & this$static.m_PosMask) << this$static.m_NumPrevBits) +\r\n ((prevByte & 255) >>> (8 - this$static.m_NumPrevBits))\r\n ]\r\n}\r\n\r\nfunction $Init_0(this$static) {\r\n var i, numStates\r\n numStates = 1 << (this$static.m_NumPrevBits + this$static.m_NumPosBits)\r\n for (i = 0; i < numStates; ++i) {\r\n InitBitModels(this$static.m_Coders[i].m_Decoders)\r\n }\r\n}\r\n\r\nfunction $DecodeNormal(this$static, rangeDecoder) {\r\n var symbol = 1\r\n do {\r\n symbol =\r\n (symbol << 1) | $DecodeBit(rangeDecoder, this$static.m_Decoders, symbol)\r\n } while (symbol < 256)\r\n return (symbol << 24) >> 24\r\n}\r\n\r\nfunction $DecodeWithMatchByte(this$static, rangeDecoder, matchByte) {\r\n var bit,\r\n matchBit,\r\n symbol = 1\r\n do {\r\n matchBit = (matchByte >> 7) & 1\r\n matchByte <<= 1\r\n bit = $DecodeBit(\r\n rangeDecoder,\r\n this$static.m_Decoders,\r\n ((1 + matchBit) << 8) + symbol,\r\n )\r\n symbol = (symbol << 1) | bit\r\n if (matchBit != bit) {\r\n while (symbol < 256) {\r\n symbol =\r\n (symbol << 1) |\r\n $DecodeBit(rangeDecoder, this$static.m_Decoders, symbol)\r\n }\r\n break\r\n }\r\n } while (symbol < 256)\r\n return (symbol << 24) >> 24\r\n}\r\n\r\nfunction $Decoder$LiteralDecoder$Decoder2(this$static) {\r\n this$static.m_Decoders = initDim(768)\r\n return this$static\r\n}\r\n\r\n/** de */\r\n/** cs */\r\n/**\r\n * Fast position lookup table for position slot calculations\r\n */\r\nclass FastPosClass {\r\n static readonly table: number[] = (() => {\r\n const table = [0, 1]\r\n let c = 2\r\n for (let slotFast = 2; slotFast < 22; ++slotFast) {\r\n let s = slotFast\r\n s >>= 1\r\n s -= 1\r\n let k = 1\r\n k <<= s\r\n for (let j = 0; j < k; ++j, ++c) {\r\n table[c] = (slotFast << 24) >> 24\r\n }\r\n }\r\n return table\r\n })()\r\n}\r\n\r\nconst g_FastPos = FastPosClass.table\r\n\r\nfunction $Backward(this$static, cur) {\r\n var backCur, backMem, posMem, posPrev\r\n this$static._optimumEndIndex = cur\r\n posMem = this$static._optimum[cur].PosPrev\r\n backMem = this$static._optimum[cur].BackPrev\r\n do {\r\n if (this$static._optimum[cur].Prev1IsChar) {\r\n $MakeAsChar(this$static._optimum[posMem])\r\n this$static._optimum[posMem].PosPrev = posMem - 1\r\n if (this$static._optimum[cur].Prev2) {\r\n this$static._optimum[posMem - 1].Prev1IsChar = 0\r\n this$static._optimum[posMem - 1].PosPrev =\r\n this$static._optimum[cur].PosPrev2\r\n this$static._optimum[posMem - 1].BackPrev =\r\n this$static._optimum[cur].BackPrev2\r\n }\r\n }\r\n posPrev = posMem\r\n backCur = backMem\r\n backMem = this$static._optimum[posPrev].BackPrev\r\n posMem = this$static._optimum[posPrev].PosPrev\r\n this$static._optimum[posPrev].BackPrev = backCur\r\n this$static._optimum[posPrev].PosPrev = cur\r\n cur = posPrev\r\n } while (cur > 0)\r\n this$static.backRes = this$static._optimum[0].BackPrev\r\n this$static._optimumCurrentIndex = this$static._optimum[0].PosPrev\r\n return this$static._optimumCurrentIndex\r\n}\r\n\r\nfunction $BaseInit(this$static) {\r\n this$static._state = 0\r\n this$static._previousByte = 0\r\n for (var i = 0; i < 4; ++i) {\r\n this$static._repDistances[i] = 0\r\n }\r\n}\r\n\r\nfunction $CodeOneBlock(this$static, inSize, outSize, finished) {\r\n var baseVal,\r\n complexState,\r\n curByte,\r\n distance,\r\n footerBits,\r\n len,\r\n lenToPosState,\r\n matchByte,\r\n pos,\r\n posReduced,\r\n posSlot,\r\n posState,\r\n progressPosValuePrev,\r\n subCoder\r\n inSize[0] = P0_longLit\r\n outSize[0] = P0_longLit\r\n finished[0] = 1\r\n if (this$static._inStream) {\r\n this$static._matchFinder._stream = this$static._inStream\r\n $Init_5(this$static._matchFinder)\r\n this$static._needReleaseMFStream = 1\r\n this$static._inStream = null\r\n }\r\n if (this$static._finished) {\r\n return\r\n }\r\n this$static._finished = 1\r\n progressPosValuePrev = this$static.nowPos64\r\n if (eq(this$static.nowPos64, P0_longLit)) {\r\n if (!$GetNumAvailableBytes(this$static._matchFinder)) {\r\n $Flush(this$static, lowBits_0(this$static.nowPos64))\r\n return\r\n }\r\n $ReadMatchDistances(this$static)\r\n posState = lowBits_0(this$static.nowPos64) & this$static._posStateMask\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isMatch,\r\n (this$static._state << 4) + posState,\r\n 0,\r\n )\r\n this$static._state = StateUpdateChar(this$static._state)\r\n curByte = $GetIndexByte(\r\n this$static._matchFinder,\r\n -this$static._additionalOffset,\r\n )\r\n $Encode_1(\r\n $GetSubCoder(\r\n this$static._literalEncoder,\r\n lowBits_0(this$static.nowPos64),\r\n this$static._previousByte,\r\n ),\r\n this$static._rangeEncoder,\r\n curByte,\r\n )\r\n this$static._previousByte = curByte\r\n this$static._additionalOffset -= 1\r\n this$static.nowPos64 = add(this$static.nowPos64, P1_longLit)\r\n }\r\n if (!$GetNumAvailableBytes(this$static._matchFinder)) {\r\n $Flush(this$static, lowBits_0(this$static.nowPos64))\r\n return\r\n }\r\n\r\n while (true) {\r\n len = $GetOptimum(this$static, lowBits_0(this$static.nowPos64))\r\n pos = this$static.backRes\r\n posState = lowBits_0(this$static.nowPos64) & this$static._posStateMask\r\n complexState = (this$static._state << 4) + posState\r\n if (len == 1 && pos == -1) {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isMatch,\r\n complexState,\r\n 0,\r\n )\r\n curByte = $GetIndexByte(\r\n this$static._matchFinder,\r\n -this$static._additionalOffset,\r\n )\r\n subCoder = $GetSubCoder(\r\n this$static._literalEncoder,\r\n lowBits_0(this$static.nowPos64),\r\n this$static._previousByte,\r\n )\r\n if (this$static._state < 7) {\r\n $Encode_1(subCoder, this$static._rangeEncoder, curByte)\r\n } else {\r\n matchByte = $GetIndexByte(\r\n this$static._matchFinder,\r\n -this$static._repDistances[0] - 1 - this$static._additionalOffset,\r\n )\r\n $EncodeMatched(subCoder, this$static._rangeEncoder, matchByte, curByte)\r\n }\r\n this$static._previousByte = curByte\r\n this$static._state = StateUpdateChar(this$static._state)\r\n } else {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isMatch,\r\n complexState,\r\n 1,\r\n )\r\n if (pos < 4) {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRep,\r\n this$static._state,\r\n 1,\r\n )\r\n if (!pos) {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRepG0,\r\n this$static._state,\r\n 0,\r\n )\r\n if (len == 1) {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRep0Long,\r\n complexState,\r\n 0,\r\n )\r\n } else {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRep0Long,\r\n complexState,\r\n 1,\r\n )\r\n }\r\n } else {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRepG0,\r\n this$static._state,\r\n 1,\r\n )\r\n if (pos == 1) {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRepG1,\r\n this$static._state,\r\n 0,\r\n )\r\n } else {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRepG1,\r\n this$static._state,\r\n 1,\r\n )\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRepG2,\r\n this$static._state,\r\n pos - 2,\r\n )\r\n }\r\n }\r\n if (len == 1) {\r\n this$static._state = this$static._state < 7 ? 9 : 11\r\n } else {\r\n $Encode_0(\r\n this$static._repMatchLenEncoder,\r\n this$static._rangeEncoder,\r\n len - 2,\r\n posState,\r\n )\r\n this$static._state = this$static._state < 7 ? 8 : 11\r\n }\r\n distance = this$static._repDistances[pos]\r\n if (pos != 0) {\r\n for (let i = pos; i >= 1; --i) {\r\n this$static._repDistances[i] = this$static._repDistances[i - 1]\r\n }\r\n this$static._repDistances[0] = distance\r\n }\r\n } else {\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRep,\r\n this$static._state,\r\n 0,\r\n )\r\n this$static._state = this$static._state < 7 ? 7 : 10\r\n $Encode_0(\r\n this$static._lenEncoder,\r\n this$static._rangeEncoder,\r\n len - 2,\r\n posState,\r\n )\r\n pos -= 4\r\n posSlot = GetPosSlot(pos)\r\n lenToPosState = GetLenToPosState(len)\r\n $Encode_2(\r\n this$static._posSlotEncoder[lenToPosState],\r\n this$static._rangeEncoder,\r\n posSlot,\r\n )\r\n if (posSlot >= 4) {\r\n footerBits = (posSlot >> 1) - 1\r\n baseVal = (2 | (posSlot & 1)) << footerBits\r\n posReduced = pos - baseVal\r\n if (posSlot < 14) {\r\n ReverseEncode(\r\n this$static._posEncoders,\r\n baseVal - posSlot - 1,\r\n this$static._rangeEncoder,\r\n footerBits,\r\n posReduced,\r\n )\r\n } else {\r\n $EncodeDirectBits(\r\n this$static._rangeEncoder,\r\n posReduced >> 4,\r\n footerBits - 4,\r\n )\r\n $ReverseEncode(\r\n this$static._posAlignEncoder,\r\n this$static._rangeEncoder,\r\n posReduced & 15,\r\n )\r\n this$static._alignPriceCount += 1\r\n }\r\n }\r\n distance = pos\r\n for (let i = 3; i >= 1; --i) {\r\n this$static._repDistances[i] = this$static._repDistances[i - 1]\r\n }\r\n this$static._repDistances[0] = distance\r\n this$static._matchPriceCount += 1\r\n }\r\n this$static._previousByte = $GetIndexByte(\r\n this$static._matchFinder,\r\n len - 1 - this$static._additionalOffset,\r\n )\r\n }\r\n this$static._additionalOffset -= len\r\n this$static.nowPos64 = add(this$static.nowPos64, fromInt(len))\r\n if (!this$static._additionalOffset) {\r\n if (this$static._matchPriceCount >= 128) {\r\n $FillDistancesPrices(this$static)\r\n }\r\n if (this$static._alignPriceCount >= 16) {\r\n $FillAlignPrices(this$static)\r\n }\r\n inSize[0] = this$static.nowPos64\r\n outSize[0] = $GetProcessedSizeAdd(this$static._rangeEncoder)\r\n if (!$GetNumAvailableBytes(this$static._matchFinder)) {\r\n $Flush(this$static, lowBits_0(this$static.nowPos64))\r\n return\r\n }\r\n if (\r\n compare(sub(this$static.nowPos64, progressPosValuePrev), [4096, 0]) >= 0\r\n ) {\r\n this$static._finished = 0\r\n finished[0] = 0\r\n return\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction $Create_2(this$static) {\r\n var bt, numHashBytes\r\n if (!this$static._matchFinder) {\r\n bt = {}\r\n numHashBytes = 4\r\n if (!this$static._matchFinderType) {\r\n numHashBytes = 2\r\n }\r\n $SetType(bt, numHashBytes)\r\n this$static._matchFinder = bt\r\n }\r\n $Create_1(\r\n this$static._literalEncoder,\r\n this$static._numLiteralPosStateBits,\r\n this$static._numLiteralContextBits,\r\n )\r\n if (\r\n this$static._dictionarySize == this$static._dictionarySizePrev &&\r\n this$static._numFastBytesPrev == this$static._numFastBytes\r\n ) {\r\n return\r\n }\r\n $Create_3(\r\n this$static._matchFinder,\r\n this$static._dictionarySize,\r\n 4096,\r\n this$static._numFastBytes,\r\n 274,\r\n )\r\n this$static._dictionarySizePrev = this$static._dictionarySize\r\n this$static._numFastBytesPrev = this$static._numFastBytes\r\n}\r\n\r\nfunction $Encoder(this$static) {\r\n var i\r\n this$static._repDistances = initDim(4)\r\n this$static._optimum = []\r\n this$static._rangeEncoder = {}\r\n this$static._isMatch = initDim(192)\r\n this$static._isRep = initDim(12)\r\n this$static._isRepG0 = initDim(12)\r\n this$static._isRepG1 = initDim(12)\r\n this$static._isRepG2 = initDim(12)\r\n this$static._isRep0Long = initDim(192)\r\n this$static._posSlotEncoder = []\r\n this$static._posEncoders = initDim(114)\r\n this$static._posAlignEncoder = $BitTreeEncoder({}, 4)\r\n this$static._lenEncoder = $Encoder$LenPriceTableEncoder({})\r\n this$static._repMatchLenEncoder = $Encoder$LenPriceTableEncoder({})\r\n this$static._literalEncoder = {}\r\n this$static._matchDistances = []\r\n this$static._posSlotPrices = []\r\n this$static._distancesPrices = []\r\n this$static._alignPrices = initDim(16)\r\n this$static.reps = initDim(4)\r\n this$static.repLens = initDim(4)\r\n this$static.processedInSize = [P0_longLit]\r\n this$static.processedOutSize = [P0_longLit]\r\n this$static.finished = [0]\r\n this$static.properties = initDim(5)\r\n this$static.tempPrices = initDim(128)\r\n this$static._longestMatchLength = 0\r\n this$static._matchFinderType = 1\r\n this$static._numDistancePairs = 0\r\n this$static._numFastBytesPrev = -1\r\n this$static.backRes = 0\r\n for (i = 0; i < 4096; ++i) {\r\n this$static._optimum[i] = {}\r\n }\r\n for (i = 0; i < 4; ++i) {\r\n this$static._posSlotEncoder[i] = $BitTreeEncoder({}, 6)\r\n }\r\n return this$static\r\n}\r\n\r\nfunction $FillAlignPrices(this$static) {\r\n for (var i = 0; i < 16; ++i) {\r\n this$static._alignPrices[i] = $ReverseGetPrice(\r\n this$static._posAlignEncoder,\r\n i,\r\n )\r\n }\r\n this$static._alignPriceCount = 0\r\n}\r\n\r\nfunction $FillDistancesPrices(this$static) {\r\n var baseVal, encoder, footerBits, i, lenToPosState, posSlot, st, st2\r\n for (i = 4; i < 128; ++i) {\r\n posSlot = GetPosSlot(i)\r\n footerBits = (posSlot >> 1) - 1\r\n baseVal = (2 | (posSlot & 1)) << footerBits\r\n this$static.tempPrices[i] = ReverseGetPrice(\r\n this$static._posEncoders,\r\n baseVal - posSlot - 1,\r\n footerBits,\r\n i - baseVal,\r\n )\r\n }\r\n for (lenToPosState = 0; lenToPosState < 4; ++lenToPosState) {\r\n encoder = this$static._posSlotEncoder[lenToPosState]\r\n st = lenToPosState << 6\r\n for (posSlot = 0; posSlot < this$static._distTableSize; posSlot += 1) {\r\n this$static._posSlotPrices[st + posSlot] = $GetPrice_1(encoder, posSlot)\r\n }\r\n for (posSlot = 14; posSlot < this$static._distTableSize; posSlot += 1) {\r\n this$static._posSlotPrices[st + posSlot] += ((posSlot >> 1) - 1 - 4) << 6\r\n }\r\n st2 = lenToPosState * 128\r\n for (i = 0; i < 4; ++i) {\r\n this$static._distancesPrices[st2 + i] = this$static._posSlotPrices[st + i]\r\n }\r\n for (; i < 128; ++i) {\r\n this$static._distancesPrices[st2 + i] =\r\n this$static._posSlotPrices[st + GetPosSlot(i)] +\r\n this$static.tempPrices[i]\r\n }\r\n }\r\n this$static._matchPriceCount = 0\r\n}\r\n\r\nfunction $Flush(this$static, nowPos) {\r\n $ReleaseMFStream(this$static)\r\n $WriteEndMarker(this$static, nowPos & this$static._posStateMask)\r\n for (var i = 0; i < 5; ++i) {\r\n $ShiftLow(this$static._rangeEncoder)\r\n }\r\n}\r\n\r\nfunction $GetOptimum(this$static, position) {\r\n var cur,\r\n curAnd1Price,\r\n curAndLenCharPrice,\r\n curAndLenPrice,\r\n curBack,\r\n curPrice,\r\n currentByte,\r\n distance,\r\n i,\r\n len,\r\n lenEnd,\r\n lenMain,\r\n lenRes,\r\n lenTest,\r\n lenTest2,\r\n lenTestTemp,\r\n matchByte,\r\n matchPrice,\r\n newLen,\r\n nextIsChar,\r\n nextMatchPrice,\r\n nextOptimum,\r\n nextRepMatchPrice,\r\n normalMatchPrice,\r\n numAvailableBytes,\r\n numAvailableBytesFull,\r\n numDistancePairs,\r\n offs,\r\n offset,\r\n opt,\r\n optimum,\r\n pos,\r\n posPrev,\r\n posState,\r\n posStateNext,\r\n price_4,\r\n repIndex,\r\n repLen,\r\n repMatchPrice,\r\n repMaxIndex,\r\n shortRepPrice,\r\n startLen,\r\n state,\r\n state2,\r\n t,\r\n price,\r\n price_0,\r\n price_1,\r\n price_2,\r\n price_3\r\n if (this$static._optimumEndIndex != this$static._optimumCurrentIndex) {\r\n lenRes =\r\n this$static._optimum[this$static._optimumCurrentIndex].PosPrev -\r\n this$static._optimumCurrentIndex\r\n this$static.backRes =\r\n this$static._optimum[this$static._optimumCurrentIndex].BackPrev\r\n this$static._optimumCurrentIndex =\r\n this$static._optimum[this$static._optimumCurrentIndex].PosPrev\r\n return lenRes\r\n }\r\n this$static._optimumCurrentIndex = this$static._optimumEndIndex = 0\r\n if (this$static._longestMatchWasFound) {\r\n lenMain = this$static._longestMatchLength\r\n this$static._longestMatchWasFound = 0\r\n } else {\r\n lenMain = $ReadMatchDistances(this$static)\r\n }\r\n numDistancePairs = this$static._numDistancePairs\r\n numAvailableBytes = $GetNumAvailableBytes(this$static._matchFinder) + 1\r\n if (numAvailableBytes < 2) {\r\n this$static.backRes = -1\r\n return 1\r\n }\r\n if (numAvailableBytes > 273) {\r\n numAvailableBytes = 273\r\n }\r\n repMaxIndex = 0\r\n for (i = 0; i < 4; ++i) {\r\n this$static.reps[i] = this$static._repDistances[i]\r\n this$static.repLens[i] = $GetMatchLen(\r\n this$static._matchFinder,\r\n -1,\r\n this$static.reps[i],\r\n 273,\r\n )\r\n if (this$static.repLens[i] > this$static.repLens[repMaxIndex]) {\r\n repMaxIndex = i\r\n }\r\n }\r\n if (this$static.repLens[repMaxIndex] >= this$static._numFastBytes) {\r\n this$static.backRes = repMaxIndex\r\n lenRes = this$static.repLens[repMaxIndex]\r\n $MovePos(this$static, lenRes - 1)\r\n return lenRes\r\n }\r\n if (lenMain >= this$static._numFastBytes) {\r\n this$static.backRes = this$static._matchDistances[numDistancePairs - 1] + 4\r\n $MovePos(this$static, lenMain - 1)\r\n return lenMain\r\n }\r\n currentByte = $GetIndexByte(this$static._matchFinder, -1)\r\n matchByte = $GetIndexByte(\r\n this$static._matchFinder,\r\n -this$static._repDistances[0] - 1 - 1,\r\n )\r\n if (\r\n lenMain < 2 &&\r\n currentByte != matchByte &&\r\n this$static.repLens[repMaxIndex] < 2\r\n ) {\r\n this$static.backRes = -1\r\n return 1\r\n }\r\n this$static._optimum[0].State = this$static._state\r\n posState = position & this$static._posStateMask\r\n this$static._optimum[1].Price =\r\n ProbPrices[\r\n this$static._isMatch[(this$static._state << 4) + posState] >>> 2\r\n ] +\r\n $GetPrice_0(\r\n $GetSubCoder(\r\n this$static._literalEncoder,\r\n position,\r\n this$static._previousByte,\r\n ),\r\n this$static._state >= 7,\r\n matchByte,\r\n currentByte,\r\n )\r\n $MakeAsChar(this$static._optimum[1])\r\n matchPrice =\r\n ProbPrices[\r\n (2048 - this$static._isMatch[(this$static._state << 4) + posState]) >>> 2\r\n ]\r\n repMatchPrice =\r\n matchPrice +\r\n ProbPrices[(2048 - this$static._isRep[this$static._state]) >>> 2]\r\n if (matchByte == currentByte) {\r\n shortRepPrice =\r\n repMatchPrice +\r\n $GetRepLen1Price(this$static, this$static._state, posState)\r\n if (shortRepPrice < this$static._optimum[1].Price) {\r\n this$static._optimum[1].Price = shortRepPrice\r\n $MakeAsShortRep(this$static._optimum[1])\r\n }\r\n }\r\n lenEnd =\r\n lenMain >= this$static.repLens[repMaxIndex]\r\n ? lenMain\r\n : this$static.repLens[repMaxIndex]\r\n if (lenEnd < 2) {\r\n this$static.backRes = this$static._optimum[1].BackPrev\r\n return 1\r\n }\r\n this$static._optimum[1].PosPrev = 0\r\n this$static._optimum[0].Backs0 = this$static.reps[0]\r\n this$static._optimum[0].Backs1 = this$static.reps[1]\r\n this$static._optimum[0].Backs2 = this$static.reps[2]\r\n this$static._optimum[0].Backs3 = this$static.reps[3]\r\n len = lenEnd\r\n do {\r\n this$static._optimum[len].Price = 268435455\r\n len -= 1\r\n } while (len >= 2)\r\n for (i = 0; i < 4; ++i) {\r\n repLen = this$static.repLens[i]\r\n if (repLen < 2) {\r\n continue\r\n }\r\n price_4 =\r\n repMatchPrice +\r\n $GetPureRepPrice(this$static, i, this$static._state, posState)\r\n do {\r\n curAndLenPrice =\r\n price_4 +\r\n $GetPrice(this$static._repMatchLenEncoder, repLen - 2, posState)\r\n optimum = this$static._optimum[repLen]\r\n if (curAndLenPrice < optimum.Price) {\r\n optimum.Price = curAndLenPrice\r\n optimum.PosPrev = 0\r\n optimum.BackPrev = i\r\n optimum.Prev1IsChar = 0\r\n }\r\n } while ((repLen -= 1) >= 2)\r\n }\r\n normalMatchPrice =\r\n matchPrice + ProbPrices[this$static._isRep[this$static._state] >>> 2]\r\n len = this$static.repLens[0] >= 2 ? this$static.repLens[0] + 1 : 2\r\n if (len <= lenMain) {\r\n offs = 0\r\n while (len > this$static._matchDistances[offs]) {\r\n offs += 2\r\n }\r\n for (; ; len += 1) {\r\n distance = this$static._matchDistances[offs + 1]\r\n curAndLenPrice =\r\n normalMatchPrice + $GetPosLenPrice(this$static, distance, len, posState)\r\n optimum = this$static._optimum[len]\r\n if (curAndLenPrice < optimum.Price) {\r\n optimum.Price = curAndLenPrice\r\n optimum.PosPrev = 0\r\n optimum.BackPrev = distance + 4\r\n optimum.Prev1IsChar = 0\r\n }\r\n if (len == this$static._matchDistances[offs]) {\r\n offs += 2\r\n if (offs == numDistancePairs) {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n cur = 0\r\n\r\n while (true) {\r\n ++cur\r\n if (cur == lenEnd) {\r\n return $Backward(this$static, cur)\r\n }\r\n newLen = $ReadMatchDistances(this$static)\r\n numDistancePairs = this$static._numDistancePairs\r\n if (newLen >= this$static._numFastBytes) {\r\n this$static._longestMatchLength = newLen\r\n this$static._longestMatchWasFound = 1\r\n return $Backward(this$static, cur)\r\n }\r\n position += 1\r\n posPrev = this$static._optimum[cur].PosPrev\r\n if (this$static._optimum[cur].Prev1IsChar) {\r\n posPrev -= 1\r\n if (this$static._optimum[cur].Prev2) {\r\n state = this$static._optimum[this$static._optimum[cur].PosPrev2].State\r\n if (this$static._optimum[cur].BackPrev2 < 4) {\r\n state = state < 7 ? 8 : 11\r\n } else {\r\n state = state < 7 ? 7 : 10\r\n }\r\n } else {\r\n state = this$static._optimum[posPrev].State\r\n }\r\n state = StateUpdateChar(state)\r\n } else {\r\n state = this$static._optimum[posPrev].State\r\n }\r\n if (posPrev == cur - 1) {\r\n if (!this$static._optimum[cur].BackPrev) {\r\n state = state < 7 ? 9 : 11\r\n } else {\r\n state = StateUpdateChar(state)\r\n }\r\n } else {\r\n if (\r\n this$static._optimum[cur].Prev1IsChar &&\r\n this$static._optimum[cur].Prev2\r\n ) {\r\n posPrev = this$static._optimum[cur].PosPrev2\r\n pos = this$static._optimum[cur].BackPrev2\r\n state = state < 7 ? 8 : 11\r\n } else {\r\n pos = this$static._optimum[cur].BackPrev\r\n if (pos < 4) {\r\n state = state < 7 ? 8 : 11\r\n } else {\r\n state = state < 7 ? 7 : 10\r\n }\r\n }\r\n opt = this$static._optimum[posPrev]\r\n if (pos < 4) {\r\n if (!pos) {\r\n this$static.reps[0] = opt.Backs0\r\n this$static.reps[1] = opt.Backs1\r\n this$static.reps[2] = opt.Backs2\r\n this$static.reps[3] = opt.Backs3\r\n } else if (pos == 1) {\r\n this$static.reps[0] = opt.Backs1\r\n this$static.reps[1] = opt.Backs0\r\n this$static.reps[2] = opt.Backs2\r\n this$static.reps[3] = opt.Backs3\r\n } else if (pos == 2) {\r\n this$static.reps[0] = opt.Backs2\r\n this$static.reps[1] = opt.Backs0\r\n this$static.reps[2] = opt.Backs1\r\n this$static.reps[3] = opt.Backs3\r\n } else {\r\n this$static.reps[0] = opt.Backs3\r\n this$static.reps[1] = opt.Backs0\r\n this$static.reps[2] = opt.Backs1\r\n this$static.reps[3] = opt.Backs2\r\n }\r\n } else {\r\n this$static.reps[0] = pos - 4\r\n this$static.reps[1] = opt.Backs0\r\n this$static.reps[2] = opt.Backs1\r\n this$static.reps[3] = opt.Backs2\r\n }\r\n }\r\n this$static._optimum[cur].State = state\r\n this$static._optimum[cur].Backs0 = this$static.reps[0]\r\n this$static._optimum[cur].Backs1 = this$static.reps[1]\r\n this$static._optimum[cur].Backs2 = this$static.reps[2]\r\n this$static._optimum[cur].Backs3 = this$static.reps[3]\r\n curPrice = this$static._optimum[cur].Price\r\n currentByte = $GetIndexByte(this$static._matchFinder, -1)\r\n matchByte = $GetIndexByte(\r\n this$static._matchFinder,\r\n -this$static.reps[0] - 1 - 1,\r\n )\r\n posState = position & this$static._posStateMask\r\n curAnd1Price =\r\n curPrice +\r\n ProbPrices[this$static._isMatch[(state << 4) + posState] >>> 2] +\r\n $GetPrice_0(\r\n $GetSubCoder(\r\n this$static._literalEncoder,\r\n position,\r\n $GetIndexByte(this$static._matchFinder, -2),\r\n ),\r\n state >= 7,\r\n matchByte,\r\n currentByte,\r\n )\r\n nextOptimum = this$static._optimum[cur + 1]\r\n nextIsChar = 0\r\n if (curAnd1Price < nextOptimum.Price) {\r\n nextOptimum.Price = curAnd1Price\r\n nextOptimum.PosPrev = cur\r\n nextOptimum.BackPrev = -1\r\n nextOptimum.Prev1IsChar = 0\r\n nextIsChar = 1\r\n }\r\n matchPrice =\r\n curPrice +\r\n ProbPrices[(2048 - this$static._isMatch[(state << 4) + posState]) >>> 2]\r\n repMatchPrice =\r\n matchPrice + ProbPrices[(2048 - this$static._isRep[state]) >>> 2]\r\n if (\r\n matchByte == currentByte &&\r\n !(nextOptimum.PosPrev < cur && !nextOptimum.BackPrev)\r\n ) {\r\n shortRepPrice =\r\n repMatchPrice +\r\n (ProbPrices[this$static._isRepG0[state] >>> 2] +\r\n ProbPrices[this$static._isRep0Long[(state << 4) + posState] >>> 2])\r\n if (shortRepPrice <= nextOptimum.Price) {\r\n nextOptimum.Price = shortRepPrice\r\n nextOptimum.PosPrev = cur\r\n nextOptimum.BackPrev = 0\r\n nextOptimum.Prev1IsChar = 0\r\n nextIsChar = 1\r\n }\r\n }\r\n numAvailableBytesFull = $GetNumAvailableBytes(this$static._matchFinder) + 1\r\n numAvailableBytesFull =\r\n 4095 - cur < numAvailableBytesFull ? 4095 - cur : numAvailableBytesFull\r\n numAvailableBytes = numAvailableBytesFull\r\n if (numAvailableBytes < 2) {\r\n continue\r\n }\r\n if (numAvailableBytes > this$static._numFastBytes) {\r\n numAvailableBytes = this$static._numFastBytes\r\n }\r\n if (!nextIsChar && matchByte != currentByte) {\r\n t = Math.min(numAvailableBytesFull - 1, this$static._numFastBytes)\r\n lenTest2 = $GetMatchLen(\r\n this$static._matchFinder,\r\n 0,\r\n this$static.reps[0],\r\n t,\r\n )\r\n if (lenTest2 >= 2) {\r\n state2 = StateUpdateChar(state)\r\n posStateNext = (position + 1) & this$static._posStateMask\r\n nextRepMatchPrice =\r\n curAnd1Price +\r\n ProbPrices[\r\n (2048 - this$static._isMatch[(state2 << 4) + posStateNext]) >>> 2\r\n ] +\r\n ProbPrices[(2048 - this$static._isRep[state2]) >>> 2]\r\n offset = cur + 1 + lenTest2\r\n while (lenEnd < offset) {\r\n this$static._optimum[(lenEnd += 1)].Price = 268435455\r\n }\r\n curAndLenPrice =\r\n nextRepMatchPrice +\r\n ((price = $GetPrice(\r\n this$static._repMatchLenEncoder,\r\n lenTest2 - 2,\r\n posStateNext,\r\n )),\r\n price + $GetPureRepPrice(this$static, 0, state2, posStateNext))\r\n optimum = this$static._optimum[offset]\r\n if (curAndLenPrice < optimum.Price) {\r\n optimum.Price = curAndLenPrice\r\n optimum.PosPrev = cur + 1\r\n optimum.BackPrev = 0\r\n optimum.Prev1IsChar = 1\r\n optimum.Prev2 = 0\r\n }\r\n }\r\n }\r\n startLen = 2\r\n for (repIndex = 0; repIndex < 4; ++repIndex) {\r\n lenTest = $GetMatchLen(\r\n this$static._matchFinder,\r\n -1,\r\n this$static.reps[repIndex],\r\n numAvailableBytes,\r\n )\r\n if (lenTest < 2) {\r\n continue\r\n }\r\n lenTestTemp = lenTest\r\n do {\r\n while (lenEnd < cur + lenTest) {\r\n this$static._optimum[(lenEnd += 1)].Price = 268435455\r\n }\r\n curAndLenPrice =\r\n repMatchPrice +\r\n ((price_0 = $GetPrice(\r\n this$static._repMatchLenEncoder,\r\n lenTest - 2,\r\n posState,\r\n )),\r\n price_0 + $GetPureRepPrice(this$static, repIndex, state, posState))\r\n optimum = this$static._optimum[cur + lenTest]\r\n if (curAndLenPrice < optimum.Price) {\r\n optimum.Price = curAndLenPrice\r\n optimum.PosPrev = cur\r\n optimum.BackPrev = repIndex\r\n optimum.Prev1IsChar = 0\r\n }\r\n } while ((lenTest -= 1) >= 2)\r\n lenTest = lenTestTemp\r\n if (!repIndex) {\r\n startLen = lenTest + 1\r\n }\r\n if (lenTest < numAvailableBytesFull) {\r\n t = Math.min(\r\n numAvailableBytesFull - 1 - lenTest,\r\n this$static._numFastBytes,\r\n )\r\n lenTest2 = $GetMatchLen(\r\n this$static._matchFinder,\r\n lenTest,\r\n this$static.reps[repIndex],\r\n t,\r\n )\r\n if (lenTest2 >= 2) {\r\n state2 = state < 7 ? 8 : 11\r\n posStateNext = (position + lenTest) & this$static._posStateMask\r\n curAndLenCharPrice =\r\n repMatchPrice +\r\n ((price_1 = $GetPrice(\r\n this$static._repMatchLenEncoder,\r\n lenTest - 2,\r\n posState,\r\n )),\r\n price_1 +\r\n $GetPureRepPrice(this$static, repIndex, state, posState)) +\r\n ProbPrices[\r\n this$static._isMatch[(state2 << 4) + posStateNext] >>> 2\r\n ] +\r\n $GetPrice_0(\r\n $GetSubCoder(\r\n this$static._literalEncoder,\r\n position + lenTest,\r\n $GetIndexByte(this$static._matchFinder, lenTest - 1 - 1),\r\n ),\r\n 1,\r\n $GetIndexByte(\r\n this$static._matchFinder,\r\n lenTest - 1 - (this$static.reps[repIndex] + 1),\r\n ),\r\n $GetIndexByte(this$static._matchFinder, lenTest - 1),\r\n )\r\n state2 = StateUpdateChar(state2)\r\n posStateNext = (position + lenTest + 1) & this$static._posStateMask\r\n nextMatchPrice =\r\n curAndLenCharPrice +\r\n ProbPrices[\r\n (2048 - this$static._isMatch[(state2 << 4) + posStateNext]) >>> 2\r\n ]\r\n nextRepMatchPrice =\r\n nextMatchPrice +\r\n ProbPrices[(2048 - this$static._isRep[state2]) >>> 2]\r\n offset = lenTest + 1 + lenTest2\r\n while (lenEnd < cur + offset) {\r\n this$static._optimum[(lenEnd += 1)].Price = 268435455\r\n }\r\n curAndLenPrice =\r\n nextRepMatchPrice +\r\n ((price_2 = $GetPrice(\r\n this$static._repMatchLenEncoder,\r\n lenTest2 - 2,\r\n posStateNext,\r\n )),\r\n price_2 + $GetPureRepPrice(this$static, 0, state2, posStateNext))\r\n optimum = this$static._optimum[cur + offset]\r\n if (curAndLenPrice < optimum.Price) {\r\n optimum.Price = curAndLenPrice\r\n optimum.PosPrev = cur + lenTest + 1\r\n optimum.BackPrev = 0\r\n optimum.Prev1IsChar = 1\r\n optimum.Prev2 = 1\r\n optimum.PosPrev2 = cur\r\n optimum.BackPrev2 = repIndex\r\n }\r\n }\r\n }\r\n }\r\n if (newLen > numAvailableBytes) {\r\n newLen = numAvailableBytes\r\n for (\r\n numDistancePairs = 0;\r\n newLen > this$static._matchDistances[numDistancePairs];\r\n numDistancePairs += 2\r\n ) {\r\n //\r\n }\r\n this$static._matchDistances[numDistancePairs] = newLen\r\n numDistancePairs += 2\r\n }\r\n if (newLen >= startLen) {\r\n normalMatchPrice =\r\n matchPrice + ProbPrices[this$static._isRep[state] >>> 2]\r\n while (lenEnd < cur + newLen) {\r\n this$static._optimum[(lenEnd += 1)].Price = 268435455\r\n }\r\n offs = 0\r\n while (startLen > this$static._matchDistances[offs]) {\r\n offs += 2\r\n }\r\n for (lenTest = startLen; ; lenTest += 1) {\r\n curBack = this$static._matchDistances[offs + 1]\r\n curAndLenPrice =\r\n normalMatchPrice +\r\n $GetPosLenPrice(this$static, curBack, lenTest, posState)\r\n optimum = this$static._optimum[cur + lenTest]\r\n if (curAndLenPrice < optimum.Price) {\r\n optimum.Price = curAndLenPrice\r\n optimum.PosPrev = cur\r\n optimum.BackPrev = curBack + 4\r\n optimum.Prev1IsChar = 0\r\n }\r\n if (lenTest == this$static._matchDistances[offs]) {\r\n if (lenTest < numAvailableBytesFull) {\r\n t = Math.min(\r\n numAvailableBytesFull - 1 - lenTest,\r\n this$static._numFastBytes,\r\n )\r\n lenTest2 = $GetMatchLen(\r\n this$static._matchFinder,\r\n lenTest,\r\n curBack,\r\n t,\r\n )\r\n if (lenTest2 >= 2) {\r\n state2 = state < 7 ? 7 : 10\r\n posStateNext = (position + lenTest) & this$static._posStateMask\r\n curAndLenCharPrice =\r\n curAndLenPrice +\r\n ProbPrices[\r\n this$static._isMatch[(state2 << 4) + posStateNext] >>> 2\r\n ] +\r\n $GetPrice_0(\r\n $GetSubCoder(\r\n this$static._literalEncoder,\r\n position + lenTest,\r\n $GetIndexByte(this$static._matchFinder, lenTest - 1 - 1),\r\n ),\r\n 1,\r\n $GetIndexByte(\r\n this$static._matchFinder,\r\n lenTest - (curBack + 1) - 1,\r\n ),\r\n $GetIndexByte(this$static._matchFinder, lenTest - 1),\r\n )\r\n state2 = StateUpdateChar(state2)\r\n posStateNext =\r\n (position + lenTest + 1) & this$static._posStateMask\r\n nextMatchPrice =\r\n curAndLenCharPrice +\r\n ProbPrices[\r\n (2048 -\r\n this$static._isMatch[(state2 << 4) + posStateNext]) >>>\r\n 2\r\n ]\r\n nextRepMatchPrice =\r\n nextMatchPrice +\r\n ProbPrices[(2048 - this$static._isRep[state2]) >>> 2]\r\n offset = lenTest + 1 + lenTest2\r\n while (lenEnd < cur + offset) {\r\n this$static._optimum[(lenEnd += 1)].Price = 268435455\r\n }\r\n curAndLenPrice =\r\n nextRepMatchPrice +\r\n ((price_3 = $GetPrice(\r\n this$static._repMatchLenEncoder,\r\n lenTest2 - 2,\r\n posStateNext,\r\n )),\r\n price_3 +\r\n $GetPureRepPrice(this$static, 0, state2, posStateNext))\r\n optimum = this$static._optimum[cur + offset]\r\n if (curAndLenPrice < optimum.Price) {\r\n optimum.Price = curAndLenPrice\r\n optimum.PosPrev = cur + lenTest + 1\r\n optimum.BackPrev = 0\r\n optimum.Prev1IsChar = 1\r\n optimum.Prev2 = 1\r\n optimum.PosPrev2 = cur\r\n optimum.BackPrev2 = curBack + 4\r\n }\r\n }\r\n }\r\n offs += 2\r\n if (offs == numDistancePairs) break\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction $GetPosLenPrice(this$static, pos, len, posState) {\r\n var price,\r\n lenToPosState = GetLenToPosState(len)\r\n if (pos < 128) {\r\n price = this$static._distancesPrices[lenToPosState * 128 + pos]\r\n } else {\r\n price =\r\n this$static._posSlotPrices[(lenToPosState << 6) + GetPosSlot2(pos)] +\r\n this$static._alignPrices[pos & 15]\r\n }\r\n return price + $GetPrice(this$static._lenEncoder, len - 2, posState)\r\n}\r\n\r\nfunction $GetPureRepPrice(this$static, repIndex, state, posState) {\r\n var price\r\n if (!repIndex) {\r\n price = ProbPrices[this$static._isRepG0[state] >>> 2]\r\n price +=\r\n ProbPrices[\r\n (2048 - this$static._isRep0Long[(state << 4) + posState]) >>> 2\r\n ]\r\n } else {\r\n price = ProbPrices[(2048 - this$static._isRepG0[state]) >>> 2]\r\n if (repIndex == 1) {\r\n price += ProbPrices[this$static._isRepG1[state] >>> 2]\r\n } else {\r\n price += ProbPrices[(2048 - this$static._isRepG1[state]) >>> 2]\r\n price += GetPrice(this$static._isRepG2[state], repIndex - 2)\r\n }\r\n }\r\n return price\r\n}\r\n\r\nfunction $GetRepLen1Price(this$static, state, posState) {\r\n return (\r\n ProbPrices[this$static._isRepG0[state] >>> 2] +\r\n ProbPrices[this$static._isRep0Long[(state << 4) + posState] >>> 2]\r\n )\r\n}\r\n\r\nfunction $Init_4(this$static) {\r\n $BaseInit(this$static)\r\n $Init_9(this$static._rangeEncoder)\r\n InitBitModels(this$static._isMatch)\r\n InitBitModels(this$static._isRep0Long)\r\n InitBitModels(this$static._isRep)\r\n InitBitModels(this$static._isRepG0)\r\n InitBitModels(this$static._isRepG1)\r\n InitBitModels(this$static._isRepG2)\r\n InitBitModels(this$static._posEncoders)\r\n $Init_3(this$static._literalEncoder)\r\n for (var i = 0; i < 4; ++i) {\r\n InitBitModels(this$static._posSlotEncoder[i].Models)\r\n }\r\n $Init_2(this$static._lenEncoder, 1 << this$static._posStateBits)\r\n $Init_2(this$static._repMatchLenEncoder, 1 << this$static._posStateBits)\r\n InitBitModels(this$static._posAlignEncoder.Models)\r\n this$static._longestMatchWasFound = 0\r\n this$static._optimumEndIndex = 0\r\n this$static._optimumCurrentIndex = 0\r\n this$static._additionalOffset = 0\r\n}\r\n\r\nfunction $MovePos(this$static, num) {\r\n if (num > 0) {\r\n $Skip(this$static._matchFinder, num)\r\n this$static._additionalOffset += num\r\n }\r\n}\r\n\r\nfunction $ReadMatchDistances(this$static) {\r\n var lenRes = 0\r\n this$static._numDistancePairs = $GetMatches(\r\n this$static._matchFinder,\r\n this$static._matchDistances,\r\n )\r\n if (this$static._numDistancePairs > 0) {\r\n lenRes = this$static._matchDistances[this$static._numDistancePairs - 2]\r\n if (lenRes == this$static._numFastBytes)\r\n lenRes += $GetMatchLen(\r\n this$static._matchFinder,\r\n lenRes - 1,\r\n this$static._matchDistances[this$static._numDistancePairs - 1],\r\n 273 - lenRes,\r\n )\r\n }\r\n this$static._additionalOffset += 1\r\n return lenRes\r\n}\r\n\r\nfunction $ReleaseMFStream(this$static) {\r\n if (this$static._matchFinder && this$static._needReleaseMFStream) {\r\n this$static._matchFinder._stream = null\r\n this$static._needReleaseMFStream = 0\r\n }\r\n}\r\n\r\nfunction $ReleaseStreams(this$static) {\r\n $ReleaseMFStream(this$static)\r\n this$static._rangeEncoder.Stream = null\r\n}\r\n\r\nfunction $SetDictionarySize_0(this$static, dictionarySize) {\r\n this$static._dictionarySize = dictionarySize\r\n for (var dicLogSize = 0; dictionarySize > 1 << dicLogSize; ++dicLogSize) {\r\n //\r\n }\r\n this$static._distTableSize = dicLogSize * 2\r\n}\r\n\r\nfunction $SetMatchFinder(this$static, matchFinderIndex) {\r\n var matchFinderIndexPrev = this$static._matchFinderType\r\n this$static._matchFinderType = matchFinderIndex\r\n if (\r\n this$static._matchFinder &&\r\n matchFinderIndexPrev != this$static._matchFinderType\r\n ) {\r\n this$static._dictionarySizePrev = -1\r\n this$static._matchFinder = null\r\n }\r\n}\r\n\r\nfunction $WriteCoderProperties(this$static, outStream) {\r\n this$static.properties[0] =\r\n (((this$static._posStateBits * 5 + this$static._numLiteralPosStateBits) *\r\n 9 +\r\n this$static._numLiteralContextBits) <<\r\n 24) >>\r\n 24\r\n for (var i = 0; i < 4; ++i) {\r\n this$static.properties[1 + i] =\r\n ((this$static._dictionarySize >> (8 * i)) << 24) >> 24\r\n }\r\n $write_0(outStream, this$static.properties, 0, 5)\r\n}\r\n\r\nfunction $WriteEndMarker(this$static, posState) {\r\n //if (!this$static._writeEndMark) {\r\n // return;\r\n //}\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isMatch,\r\n (this$static._state << 4) + posState,\r\n 1,\r\n )\r\n $Encode_3(\r\n this$static._rangeEncoder,\r\n this$static._isRep,\r\n this$static._state,\r\n 0,\r\n )\r\n this$static._state = this$static._state < 7 ? 7 : 10\r\n $Encode_0(this$static._lenEncoder, this$static._rangeEncoder, 0, posState)\r\n var lenToPosState = GetLenToPosState(2)\r\n $Encode_2(\r\n this$static._posSlotEncoder[lenToPosState],\r\n this$static._rangeEncoder,\r\n 63,\r\n )\r\n $EncodeDirectBits(this$static._rangeEncoder, 67108863, 26)\r\n $ReverseEncode(this$static._posAlignEncoder, this$static._rangeEncoder, 15)\r\n}\r\n\r\nfunction GetPosSlot(pos) {\r\n if (pos < 2048) {\r\n return g_FastPos[pos]\r\n }\r\n if (pos < 2097152) {\r\n return g_FastPos[pos >> 10] + 20\r\n }\r\n return g_FastPos[pos >> 20] + 40\r\n}\r\n\r\nfunction GetPosSlot2(pos) {\r\n if (pos < 131072) {\r\n return g_FastPos[pos >> 6] + 12\r\n }\r\n if (pos < 134217728) {\r\n return g_FastPos[pos >> 16] + 32\r\n }\r\n return g_FastPos[pos >> 26] + 52\r\n}\r\n\r\nfunction $Encode(this$static, rangeEncoder, symbol, posState) {\r\n if (symbol < 8) {\r\n $Encode_3(rangeEncoder, this$static._choice, 0, 0)\r\n $Encode_2(this$static._lowCoder[posState], rangeEncoder, symbol)\r\n } else {\r\n symbol -= 8\r\n $Encode_3(rangeEncoder, this$static._choice, 0, 1)\r\n if (symbol < 8) {\r\n $Encode_3(rangeEncoder, this$static._choice, 1, 0)\r\n $Encode_2(this$static._midCoder[posState], rangeEncoder, symbol)\r\n } else {\r\n $Encode_3(rangeEncoder, this$static._choice, 1, 1)\r\n $Encode_2(this$static._highCoder, rangeEncoder, symbol - 8)\r\n }\r\n }\r\n}\r\n\r\nfunction $Encoder$LenEncoder(this$static) {\r\n this$static._choice = initDim(2)\r\n this$static._lowCoder = initDim(16)\r\n this$static._midCoder = initDim(16)\r\n this$static._highCoder = $BitTreeEncoder({}, 8)\r\n for (var posState = 0; posState < 16; ++posState) {\r\n this$static._lowCoder[posState] = $BitTreeEncoder({}, 3)\r\n this$static._midCoder[posState] = $BitTreeEncoder({}, 3)\r\n }\r\n return this$static\r\n}\r\n\r\nfunction $Init_2(this$static, numPosStates) {\r\n InitBitModels(this$static._choice)\r\n for (var posState = 0; posState < numPosStates; ++posState) {\r\n InitBitModels(this$static._lowCoder[posState].Models)\r\n InitBitModels(this$static._midCoder[posState].Models)\r\n }\r\n InitBitModels(this$static._highCoder.Models)\r\n}\r\n\r\nfunction $SetPrices(this$static, posState, numSymbols, prices, st) {\r\n var a0, a1, b0, b1, i\r\n a0 = ProbPrices[this$static._choice[0] >>> 2]\r\n a1 = ProbPrices[(2048 - this$static._choice[0]) >>> 2]\r\n b0 = a1 + ProbPrices[this$static._choice[1] >>> 2]\r\n b1 = a1 + ProbPrices[(2048 - this$static._choice[1]) >>> 2]\r\n i = 0\r\n for (i = 0; i < 8; ++i) {\r\n if (i >= numSymbols) return\r\n prices[st + i] = a0 + $GetPrice_1(this$static._lowCoder[posState], i)\r\n }\r\n for (; i < 16; ++i) {\r\n if (i >= numSymbols) return\r\n prices[st + i] = b0 + $GetPrice_1(this$static._midCoder[posState], i - 8)\r\n }\r\n for (; i < numSymbols; ++i) {\r\n prices[st + i] = b1 + $GetPrice_1(this$static._highCoder, i - 8 - 8)\r\n }\r\n}\r\n\r\nfunction $Encode_0(this$static, rangeEncoder, symbol, posState) {\r\n $Encode(this$static, rangeEncoder, symbol, posState)\r\n if ((this$static._counters[posState] -= 1) == 0) {\r\n $SetPrices(\r\n this$static,\r\n posState,\r\n this$static._tableSize,\r\n this$static._prices,\r\n posState * 272,\r\n )\r\n this$static._counters[posState] = this$static._tableSize\r\n }\r\n}\r\n\r\nfunction $Encoder$LenPriceTableEncoder(this$static) {\r\n $Encoder$LenEncoder(this$static)\r\n this$static._prices = []\r\n this$static._counters = []\r\n return this$static\r\n}\r\n\r\nfunction $GetPrice(this$static, symbol, posState) {\r\n return this$static._prices[posState * 272 + symbol]\r\n}\r\n\r\nfunction $UpdateTables(this$static, numPosStates) {\r\n for (var posState = 0; posState < numPosStates; ++posState) {\r\n $SetPrices(\r\n this$static,\r\n posState,\r\n this$static._tableSize,\r\n this$static._prices,\r\n posState * 272,\r\n )\r\n this$static._counters[posState] = this$static._tableSize\r\n }\r\n}\r\n\r\nfunction $Create_1(this$static, numPosBits, numPrevBits) {\r\n var i, numStates\r\n if (\r\n this$static.m_Coders != null &&\r\n this$static.m_NumPrevBits == numPrevBits &&\r\n this$static.m_NumPosBits == numPosBits\r\n ) {\r\n return\r\n }\r\n this$static.m_NumPosBits = numPosBits\r\n this$static.m_PosMask = (1 << numPosBits) - 1\r\n this$static.m_NumPrevBits = numPrevBits\r\n numStates = 1 << (this$static.m_NumPrevBits + this$static.m_NumPosBits)\r\n this$static.m_Coders = initDim(numStates)\r\n for (i = 0; i < numStates; ++i) {\r\n this$static.m_Coders[i] = $Encoder$LiteralEncoder$Encoder2({})\r\n }\r\n}\r\n\r\nfunction $GetSubCoder(this$static, pos, prevByte) {\r\n return this$static.m_Coders[\r\n ((pos & this$static.m_PosMask) << this$static.m_NumPrevBits) +\r\n ((prevByte & 255) >>> (8 - this$static.m_NumPrevBits))\r\n ]\r\n}\r\n\r\nfunction $Init_3(this$static) {\r\n var i,\r\n numStates = 1 << (this$static.m_NumPrevBits + this$static.m_NumPosBits)\r\n for (i = 0; i < numStates; ++i) {\r\n InitBitModels(this$static.m_Coders[i].m_Encoders)\r\n }\r\n}\r\n\r\nfunction $Encode_1(this$static, rangeEncoder, symbol) {\r\n var bit,\r\n i,\r\n context = 1\r\n for (i = 7; i >= 0; --i) {\r\n bit = (symbol >> i) & 1\r\n $Encode_3(rangeEncoder, this$static.m_Encoders, context, bit)\r\n context = (context << 1) | bit\r\n }\r\n}\r\n\r\nfunction $EncodeMatched(this$static, rangeEncoder, matchByte, symbol) {\r\n var bit,\r\n i,\r\n matchBit,\r\n state,\r\n same = true,\r\n context = 1\r\n for (i = 7; i >= 0; --i) {\r\n bit = (symbol >> i) & 1\r\n state = context\r\n if (same) {\r\n matchBit = (matchByte >> i) & 1\r\n state += (1 + matchBit) << 8\r\n same = matchBit == bit\r\n }\r\n $Encode_3(rangeEncoder, this$static.m_Encoders, state, bit)\r\n context = (context << 1) | bit\r\n }\r\n}\r\n\r\nfunction $Encoder$LiteralEncoder$Encoder2(this$static) {\r\n this$static.m_Encoders = initDim(768)\r\n return this$static\r\n}\r\n\r\nfunction $GetPrice_0(this$static, matchMode, matchByte, symbol) {\r\n var bit,\r\n context = 1,\r\n i = 7,\r\n matchBit,\r\n price = 0\r\n if (matchMode) {\r\n for (; i >= 0; --i) {\r\n matchBit = (matchByte >> i) & 1\r\n bit = (symbol >> i) & 1\r\n price += GetPrice(\r\n this$static.m_Encoders[((1 + matchBit) << 8) + context],\r\n bit,\r\n )\r\n context = (context << 1) | bit\r\n if (matchBit != bit) {\r\n --i\r\n break\r\n }\r\n }\r\n }\r\n for (; i >= 0; --i) {\r\n bit = (symbol >> i) & 1\r\n price += GetPrice(this$static.m_Encoders[context], bit)\r\n context = (context << 1) | bit\r\n }\r\n return price\r\n}\r\n\r\nfunction $MakeAsChar(this$static) {\r\n this$static.BackPrev = -1\r\n this$static.Prev1IsChar = 0\r\n}\r\n\r\nfunction $MakeAsShortRep(this$static) {\r\n this$static.BackPrev = 0\r\n this$static.Prev1IsChar = 0\r\n}\r\n/** ce */\r\n/** ds */\r\n/**\r\n * Decoder for bit tree structures\r\n */\r\nclass BitTreeDecoder {\r\n NumBitLevels: number\r\n Models: number[]\r\n\r\n constructor(numBitLevels: number) {\r\n this.NumBitLevels = numBitLevels\r\n this.Models = initDim(1 << numBitLevels)\r\n }\r\n\r\n decode(rangeDecoder: any): number {\r\n let m = 1\r\n for (let bitIndex = this.NumBitLevels; bitIndex != 0; bitIndex -= 1) {\r\n m = (m << 1) + $DecodeBit(rangeDecoder, this.Models, m)\r\n }\r\n return m - (1 << this.NumBitLevels)\r\n }\r\n\r\n reverseDecode(rangeDecoder: any): number {\r\n let m = 1\r\n let symbol = 0\r\n for (let bitIndex = 0; bitIndex < this.NumBitLevels; ++bitIndex) {\r\n const bit = $DecodeBit(rangeDecoder, this.Models, m)\r\n m <<= 1\r\n m += bit\r\n symbol |= bit << bitIndex\r\n }\r\n return symbol\r\n }\r\n\r\n static reverseDecode(\r\n Models: number[],\r\n startIndex: number,\r\n rangeDecoder: any,\r\n NumBitLevels: number,\r\n ): number {\r\n let m = 1\r\n let symbol = 0\r\n for (let bitIndex = 0; bitIndex < NumBitLevels; ++bitIndex) {\r\n const bit = $DecodeBit(rangeDecoder, Models, startIndex + m)\r\n m <<= 1\r\n m += bit\r\n symbol |= bit << bitIndex\r\n }\r\n return symbol\r\n }\r\n}\r\n\r\n// Legacy function wrappers for compatibility during refactoring\r\nfunction $BitTreeDecoder(this$static: any, numBitLevels: number): any {\r\n this$static.NumBitLevels = numBitLevels\r\n this$static.Models = initDim(1 << numBitLevels)\r\n return this$static\r\n}\r\nfunction $Decode_0(this$static: any, rangeDecoder: any): number {\r\n let m = 1\r\n for (let bitIndex = this$static.NumBitLevels; bitIndex != 0; bitIndex -= 1) {\r\n m = (m << 1) + $DecodeBit(rangeDecoder, this$static.Models, m)\r\n }\r\n return m - (1 << this$static.NumBitLevels)\r\n}\r\nfunction $ReverseDecode(this$static: any, rangeDecoder: any): number {\r\n let m = 1\r\n let symbol = 0\r\n for (let bitIndex = 0; bitIndex < this$static.NumBitLevels; ++bitIndex) {\r\n const bit = $DecodeBit(rangeDecoder, this$static.Models, m)\r\n m <<= 1\r\n m += bit\r\n symbol |= bit << bitIndex\r\n }\r\n return symbol\r\n}\r\nfunction ReverseDecode(\r\n Models: number[],\r\n startIndex: number,\r\n rangeDecoder: any,\r\n NumBitLevels: number,\r\n): number {\r\n return BitTreeDecoder.reverseDecode(\r\n Models,\r\n startIndex,\r\n rangeDecoder,\r\n NumBitLevels,\r\n )\r\n}\r\n/** de */\r\n/** cs */\r\n/**\r\n * Encoder for bit tree structures\r\n */\r\nclass BitTreeEncoder {\r\n NumBitLevels: number\r\n Models: number[]\r\n\r\n constructor(numBitLevels: number) {\r\n this.NumBitLevels = numBitLevels\r\n this.Models = initDim(1 << numBitLevels)\r\n }\r\n\r\n encode(rangeEncoder: any, symbol: number): void {\r\n let m = 1\r\n for (let bitIndex = this.NumBitLevels; bitIndex != 0; ) {\r\n bitIndex -= 1\r\n const bit = (symbol >>> bitIndex) & 1\r\n $Encode_3(rangeEncoder, this.Models, m, bit)\r\n m = (m << 1) | bit\r\n }\r\n }\r\n\r\n getPrice(symbol: number): number {\r\n let m = 1\r\n let price = 0\r\n for (let bitIndex = this.NumBitLevels; bitIndex != 0; ) {\r\n bitIndex -= 1\r\n const bit = (symbol >>> bitIndex) & 1\r\n price += GetPrice(this.Models[m], bit)\r\n m = (m << 1) + bit\r\n }\r\n return price\r\n }\r\n\r\n reverseEncode(rangeEncoder: any, symbol: number): void {\r\n let m = 1\r\n for (let i = 0; i < this.NumBitLevels; ++i) {\r\n const bit = symbol & 1\r\n $Encode_3(rangeEncoder, this.Models, m, bit)\r\n m = (m << 1) | bit\r\n symbol >>= 1\r\n }\r\n }\r\n\r\n reverseGetPrice(symbol: number): number {\r\n let m = 1\r\n let price = 0\r\n for (let i = this.NumBitLevels; i != 0; i -= 1) {\r\n const bit = symbol & 1\r\n symbol >>>= 1\r\n price += GetPrice(this.Models[m], bit)\r\n m = (m << 1) | bit\r\n }\r\n return price\r\n }\r\n\r\n static reverseEncode(\r\n Models: number[],\r\n startIndex: number,\r\n rangeEncoder: any,\r\n NumBitLevels: number,\r\n symbol: number,\r\n ): void {\r\n let m = 1\r\n for (let i = 0; i < NumBitLevels; ++i) {\r\n const bit = symbol & 1\r\n $Encode_3(rangeEncoder, Models, startIndex + m, bit)\r\n m = (m << 1) | bit\r\n symbol >>= 1\r\n }\r\n }\r\n\r\n static reverseGetPrice(\r\n Models: number[],\r\n startIndex: number,\r\n NumBitLevels: number,\r\n symbol: number,\r\n ): number {\r\n let m = 1\r\n let price = 0\r\n for (let i = NumBitLevels; i != 0; i -= 1) {\r\n const bit = symbol & 1\r\n symbol >>>= 1\r\n price +=\r\n ProbPrices[(((Models[startIndex + m] - bit) ^ -bit) & 2047) >>> 2]\r\n m = (m << 1) | bit\r\n }\r\n return price\r\n }\r\n}\r\n\r\n// Legacy function wrappers for compatibility during refactoring\r\nfunction $BitTreeEncoder(this$static: any, numBitLevels: number): any {\r\n this$static.NumBitLevels = numBitLevels\r\n this$static.Models = initDim(1 << numBitLevels)\r\n return this$static\r\n}\r\nfunction $Encode_2(this$static: any, rangeEncoder: any, symbol: number): void {\r\n let m = 1\r\n for (let bitIndex = this$static.NumBitLevels; bitIndex != 0; ) {\r\n bitIndex -= 1\r\n const bit = (symbol >>> bitIndex) & 1\r\n $Encode_3(rangeEncoder, this$static.Models, m, bit)\r\n m = (m << 1) | bit\r\n }\r\n}\r\nfunction $GetPrice_1(this$static: any, symbol: number): number {\r\n let m = 1\r\n let price = 0\r\n for (let bitIndex = this$static.NumBitLevels; bitIndex != 0; ) {\r\n bitIndex -= 1\r\n const bit = (symbol >>> bitIndex) & 1\r\n price += GetPrice(this$static.Models[m], bit)\r\n m = (m << 1) + bit\r\n }\r\n return price\r\n}\r\nfunction $ReverseEncode(\r\n this$static: any,\r\n rangeEncoder: any,\r\n symbol: number,\r\n): void {\r\n let m = 1\r\n for (let i = 0; i < this$static.NumBitLevels; ++i) {\r\n const bit = symbol & 1\r\n $Encode_3(rangeEncoder, this$static.Models, m, bit)\r\n m = (m << 1) | bit\r\n symbol >>= 1\r\n }\r\n}\r\nfunction $ReverseGetPrice(this$static: any, symbol: number): number {\r\n let m = 1\r\n let price = 0\r\n for (let i = this$static.NumBitLevels; i != 0; i -= 1) {\r\n const bit = symbol & 1\r\n symbol >>>= 1\r\n price += GetPrice(this$static.Models[m], bit)\r\n m = (m << 1) | bit\r\n }\r\n return price\r\n}\r\nfunction ReverseEncode(\r\n Models: number[],\r\n startIndex: number,\r\n rangeEncoder: any,\r\n NumBitLevels: number,\r\n symbol: number,\r\n): void {\r\n BitTreeEncoder.reverseEncode(\r\n Models,\r\n startIndex,\r\n rangeEncoder,\r\n NumBitLevels,\r\n symbol,\r\n )\r\n}\r\nfunction ReverseGetPrice(\r\n Models: number[],\r\n startIndex: number,\r\n NumBitLevels: number,\r\n symbol: number,\r\n): number {\r\n return BitTreeEncoder.reverseGetPrice(\r\n Models,\r\n startIndex,\r\n NumBitLevels,\r\n symbol,\r\n )\r\n}\r\n/** ce */\r\n/** ds */\r\nfunction $DecodeBit(this$static, probs, index) {\r\n var newBound,\r\n prob = probs[index]\r\n newBound = (this$static.Range >>> 11) * prob\r\n if ((this$static.Code ^ -2147483648) < (newBound ^ -2147483648)) {\r\n this$static.Range = newBound\r\n probs[index] = ((prob + ((2048 - prob) >>> 5)) << 16) >> 16\r\n if (!(this$static.Range & -16777216)) {\r\n this$static.Code = (this$static.Code << 8) | $read(this$static.Stream)\r\n this$static.Range <<= 8\r\n }\r\n return 0\r\n } else {\r\n this$static.Range -= newBound\r\n this$static.Code -= newBound\r\n probs[index] = ((prob - (prob >>> 5)) << 16) >> 16\r\n if (!(this$static.Range & -16777216)) {\r\n this$static.Code = (this$static.Code << 8) | $read(this$static.Stream)\r\n this$static.Range <<= 8\r\n }\r\n return 1\r\n }\r\n}\r\n\r\nfunction $DecodeDirectBits(this$static, numTotalBits) {\r\n var i,\r\n t,\r\n result = 0\r\n for (i = numTotalBits; i != 0; i -= 1) {\r\n this$static.Range >>>= 1\r\n t = (this$static.Code - this$static.Range) >>> 31\r\n this$static.Code -= this$static.Range & (t - 1)\r\n result = (result << 1) | (1 - t)\r\n if (!(this$static.Range & -16777216)) {\r\n this$static.Code = (this$static.Code << 8) | $read(this$static.Stream)\r\n this$static.Range <<= 8\r\n }\r\n }\r\n return result\r\n}\r\n\r\nfunction $Init_8(this$static) {\r\n this$static.Code = 0\r\n this$static.Range = -1\r\n for (var i = 0; i < 5; ++i) {\r\n this$static.Code = (this$static.Code << 8) | $read(this$static.Stream)\r\n }\r\n}\r\n/** de */\r\n/** cs */\r\n/**\r\n * Probability price lookup table for range encoding\r\n */\r\nclass ProbPricesClass {\r\n static readonly table: number[] = (() => {\r\n const table: number[] = []\r\n for (let i = 8; i >= 0; --i) {\r\n let start = 1\r\n start <<= 9 - i - 1\r\n let end = 1\r\n end <<= 9 - i\r\n for (let j = start; j < end; ++j) {\r\n table[j] = (i << 6) + (((end - j) << 6) >>> (9 - i - 1))\r\n }\r\n }\r\n return table\r\n })()\r\n}\r\n\r\nconst ProbPrices = ProbPricesClass.table\r\n\r\nfunction $Encode_3(this$static, probs, index, symbol) {\r\n var newBound,\r\n prob = probs[index]\r\n newBound = (this$static.Range >>> 11) * prob\r\n if (!symbol) {\r\n this$static.Range = newBound\r\n probs[index] = ((prob + ((2048 - prob) >>> 5)) << 16) >> 16\r\n } else {\r\n this$static.Low = add(\r\n this$static.Low,\r\n and(fromInt(newBound), [4294967295, 0]),\r\n )\r\n this$static.Range -= newBound\r\n probs[index] = ((prob - (prob >>> 5)) << 16) >> 16\r\n }\r\n if (!(this$static.Range & -16777216)) {\r\n this$static.Range <<= 8\r\n $ShiftLow(this$static)\r\n }\r\n}\r\n\r\nfunction $EncodeDirectBits(this$static, v, numTotalBits) {\r\n for (var i = numTotalBits - 1; i >= 0; i -= 1) {\r\n this$static.Range >>>= 1\r\n if (((v >>> i) & 1) == 1) {\r\n this$static.Low = add(this$static.Low, fromInt(this$static.Range))\r\n }\r\n if (!(this$static.Range & -16777216)) {\r\n this$static.Range <<= 8\r\n $ShiftLow(this$static)\r\n }\r\n }\r\n}\r\n\r\nfunction $GetProcessedSizeAdd(this$static) {\r\n return add(\r\n add(fromInt(this$static._cacheSize), this$static._position),\r\n [4, 0],\r\n )\r\n}\r\n\r\nfunction $Init_9(this$static) {\r\n this$static._position = P0_longLit\r\n this$static.Low = P0_longLit\r\n this$static.Range = -1\r\n this$static._cacheSize = 1\r\n this$static._cache = 0\r\n}\r\n\r\nfunction $ShiftLow(this$static) {\r\n var temp,\r\n LowHi = lowBits_0(shru(this$static.Low, 32))\r\n if (LowHi != 0 || compare(this$static.Low, [4278190080, 0]) < 0) {\r\n this$static._position = add(\r\n this$static._position,\r\n fromInt(this$static._cacheSize),\r\n )\r\n temp = this$static._cache\r\n do {\r\n $write(this$static.Stream, temp + LowHi)\r\n temp = 255\r\n } while ((this$static._cacheSize -= 1) != 0)\r\n this$static._cache = lowBits_0(this$static.Low) >>> 24\r\n }\r\n this$static._cacheSize += 1\r\n this$static.Low = shl(and(this$static.Low, [16777215, 0]), 8)\r\n}\r\n\r\n/** ce */\r\n/** ds */\r\n/**\r\n * Decode UTF-8 byte array to string, or return original if binary data\r\n */\r\nfunction decode(utf: Uint8Array): string | Uint8Array {\r\n let i = 0\r\n let j = 0\r\n let x: number\r\n let y: number\r\n let z: number\r\n const l = utf.length\r\n const buf: string[] = []\r\n const charCodes: number[] = []\r\n\r\n for (; i < l; ++i, ++j) {\r\n x = utf[i] & 255\r\n if (!(x & 128)) {\r\n if (!x) {\r\n // It appears that this is binary data, so it cannot be converted to a string, so just send it back.\r\n return utf\r\n }\r\n charCodes[j] = x\r\n } else if ((x & 224) == 192) {\r\n if (i + 1 >= l) {\r\n // It appears that this is binary data, so it cannot be converted to a string, so just send it back.\r\n return utf\r\n }\r\n y = utf[++i] & 255\r\n if ((y & 192) != 128) {\r\n // It appears that this is binary data, so it cannot be converted to a string, so just send it back.\r\n return utf\r\n }\r\n charCodes[j] = ((x & 31) << 6) | (y & 63)\r\n } else if ((x & 240) == 224) {\r\n if (i + 2 >= l) {\r\n // It appears that this is binary data, so it cannot be converted to a string, so just send it back.\r\n return utf\r\n }\r\n y = utf[++i] & 255\r\n if ((y & 192) != 128) {\r\n // It appears that this is binary data, so it cannot be converted to a string, so just send it back.\r\n return utf\r\n }\r\n z = utf[++i] & 255\r\n if ((z & 192) != 128) {\r\n // It appears that this is binary data, so it cannot be converted to a string, so just send it back.\r\n return utf\r\n }\r\n charCodes[j] = ((x & 15) << 12) | ((y & 63) << 6) | (z & 63)\r\n } else {\r\n // It appears that this is binary data, so it cannot be converted to a string, so just send it back.\r\n return utf\r\n }\r\n if (j == 16383) {\r\n buf.push(String.fromCharCode.apply(String, charCodes))\r\n j = -1\r\n }\r\n }\r\n if (j > 0) {\r\n charCodes.length = j\r\n buf.push(String.fromCharCode.apply(String, charCodes))\r\n }\r\n return buf.join('')\r\n}\r\n/** de */\r\n/** cs */\r\nfunction encode(s: any): any {\r\n var ch,\r\n chars: any[] = [],\r\n data: any[] | undefined,\r\n elen = 0,\r\n i,\r\n l = s.length\r\n /// Be able to handle binary arrays and buffers.\r\n if (typeof s == 'object') {\r\n if (s instanceof ArrayBuffer) {\r\n return new Uint8Array(s)\r\n }\r\n if (ArrayBuffer.isView(s)) {\r\n return new Uint8Array(s.buffer, s.byteOffset, s.byteLength)\r\n }\r\n return s\r\n } else {\r\n $getChars(s, 0, l, chars, 0)\r\n }\r\n /// Add extra spaces in the array to break up the unicode symbols.\r\n for (i = 0; i < l; ++i) {\r\n ch = chars[i]\r\n if (ch >= 1 && ch <= 127) {\r\n ++elen\r\n } else if (!ch || (ch >= 128 && ch <= 2047)) {\r\n elen += 2\r\n } else {\r\n elen += 3\r\n }\r\n }\r\n data = [] as any[]\r\n elen = 0\r\n for (i = 0; i < l; ++i) {\r\n ch = chars[i]\r\n if (ch >= 1 && ch <= 127) {\r\n data[elen++] = (ch << 24) >> 24\r\n } else if (!ch || (ch >= 128 && ch <= 2047)) {\r\n data[elen++] = ((192 | ((ch >> 6) & 31)) << 24) >> 24\r\n data[elen++] = ((128 | (ch & 63)) << 24) >> 24\r\n } else {\r\n data[elen++] = ((224 | ((ch >> 12) & 15)) << 24) >> 24\r\n data[elen++] = ((128 | ((ch >> 6) & 63)) << 24) >> 24\r\n data[elen++] = ((128 | (ch & 63)) << 24) >> 24\r\n }\r\n }\r\n return data\r\n}\r\n/** ce */\r\n\r\n/** cs */\r\nexport function compress(\r\n str: string | Uint8Array | ArrayBuffer,\r\n mode: CompressMode,\r\n on_finish?: OnFinishCallback | number,\r\n on_progress?: OnProgressCallback,\r\n): Uint8Array | void {\r\n const this$static: any = {}\r\n let percent: number\r\n let cbn: number | undefined /// A callback number should be supplied instead of on_finish() if we are using Web Workers.\r\n const sync =\r\n typeof on_finish == 'undefined' && typeof on_progress == 'undefined'\r\n\r\n let on_finish_fn: OnFinishCallback | undefined\r\n let on_progress_fn: OnProgressCallback | undefined\r\n\r\n if (typeof on_finish != 'function') {\r\n cbn = on_finish\r\n on_finish_fn = undefined\r\n on_progress_fn = undefined\r\n } else {\r\n on_finish_fn = on_finish\r\n on_progress_fn = on_progress\r\n }\r\n\r\n on_progress_fn =\r\n on_progress_fn ||\r\n function (percent: number) {\r\n if (typeof cbn == 'undefined') return\r\n\r\n return update_progress(percent, cbn)\r\n }\r\n\r\n on_finish_fn =\r\n on_finish_fn ||\r\n function (res: any, err: any) {\r\n if (typeof cbn == 'undefined') return\r\n // Only call postMessage if we're in a Worker context\r\n if (\r\n typeof self !== 'undefined' &&\r\n typeof self.postMessage === 'function'\r\n ) {\r\n return self.postMessage({\r\n action: action_compress,\r\n cbn: cbn,\r\n result: res,\r\n error: err,\r\n })\r\n }\r\n }\r\n\r\n if (sync) {\r\n this$static.c = $LZMAByteArrayCompressor(\r\n {},\r\n encode(str),\r\n get_mode_obj(mode),\r\n )\r\n while ($processChunkEncode(this$static.c.chunker));\r\n return $toByteArray(this$static.c.output)\r\n }\r\n\r\n try {\r\n this$static.c = $LZMAByteArrayCompressor(\r\n {},\r\n encode(str),\r\n get_mode_obj(mode),\r\n )\r\n\r\n on_progress_fn!(0)\r\n } catch (err) {\r\n return on_finish_fn!(null, err as Error)\r\n }\r\n\r\n function do_action() {\r\n try {\r\n const start = new Date().getTime()\r\n\r\n while ($processChunkEncode(this$static.c.chunker)) {\r\n percent =\r\n toDouble(this$static.c.chunker.inBytesProcessed) /\r\n toDouble(this$static.c.length_0)\r\n /// If about 200 miliseconds have passed, update the progress.\r\n if (new Date().getTime() - start > 200) {\r\n on_progress_fn!(percent)\r\n\r\n wait(do_action, 0)\r\n return 0\r\n }\r\n }\r\n\r\n on_progress_fn!(1)\r\n\r\n const res = $toByteArray(this$static.c.output)\r\n\r\n /// delay so we don't catch errors from the on_finish handler\r\n wait(on_finish_fn!.bind(null, res), 0)\r\n } catch (err) {\r\n on_finish_fn!(null, err as Error)\r\n }\r\n }\r\n\r\n ///NOTE: We need to wait to make sure it is always async.\r\n wait(do_action, 0)\r\n}\r\n/** ce */\r\n/** ds */\r\nexport function decompress(\r\n byte_arr: Uint8Array | ArrayBuffer,\r\n on_finish?: OnFinishCallback | number,\r\n on_progress?: OnProgressCallback,\r\n): string | Uint8Array | void {\r\n if (byte_arr instanceof ArrayBuffer) {\r\n byte_arr = new Uint8Array(byte_arr)\r\n } else if (ArrayBuffer.isView(byte_arr)) {\r\n byte_arr = new Uint8Array(\r\n byte_arr.buffer,\r\n byte_arr.byteOffset,\r\n byte_arr.byteLength,\r\n )\r\n }\r\n const this$static: any = {}\r\n let percent: number\r\n let cbn: number | undefined /// A callback number should be supplied instead of on_finish() if we are using Web Workers.\r\n let has_progress: boolean\r\n let len: number\r\n const sync =\r\n typeof on_finish == 'undefined' && typeof on_progress == 'undefined'\r\n\r\n let on_finish_fn: OnFinishCallback | undefined\r\n let on_progress_fn: OnProgressCallback | undefined\r\n\r\n if (typeof on_finish != 'function') {\r\n cbn = on_finish\r\n on_finish_fn = undefined\r\n on_progress_fn = undefined\r\n } else {\r\n on_finish_fn = on_finish\r\n on_progress_fn = on_progress\r\n }\r\n\r\n on_progress_fn =\r\n on_progress_fn ||\r\n function (percent: number) {\r\n if (typeof cbn == 'undefined') return\r\n\r\n return update_progress(has_progress ? percent : -1, cbn)\r\n }\r\n\r\n on_finish_fn =\r\n on_finish_fn ||\r\n function (res: any, err: any) {\r\n if (typeof cbn == 'undefined') return\r\n // Only call postMessage if we're in a Worker context\r\n if (\r\n typeof self !== 'undefined' &&\r\n typeof self.postMessage === 'function'\r\n ) {\r\n return self.postMessage({\r\n action: action_decompress,\r\n cbn: cbn,\r\n result: res,\r\n error: err,\r\n })\r\n }\r\n }\r\n\r\n if (sync) {\r\n this$static.d = $LZMAByteArrayDecompressor({}, byte_arr)\r\n while ($processChunkDecode(this$static.d.chunker));\r\n return decode($toByteArray(this$static.d.output))\r\n }\r\n\r\n try {\r\n this$static.d = $LZMAByteArrayDecompressor({}, byte_arr)\r\n\r\n len = toDouble(this$static.d.length_0)\r\n\r\n ///NOTE: If the data was created via a stream, it will not have a length value, and therefore we can't calculate the progress.\r\n has_progress = len > -1\r\n\r\n on_progress_fn!(0)\r\n } catch (err) {\r\n return on_finish_fn!(null, err as Error)\r\n }\r\n\r\n function do_action() {\r\n try {\r\n let i = 0\r\n const start = new Date().getTime()\r\n while ($processChunkDecode(this$static.d.chunker)) {\r\n if (++i % 1000 == 0 && new Date().getTime() - start > 200) {\r\n if (has_progress) {\r\n percent = toDouble(this$static.d.chunker.decoder.nowPos64) / len\r\n /// If about 200 miliseconds have passed, update the progress.\r\n on_progress_fn!(percent)\r\n }\r\n\r\n ///NOTE: This allows other code to run, like the browser to update.\r\n wait(do_action, 0)\r\n return 0\r\n }\r\n }\r\n\r\n on_progress_fn!(1)\r\n\r\n const res = decode($toByteArray(this$static.d.output))\r\n\r\n /// delay so we don't catch errors from the on_finish handler\r\n wait(on_finish_fn!.bind(null, res), 0)\r\n } catch (err) {\r\n on_finish_fn!(null, err as Error)\r\n }\r\n }\r\n\r\n ///NOTE: We need to wait to make sure it is always async.\r\n wait(do_action, 0)\r\n}\r\n/** de */\r\n/** cs */\r\nvar get_mode_obj = (function () {\r\n /// s is dictionarySize\r\n /// f is fb\r\n /// m is matchFinder\r\n ///NOTE: Because some values are always the same, they have been removed.\r\n /// lc is always 3\r\n /// lp is always 0\r\n /// pb is always 2\r\n var modes = [\r\n { s: 16, f: 64, m: 0 },\r\n { s: 20, f: 64, m: 0 },\r\n { s: 19, f: 64, m: 1 },\r\n { s: 20, f: 64, m: 1 },\r\n { s: 21, f: 128, m: 1 },\r\n { s: 22, f: 128, m: 1 },\r\n { s: 23, f: 128, m: 1 },\r\n { s: 24, f: 255, m: 1 },\r\n { s: 25, f: 255, m: 1 },\r\n ]\r\n\r\n return function (mode) {\r\n return modes[mode - 1] || modes[6]\r\n }\r\n})()\r\n/** ce */","/**\r\n * Synchronous LZMA compression/decompression API\r\n *\r\n * These functions block until the operation completes.\r\n * For large data, consider using the async API instead.\r\n */\r\n\r\n// @ts-nocheck\r\n\r\nimport {\r\n compress as compressCore,\r\n decompress as decompressCore,\r\n} from './lzma_main.js'\r\nimport type { CompressMode } from './types.js'\r\n\r\n/**\r\n * Compress data synchronously using LZMA algorithm\r\n *\r\n * @param input - Data to compress (string, Uint8Array, or ArrayBuffer)\r\n * @param mode - Compression level from 1 (fastest) to 9 (best compression). Default is 9.\r\n * @returns Compressed data as Uint8Array\r\n *\r\n * @example\r\n * ```ts\r\n * import { compressSync } from 'lzma-web/sync'\r\n * const compressed = compressSync('Hello, World!', 1)\r\n * ```\r\n */\r\nexport function compressSync(\r\n input: string | Uint8Array | ArrayBuffer,\r\n mode: CompressMode = 9,\r\n): Uint8Array {\r\n // Call without callbacks to get synchronous behavior\r\n const result = compressCore(input, mode)\r\n if (!(result instanceof Uint8Array)) {\r\n throw new Error('Compression failed: unexpected result type')\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * Decompress LZMA-compressed data synchronously\r\n *\r\n * @param input - Compressed data (Uint8Array or ArrayBuffer)\r\n * @returns Decompressed data as string (if valid UTF-8) or Uint8Array (if binary)\r\n *\r\n * @example\r\n * ```ts\r\n * import { decompressSync } from 'lzma-web/sync'\r\n * const decompressed = decompressSync(compressedData)\r\n * ```\r\n */\r\nexport function decompressSync(\r\n input: Uint8Array | ArrayBuffer,\r\n): string | Uint8Array {\r\n // Call without callbacks to get synchronous behavior\r\n const result = decompressCore(input)\r\n if (result === undefined || result === null) {\r\n throw new Error('Decompression failed: no result returned')\r\n }\r\n return result\r\n}","import { CompressionType } from \"../Enums/CompressionType.js\";\r\nimport { decompressBlock as decompressLz4 } from \"./Lz4/lz4.js\";\r\nimport { decompressSync } from \"./Lzma/sync.js\"\r\n\r\nexport function Decompress(input: Uint8Array, output: Uint8Array, type: CompressionType, uncompressedSize: number): number {\r\n let numWrite = -1;\r\n\r\n switch (type) {\r\n case CompressionType.Lz4:\r\n case CompressionType.Lz4HC:\r\n numWrite = decompressLz4(input, output, 0, input.length, 0);\r\n break;\r\n case CompressionType.Lzma:\r\n let lzmaStream = buildLzmaStream(input, uncompressedSize);\r\n\r\n let decompressed = decompressSync(lzmaStream);\r\n if (typeof decompressed === \"string\") {\r\n console.error(\"LZMA Decompressor returned string.\");\r\n break;\r\n }\r\n\r\n numWrite = decompressed.length;\r\n output.set(decompressed);\r\n break;\r\n default:\r\n console.error(`CompressionType not supported: ${type}`);\r\n }\r\n\r\n return numWrite;\r\n}\r\n\r\nfunction buildLzmaStream(rawData: Uint8Array, uncompressedSize: number): Uint8Array {\r\n const props = rawData.slice(0, 5);\r\n const payload = rawData.slice(5);\r\n\r\n const result = new Uint8Array(\r\n 5 + 8 + payload.length\r\n );\r\n\r\n result.set(props, 0);\r\n\r\n const view = new DataView(result.buffer);\r\n view.setBigUint64(5, BigInt(uncompressedSize), true);\r\n\r\n result.set(payload, 13);\r\n\r\n return result;\r\n}","import { BundleHeader } from \"./Models/BundleHeader.js\";\r\nimport { BundleNode } from \"./Models/BundleNode.js\";\r\nimport { BundleStorageBlock } from \"./Models/BundleStorageBlock.js\";\r\nimport { StreamFile } from \"../StreamFile.js\";\r\nimport { FileReader } from \"../../Util/FileReader.js\";\r\nimport { EndianBinaryReader } from \"../../Util/EndianBinaryReader.js\";\r\nimport { ArchiveFlags } from \"../../Enums/ArchiveFlags.js\"\r\nimport { CompressionType } from \"../../Enums/CompressionType.js\";\r\nimport { StorageBlockFlags } from \"../../Enums/StorageBlockFlags.js\";\r\nimport { Decompress } from \"../../Decompression/Decompression.js\"\r\nimport path from \"../../Util/path/index.js\";\r\n\r\nexport class BundleFile {\r\n public readonly IsDataAfterBundle: boolean;\r\n public m_Header: BundleHeader;\r\n private m_BlocksInfo: BundleStorageBlock[] = [];\r\n private m_DirectoryInfo: BundleNode[] = [];\r\n public fileList: StreamFile[] = [];\r\n\r\n constructor(reader: FileReader, isMultiBundle: boolean = false) {\r\n this.m_Header = new BundleHeader();\r\n this.m_Header.ReadHeader(reader);\r\n\r\n switch (this.m_Header.signature) {\r\n case \"UnityFS\":\r\n this.m_Header.ReadHeader2(reader);\r\n\r\n console.log(this.m_Header);\r\n\r\n if (this.m_Header.size > reader.view.byteLength) {\r\n throw new Error(`Bundle size is wrong. Header claims ${this.m_Header.size}, reader is ${reader.view.byteLength}`);\r\n }\r\n\r\n this.IsDataAfterBundle = BigInt(reader.view.byteLength) - this.m_Header.size > 200;\r\n\r\n this.UnityCnCheck(reader);\r\n\r\n this.ReadBlocksInfoAndDirectory(reader);\r\n\r\n if (this.IsUncompressedBundle() && !this.IsDataAfterBundle && !isMultiBundle) {\r\n this.ReadFiles(reader.buffer, reader.offset);\r\n }\r\n\r\n this.ReadFiles(this.ReadBlocks(reader));\r\n\r\n break;\r\n default:\r\n throw new Error(`Cannot decompress bundle for ${this.m_Header.signature}`);\r\n }\r\n }\r\n\r\n private ReadBlocksInfoAndDirectory(reader: FileReader) {\r\n if (this.m_Header.version >= 7) {\r\n reader.AlignStream(16);\r\n } else if (this.m_Header.unityRevision.compareTo([2019, 4]) >= 0 && this.m_Header.flags != ArchiveFlags.BlocksAndDirectoryInfoCombined) {\r\n const preAlign = reader.offset;\r\n const alignData = reader.ReadBytes((16 - Math.trunc((preAlign % 16))) % 16);\r\n\r\n if (alignData.some(x => x !== 0)) {\r\n reader.offset = preAlign;\r\n }\r\n }\r\n\r\n if (this.m_Header.uncompressedBlocksInfoSize < 0 || this.m_Header.compressedBlocksInfoSize < 0 || this.m_Header.compressedBlocksInfoSize > reader.view.byteLength) {\r\n throw new Error(\"BlockInfo is wrong. Encryption?\");\r\n }\r\n\r\n let blocksInfoBytes = new Uint8Array();\r\n\r\n if ((this.m_Header.flags & ArchiveFlags.BlocksInfoAtTheEnd) != 0) {\r\n const pos = reader.offset;\r\n\r\n reader.offset = Number(this.m_Header.size - BigInt(this.m_Header.compressedBlocksInfoSize));\r\n blocksInfoBytes = new Uint8Array(reader.ReadBytes(Number(this.m_Header.compressedBlocksInfoSize)));\r\n\r\n reader.offset = pos;\r\n } else {\r\n blocksInfoBytes = new Uint8Array(reader.ReadBytes(Number(this.m_Header.compressedBlocksInfoSize)));\r\n }\r\n\r\n let numWrite = 0;\r\n let blocksInfoUncompressedStream = new Uint8Array(0);\r\n const compressionType = (this.m_Header.flags & ArchiveFlags.CompressionTypeMask) as CompressionType\r\n switch (compressionType) {\r\n case CompressionType.None:\r\n blocksInfoUncompressedStream = new Uint8Array(blocksInfoBytes);\r\n numWrite = this.m_Header.compressedBlocksInfoSize;\r\n break;\r\n case CompressionType.Lzma:\r\n case CompressionType.Lz4:\r\n case CompressionType.Lz4HC:\r\n blocksInfoUncompressedStream = new Uint8Array(this.m_Header.uncompressedBlocksInfoSize);\r\n numWrite = Decompress(blocksInfoBytes, blocksInfoUncompressedStream, compressionType, this.m_Header.uncompressedBlocksInfoSize);\r\n break;\r\n default:\r\n throw new Error(`Not handled compression: ${compressionType}`);\r\n }\r\n\r\n if (numWrite != this.m_Header.uncompressedBlocksInfoSize) {\r\n throw new Error(`Failed to decompress. Got ${numWrite}, expected ${this.m_Header.uncompressedBlocksInfoSize}`);\r\n }\r\n\r\n let blocksInfoReader = new EndianBinaryReader(blocksInfoUncompressedStream.buffer);\r\n\r\n blocksInfoReader.ReadBytes(16);\r\n\r\n const blocksInfoCount = blocksInfoReader.ReadInt32();\r\n this.m_BlocksInfo = new Array(blocksInfoCount);\r\n\r\n for (let i = 0; i < blocksInfoCount; i++) {\r\n this.m_BlocksInfo[i] = new BundleStorageBlock(blocksInfoReader);\r\n }\r\n\r\n console.log(this.m_BlocksInfo);\r\n\r\n const nodesCount = blocksInfoReader.ReadInt32();\r\n this.m_DirectoryInfo = new Array(nodesCount);\r\n\r\n for (let i = 0; i < nodesCount; i++) {\r\n this.m_DirectoryInfo[i] = new BundleNode(blocksInfoReader);\r\n }\r\n\r\n console.log(this.m_DirectoryInfo);\r\n\r\n if ((this.m_Header.flags & ArchiveFlags.BlockInfoNeedPaddingAtStart) != 0) {\r\n reader.AlignStream(16);\r\n }\r\n }\r\n\r\n private UnityCnCheck(_: FileReader) {\r\n return;\r\n }\r\n\r\n private IsUncompressedBundle(): boolean {\r\n return this.m_BlocksInfo.every(\r\n x => ((x.flags & StorageBlockFlags.CompressionTypeMask) as CompressionType)\r\n === CompressionType.None\r\n );\r\n }\r\n\r\n private ReadBlocks(reader: FileReader): ArrayBuffer {\r\n let chunks: Uint8Array[] = []\r\n\r\n for (let i = 0; i < this.m_BlocksInfo.length; i++) {\r\n const blockInfo = this.m_BlocksInfo[i];\r\n\r\n const compressionType = (blockInfo.flags & StorageBlockFlags.CompressionTypeMask) as CompressionType;\r\n let numWrite = 0;\r\n switch (compressionType) {\r\n case CompressionType.None:\r\n chunks.push(reader.ReadBytes(blockInfo.compressedSize));\r\n numWrite += blockInfo.compressedSize;\r\n\r\n break;\r\n case CompressionType.Lzma:\r\n case CompressionType.Lz4:\r\n case CompressionType.Lz4HC:\r\n let compressedBuff = new Uint8Array(blockInfo.compressedSize);\r\n let uncompressedBuff = new Uint8Array(blockInfo.uncompressedSize);\r\n\r\n reader.ReadBytes(blockInfo.compressedSize, compressedBuff);\r\n\r\n numWrite = Decompress(compressedBuff, uncompressedBuff, compressionType, blockInfo.uncompressedSize);\r\n\r\n if (numWrite !== blockInfo.uncompressedSize) {\r\n console.error(`Decompression error. Expected ${blockInfo.uncompressedSize} got ${numWrite}`);\r\n }\r\n\r\n chunks.push(uncompressedBuff);\r\n \r\n break;\r\n default:\r\n console.warn(`Cannot decompress block type: ${compressionType}`);\r\n }\r\n }\r\n\r\n const blocksUncompressedSize = this.m_BlocksInfo.reduce((sum, x) => sum + x.uncompressedSize, 0);\r\n let blockStream = new Uint8Array(blocksUncompressedSize)\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n blockStream.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n\r\n return blockStream.buffer;\r\n }\r\n\r\n private ReadFiles(buffer: ArrayBuffer, blocksOffset: number = 0) {\r\n for (const node of this.m_DirectoryInfo) {\r\n const fileName = path.basename(node.path)\r\n \r\n const start = Number(node.offset) + blocksOffset;\r\n const fileBuffer = buffer.slice(start, start + Number(node.size));\r\n const stream = new EndianBinaryReader(fileBuffer);\r\n\r\n if (stream.isAllZero()) {\r\n console.warn(`${fileName} ${node.path} is all zero`);\r\n }\r\n\r\n let file = new StreamFile(node.path, fileName, stream);\r\n this.fileList.push(file);\r\n }\r\n }\r\n}","import { SerializedFileFormatVersion } from \"./SerializedFileFormatVersion.js\"\r\nimport { FileReader } from \"../../../Util/FileReader.js\"\r\n\r\nexport class SerializedFileHeader {\r\n public m_MetadataSize = 0;\r\n public m_FileSize = 0n;\r\n public m_Version = SerializedFileFormatVersion.Unsupported;\r\n public m_DataOffset = 0n;\r\n public m_Endianess = 0;\r\n public m_Reserved = new Uint8Array();\r\n\r\n public ReadHeader(reader: FileReader) {\r\n this.m_MetadataSize = reader.ReadUint32();\r\n this.m_FileSize = BigInt(reader.ReadUint32());\r\n this.m_Version = reader.ReadUint32();\r\n this.m_DataOffset = BigInt(reader.ReadUint32());\r\n\r\n if (this.m_Version >= SerializedFileFormatVersion.Unknown_9) {\r\n this.m_Endianess = reader.ReadByte();\r\n this.m_Reserved = new Uint8Array(reader.ReadBytes(3));\r\n } else {\r\n reader.offset = Number(this.m_FileSize - BigInt(this.m_MetadataSize))\r\n this.m_Endianess = reader.ReadByte();\r\n }\r\n\r\n if (this.m_Version >= SerializedFileFormatVersion.LargeFilesSupport) {\r\n this.m_MetadataSize = reader.ReadUint32();\r\n this.m_FileSize = reader.ReadUint64();\r\n this.m_DataOffset = reader.ReadUint64();\r\n reader.ReadInt64();\r\n }\r\n }\r\n}","export class TypeTreeNode {\r\n public m_Type = \"\";\r\n public m_Name = \"\";\r\n public m_ByteSize = 0;\r\n public m_Index = 0;\r\n public m_TypeFlags = 0;\r\n public m_Version = 0;\r\n public m_MetaFlag = 0;\r\n public m_Level = 0;\r\n public m_TypeStrOffset = 0;\r\n public m_NameStrOffset = 0;\r\n public m_RefTypeHash = 0n;\r\n}","export const CommonStrings = new Map<number, string>([\r\n [0, \"AABB\"],\r\n [5, \"AnimationClip\"],\r\n [19, \"AnimationCurve\"],\r\n [34, \"AnimationState\"],\r\n [49, \"Array\"],\r\n [55, \"Base\"],\r\n [60, \"BitField\"],\r\n [69, \"bitset\"],\r\n [76, \"bool\"],\r\n [81, \"char\"],\r\n [86, \"ColorRGBA\"],\r\n [96, \"Component\"],\r\n [106, \"data\"],\r\n [111, \"deque\"],\r\n [117, \"double\"],\r\n [124, \"dynamic_array\"],\r\n [138, \"FastPropertyName\"],\r\n [155, \"first\"],\r\n [161, \"float\"],\r\n [167, \"Font\"],\r\n [172, \"GameObject\"],\r\n [183, \"Generic Mono\"],\r\n [196, \"GradientNEW\"],\r\n [208, \"GUID\"],\r\n [213, \"GUIStyle\"],\r\n [222, \"int\"],\r\n [226, \"list\"],\r\n [231, \"long long\"],\r\n [241, \"map\"],\r\n [245, \"Matrix4x4f\"],\r\n [256, \"MdFour\"],\r\n [263, \"MonoBehaviour\"],\r\n [277, \"MonoScript\"],\r\n [288, \"m_ByteSize\"],\r\n [299, \"m_Curve\"],\r\n [307, \"m_EditorClassIdentifier\"],\r\n [331, \"m_EditorHideFlags\"],\r\n [349, \"m_Enabled\"],\r\n [359, \"m_ExtensionPtr\"],\r\n [374, \"m_GameObject\"],\r\n [387, \"m_Index\"],\r\n [395, \"m_IsArray\"],\r\n [405, \"m_IsStatic\"],\r\n [416, \"m_MetaFlag\"],\r\n [427, \"m_Name\"],\r\n [434, \"m_ObjectHideFlags\"],\r\n [452, \"m_PrefabInternal\"],\r\n [469, \"m_PrefabParentObject\"],\r\n [490, \"m_Script\"],\r\n [499, \"m_StaticEditorFlags\"],\r\n [519, \"m_Type\"],\r\n [526, \"m_Version\"],\r\n [536, \"Object\"],\r\n [543, \"pair\"],\r\n [548, \"PPtr<Component>\"],\r\n [564, \"PPtr<GameObject>\"],\r\n [581, \"PPtr<Material>\"],\r\n [596, \"PPtr<MonoBehaviour>\"],\r\n [616, \"PPtr<MonoScript>\"],\r\n [633, \"PPtr<Object>\"],\r\n [646, \"PPtr<Prefab>\"],\r\n [659, \"PPtr<Sprite>\"],\r\n [672, \"PPtr<TextAsset>\"],\r\n [688, \"PPtr<Texture>\"],\r\n [702, \"PPtr<Texture2D>\"],\r\n [718, \"PPtr<Transform>\"],\r\n [734, \"Prefab\"],\r\n [741, \"Quaternionf\"],\r\n [753, \"Rectf\"],\r\n [759, \"RectInt\"],\r\n [767, \"RectOffset\"],\r\n [778, \"second\"],\r\n [785, \"set\"],\r\n [789, \"short\"],\r\n [795, \"size\"],\r\n [800, \"SInt16\"],\r\n [807, \"SInt32\"],\r\n [814, \"SInt64\"],\r\n [821, \"SInt8\"],\r\n [827, \"staticvector\"],\r\n [840, \"string\"],\r\n [847, \"TextAsset\"],\r\n [857, \"TextMesh\"],\r\n [866, \"Texture\"],\r\n [874, \"Texture2D\"],\r\n [884, \"Transform\"],\r\n [894, \"TypelessData\"],\r\n [907, \"UInt16\"],\r\n [914, \"UInt32\"],\r\n [921, \"UInt64\"],\r\n [928, \"UInt8\"],\r\n [934, \"unsigned int\"],\r\n [947, \"unsigned long long\"],\r\n [966, \"unsigned short\"],\r\n [981, \"vector\"],\r\n [988, \"Vector2f\"],\r\n [997, \"Vector3f\"],\r\n [1006, \"Vector4f\"],\r\n [1015, \"m_ScriptingClassIdentifier\"],\r\n [1042, \"Gradient\"],\r\n [1051, \"Type*\"],\r\n [1057, \"int2_storage\"],\r\n [1070, \"int3_storage\"],\r\n [1083, \"BoundsInt\"],\r\n [1093, \"m_CorrespondingSourceObject\"],\r\n [1121, \"m_PrefabInstance\"],\r\n [1138, \"m_PrefabAsset\"],\r\n [1152, \"FileSize\"],\r\n [1161, \"Hash128\"],\r\n [1169, \"RenderingLayerMask\"],\r\n [1188, \"fixed_array\"],\r\n [1200, \"EntityId\"],\r\n]);","import { TypeTreeNode } from \"./TypeTreeNode.js\"\r\nimport { FileReader } from \"../../../Util/FileReader.js\"\r\nimport { SerializedFileFormatVersion } from \"./SerializedFileFormatVersion.js\"\r\nimport { CommonStrings } from \"./CommonStrings.js\";\r\n\r\nexport class TypeTree {\r\n public m_Nodes: TypeTreeNode[] = [];\r\n public m_StringBuffer = new Uint8Array();\r\n\r\n public BlobRead(reader: FileReader, m_Version: SerializedFileFormatVersion) {\r\n const nodeCount = reader.ReadInt32();\r\n const stringBufferSize = reader.ReadInt32();\r\n\r\n for (let i = 0; i < nodeCount; i++) {\r\n const typeTreeNode = new TypeTreeNode();\r\n this.m_Nodes.push(typeTreeNode);\r\n\r\n typeTreeNode.m_Version = reader.ReadUint16();\r\n typeTreeNode.m_Level = reader.ReadByte();\r\n typeTreeNode.m_TypeFlags = reader.ReadByte();\r\n typeTreeNode.m_TypeStrOffset = reader.ReadUint32();\r\n typeTreeNode.m_NameStrOffset = reader.ReadUint32();\r\n typeTreeNode.m_ByteSize = reader.ReadInt32();\r\n typeTreeNode.m_Index = reader.ReadInt32();\r\n typeTreeNode.m_MetaFlag = reader.ReadInt32();\r\n\r\n if (m_Version >= SerializedFileFormatVersion.TypeTreeNodeWithTypeFlags) {\r\n typeTreeNode.m_RefTypeHash = reader.ReadUint64();\r\n }\r\n }\r\n\r\n this.m_StringBuffer = new Uint8Array(reader.ReadBytes(stringBufferSize));\r\n\r\n for (let i = 0; i < nodeCount; i++) {\r\n this.m_Nodes[i].m_Type = this.ReadString(this.m_StringBuffer, this.m_Nodes[i].m_TypeStrOffset);\r\n this.m_Nodes[i].m_Name = this.ReadString(this.m_StringBuffer, this.m_Nodes[i].m_TypeStrOffset);\r\n }\r\n }\r\n\r\n private ReadString(bytes: Uint8Array, value: number): string {\r\n const isOffset = (value & 0x80000000) === 0;\r\n if (isOffset) {\r\n return this.ReadNullTerminatedString(bytes, value);\r\n }\r\n\r\n const offset = value & 0x7FFFFFFF;\r\n const str = CommonStrings.get(offset);\r\n if (str !== undefined) {\r\n return str;\r\n }\r\n\r\n return offset.toString();\r\n }\r\n\r\n private ReadNullTerminatedString(bytes: Uint8Array, offset: number): string {\r\n const start = offset;\r\n while (bytes[offset] !== 0) {\r\n offset++;\r\n }\r\n\r\n return new TextDecoder().decode(bytes.slice(start, offset));\r\n }\r\n\r\n public ReadTypeTree(reader: FileReader, m_Version: SerializedFileFormatVersion, level: number = 0) {\r\n const typeTreeNode = new TypeTreeNode();\r\n this.m_Nodes.push(typeTreeNode);\r\n\r\n typeTreeNode.m_Level = level;\r\n typeTreeNode.m_Type = reader.ReadStringToNull();\r\n typeTreeNode.m_Name = reader.ReadStringToNull();\r\n typeTreeNode.m_ByteSize = reader.ReadInt32();\r\n\r\n if (m_Version == SerializedFileFormatVersion.Unknown_2) {\r\n reader.ReadInt32();\r\n }\r\n\r\n if (m_Version != SerializedFileFormatVersion.Unknown_3) {\r\n typeTreeNode.m_Index = reader.ReadInt32();\r\n }\r\n\r\n typeTreeNode.m_TypeFlags = reader.ReadInt32();\r\n typeTreeNode.m_Version = reader.ReadInt32();\r\n\r\n if (m_Version != SerializedFileFormatVersion.Unknown_3) {\r\n typeTreeNode.m_MetaFlag = reader.ReadInt32();\r\n }\r\n\r\n const childCount = reader.ReadInt32();\r\n for (let i = 0; i < childCount; i++) {\r\n this.ReadTypeTree(reader, m_Version, ++level);\r\n }\r\n }\r\n}","import { TypeTree } from \"./TypeTree.js\"\r\n\r\nexport class SerializedType {\r\n public classID = 0;\r\n public m_IsStrippedType = false;\r\n public m_ScriptTypeIndex = -1;\r\n public m_Type = new TypeTree();\r\n public m_ScriptID = new Uint8Array();\r\n public m_OldTypeHash = new Uint8Array();\r\n public m_TypeDependencies: number[] = [];\r\n public m_KlassName = \"\";\r\n public m_NameSpace = \"\";\r\n public m_AsmName = \"\";\r\n}","import { SerializedType } from \"./SerializedType.js\"\r\n\r\nexport class ObjectInfo {\r\n public byteStart = 0n;\r\n public byteSize = 0;\r\n public typeID = 0;\r\n public classID = 0;\r\n public isDestroyed = 0;\r\n public stripped = 0;\r\n\r\n public m_PathID = 0n;\r\n public serializedType = new SerializedType();\r\n}","export class LocalSerializedObjectIdentifier {\r\n public localSerializedFileIndex = 0;\r\n public localIdentifierInFile = 0n;\r\n}","export class FileIdentifier {\r\n public guid = \"\";\r\n public type = 0;\r\n public pathName = \"\";\r\n}","import { EndianBinaryReader } from \"./EndianBinaryReader.js\";\r\nimport { SerializedFile } from \"../Files/Serialized/SerializedFile.js\"\r\nimport { SerializedType } from \"../Files/Serialized/Models/SerializedType.js\"\r\nimport { SerializedFileFormatVersion } from \"../Files/Serialized/Models/SerializedFileFormatVersion.js\"\r\nimport { ObjectInfo } from \"../Files/Serialized/Models/ObjectInfo.js\"\r\nimport { BuildTarget } from \"../Enums/BuildTarget.js\";\r\nimport { ClassIDType } from \"../Enums/ClassIDType\";\r\nimport { UnityVersion } from \"./UnityVersions.js\";\r\n\r\nexport class ObjectReader extends EndianBinaryReader {\r\n public assetsFile: SerializedFile;\r\n public m_PathID = 0n;\r\n public byteStart = 0n;\r\n public byteSize = 0;\r\n public classID = 0;\r\n public type: ClassIDType;\r\n public serializedType: SerializedType;\r\n public platform: BuildTarget;\r\n public m_Version: SerializedFileFormatVersion;\r\n public version: UnityVersion;\r\n\r\n constructor(reader: EndianBinaryReader, assetsFile: SerializedFile, objectInfo: ObjectInfo) {\r\n super(reader.buffer, reader.endian);\r\n this.offset = Number(objectInfo.byteStart);\r\n this.baseOffset = Number(objectInfo.byteStart);\r\n this.length = objectInfo.byteSize;\r\n\r\n this.assetsFile = assetsFile\r\n this.m_PathID = objectInfo.m_PathID;\r\n this.byteStart = objectInfo.byteStart;\r\n this.byteSize = objectInfo.byteSize;\r\n this.classID = objectInfo.classID;\r\n this.type = objectInfo.classID in ClassIDType ? objectInfo.classID as ClassIDType : ClassIDType.UnknownType;\r\n this.serializedType = objectInfo.serializedType;\r\n this.platform = assetsFile.m_TargetPlatform;\r\n this.m_Version = assetsFile.header.m_Version;\r\n this.version = assetsFile.version;\r\n }\r\n}","import { ObjectReader } from \"../Util/ObjectReader.js\";\r\nimport { SerializedFile } from \"../Files/Serialized/SerializedFile.js\";\r\nimport { SerializedType } from \"../Files/Serialized/Models/SerializedType.js\";\r\nimport { UnityVersion } from \"../Util/UnityVersions.js\";\r\nimport { BuildTarget } from \"../Enums/BuildTarget.js\";\r\nimport { ClassIDType } from \"../Enums/ClassIDType.js\"\r\n\r\nexport class UnityObject {\r\n public assetsFile: SerializedFile;\r\n public reader: ObjectReader;\r\n public m_PathID: BigInt;\r\n public version: UnityVersion;\r\n public platform: BuildTarget;\r\n public type: ClassIDType;\r\n public serializedType: SerializedType;\r\n public classID: number;\r\n public byteSize: number;\r\n\r\n constructor(reader: ObjectReader) {\r\n this.reader = reader;\r\n this.assetsFile = reader.assetsFile;\r\n this.type = reader.type;\r\n this.m_PathID = reader.m_PathID;\r\n this.version = reader.version;\r\n this.platform = reader.platform;\r\n this.serializedType = reader.serializedType;\r\n this.classID = reader.classID;\r\n this.byteSize = reader.byteSize;\r\n\r\n if (this.platform === BuildTarget.NoTarget) {\r\n reader.ReadUint32(); // m_ObjectHideFlags\r\n }\r\n }\r\n}","import { FileReader } from \"../../Util/FileReader.js\";\r\nimport { UnityVersion } from \"../../Util/UnityVersions.js\";\r\nimport { SerializedFileHeader } from \"./Models/SerializedFileHeader.js\";\r\nimport { SerializedType } from \"./Models/SerializedType.js\";\r\nimport { SerializedFileFormatVersion } from \"./Models/SerializedFileFormatVersion.js\";\r\nimport { TypeTree } from \"./Models/TypeTree.js\"\r\nimport { ObjectInfo } from \"./Models/ObjectInfo.js\";\r\nimport { LocalSerializedObjectIdentifier } from \"./Models/LocalSerializedObjectIdentifier.js\";\r\nimport { FileIdentifier } from \"./Models/FileIdentifier.js\";\r\nimport { EndianType } from \"../../Enums/Endian.js\";\r\nimport { BuildTarget } from \"../../Enums/BuildTarget.js\";\r\nimport { UnityObject } from \"../../Classes/Object.js\";\r\nimport { AssetsManager } from \"../../AssetsManager.js\";\r\n\r\nexport class SerializedFile {\r\n public reader: FileReader;\r\n public assetsManager: AssetsManager;\r\n public originalPath = \"\";\r\n\r\n public header: SerializedFileHeader;\r\n public version = new UnityVersion();\r\n public bigIDEnabled = 0;\r\n\r\n public m_TargetPlatform = BuildTarget.UnknownPlatform;\r\n public m_EnableTypeTree = false;\r\n public m_Types: SerializedType[] = [];\r\n public m_Objects: ObjectInfo[] = [];\r\n public m_ScriptTypes: LocalSerializedObjectIdentifier[] = [];\r\n public m_Externals: FileIdentifier[] = [];\r\n public m_RefTypes: SerializedType[] = [];\r\n public userInformation = \"\";\r\n\r\n public ObjectMap = new Map<BigInt, UnityObject>()\r\n public ObjectList: UnityObject[] = [];\r\n\r\n constructor(reader: FileReader, assetsManager: AssetsManager) {\r\n this.reader = reader\r\n this.assetsManager = assetsManager;\r\n\r\n this.header = new SerializedFileHeader();\r\n this.header.ReadHeader(this.reader);\r\n\r\n if (this.header.m_Endianess == 0) {\r\n this.reader.endian = EndianType.LittleEndian;\r\n } else {\r\n this.reader.endian = EndianType.BigEndian;\r\n }\r\n\r\n this.ReadMetadata();\r\n this.ReadTypes();\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.Unknown_7 && this.header.m_Version < SerializedFileFormatVersion.Unknown_14) {\r\n this.bigIDEnabled = reader.ReadInt32();\r\n }\r\n\r\n this.ReadObjects();\r\n this.ReadScriptTypes();\r\n this.ReadExternals();\r\n this.ReadRefTypes();\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.Unknown_5) {\r\n this.userInformation = this.reader.ReadStringToNull();\r\n }\r\n }\r\n\r\n private ReadMetadata() {\r\n if (this.header.m_Version >= SerializedFileFormatVersion.Unknown_7) {\r\n const versionString = this.reader.ReadStringToNull();\r\n const result = UnityVersion.tryParse(versionString);\r\n if (!result.success || result.value === null) {\r\n throw new Error(\"Failed to read unity version: \" + versionString);\r\n }\r\n\r\n this.version = result.value;\r\n } else {\r\n this.version = new UnityVersion(2, 5, 0);\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.Unknown_8) {\r\n this.m_TargetPlatform = this.reader.ReadInt32();\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.HasTypeTreeHashes) {\r\n this.m_EnableTypeTree = this.reader.ReadByte() !== 0;\r\n }\r\n }\r\n\r\n private ReadTypes() {\r\n const count = this.reader.ReadInt32();\r\n for (let i = 0; i < count; i++) {\r\n this.m_Types.push(this.ReadSerializedType(false));\r\n }\r\n }\r\n\r\n private ReadSerializedType(isRef: boolean): SerializedType {\r\n let type = new SerializedType()\r\n\r\n type.classID = this.reader.ReadInt32();\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.RefactoredClassId) {\r\n type.m_IsStrippedType = this.reader.ReadByte() !== 0;\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.RefactorTypeData) {\r\n type.m_ScriptTypeIndex = this.reader.ReadInt16();\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.HasTypeTreeHashes) {\r\n if (isRef && type.m_ScriptTypeIndex >= 0) {\r\n type.m_ScriptID = new Uint8Array(this.reader.ReadBytes(16));\r\n } else if ((this.header.m_Version < SerializedFileFormatVersion.RefactoredClassId && type.classID < 0) || (this.header.m_Version >= SerializedFileFormatVersion.RefactoredClassId && type.classID == 114)) {\r\n type.m_ScriptID = new Uint8Array(this.reader.ReadBytes(16));\r\n }\r\n\r\n type.m_OldTypeHash = new Uint8Array(this.reader.ReadBytes(16));\r\n }\r\n\r\n if (this.m_EnableTypeTree) {\r\n type.m_Type = new TypeTree();\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.Unknown_12 || this.header.m_Version == SerializedFileFormatVersion.Unknown_10) {\r\n type.m_Type.BlobRead(this.reader, this.header.m_Version);\r\n } else {\r\n type.m_Type.ReadTypeTree(this.reader, this.header.m_Version);\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.StoresTypeDependencies) {\r\n if (isRef) {\r\n type.m_KlassName = this.reader.ReadStringToNull();\r\n type.m_NameSpace = this.reader.ReadStringToNull();\r\n type.m_AsmName = this.reader.ReadStringToNull();\r\n } else {\r\n const typeDepCount = this.reader.ReadInt32();\r\n for (let i = 0; i < typeDepCount; i++) {\r\n type.m_TypeDependencies.push(this.reader.ReadInt32());\r\n }\r\n }\r\n }\r\n }\r\n\r\n return type;\r\n }\r\n\r\n private ReadObjects() {\r\n const objectCount = this.reader.ReadInt32();\r\n for (let i = 0; i < objectCount; i++) {\r\n let objectInfo = new ObjectInfo();\r\n\r\n if (this.bigIDEnabled != 0) {\r\n objectInfo.m_PathID = this.reader.ReadInt64();\r\n } else if (this.header.m_Version < SerializedFileFormatVersion.Unknown_14) {\r\n objectInfo.m_PathID = BigInt(this.reader.ReadInt32());\r\n } else {\r\n this.reader.AlignStream(4);\r\n objectInfo.m_PathID = this.reader.ReadInt64();\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.LargeFilesSupport) {\r\n objectInfo.byteStart = this.reader.ReadInt64();\r\n } else {\r\n objectInfo.byteStart = BigInt(this.reader.ReadUint32());\r\n }\r\n\r\n objectInfo.byteStart += this.header.m_DataOffset;\r\n\r\n objectInfo.byteSize = this.reader.ReadUint32();\r\n objectInfo.typeID = this.reader.ReadInt32();\r\n\r\n if (this.header.m_Version < SerializedFileFormatVersion.RefactoredClassId) {\r\n objectInfo.classID = this.reader.ReadUint16();\r\n\r\n const serializedType = this.m_Types.find(x => x.classID === objectInfo.typeID);\r\n if (serializedType === undefined) {\r\n console.error(`Failed to load object serializedType! ClassID: ${objectInfo.classID} TypeID: ${objectInfo.typeID}`);\r\n continue;\r\n }\r\n\r\n objectInfo.serializedType = serializedType;\r\n } else {\r\n const serializedType = this.m_Types[objectInfo.typeID];\r\n objectInfo.serializedType = serializedType;\r\n objectInfo.classID = serializedType.classID;\r\n }\r\n\r\n if (this.header.m_Version < SerializedFileFormatVersion.HasScriptTypeIndex) {\r\n objectInfo.isDestroyed = this.reader.ReadUint16();\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.HasScriptTypeIndex && this.header.m_Version < SerializedFileFormatVersion.RefactorTypeData) {\r\n objectInfo.serializedType.m_ScriptTypeIndex = this.reader.ReadInt16();\r\n }\r\n\r\n if (this.header.m_Version == SerializedFileFormatVersion.SupportsStrippedObject || this.header.m_Version == SerializedFileFormatVersion.RefactoredClassId) {\r\n objectInfo.stripped = this.reader.ReadByte();\r\n }\r\n\r\n this.m_Objects.push(objectInfo);\r\n }\r\n }\r\n\r\n private ReadScriptTypes() {\r\n if (this.header.m_Version >= SerializedFileFormatVersion.HasScriptTypeIndex) {\r\n const scriptCount = this.reader.ReadInt32();\r\n for (var i = 0; i < scriptCount; i++) {\r\n let m_ScriptType = new LocalSerializedObjectIdentifier();\r\n\r\n m_ScriptType.localSerializedFileIndex = this.reader.ReadInt32();\r\n if (this.header.m_Version < SerializedFileFormatVersion.Unknown_14) {\r\n m_ScriptType.localIdentifierInFile = BigInt(this.reader.ReadInt32());\r\n } else {\r\n this.reader.AlignStream(4);\r\n m_ScriptType.localIdentifierInFile = this.reader.ReadInt64();\r\n }\r\n\r\n this.m_ScriptTypes.push(m_ScriptType);\r\n }\r\n }\r\n }\r\n\r\n private ReadExternals() {\r\n const externalCount = this.reader.ReadInt32();\r\n for (var i = 0; i < externalCount; i++) {\r\n var m_External = new FileIdentifier();\r\n if (this.header.m_Version >= SerializedFileFormatVersion.Unknown_6) {\r\n this.reader.ReadStringToNull();\r\n }\r\n\r\n if (this.header.m_Version >= SerializedFileFormatVersion.Unknown_5) {\r\n m_External.guid = new TextDecoder().decode(this.reader.ReadBytes(16));\r\n m_External.type = this.reader.ReadInt32();\r\n }\r\n\r\n m_External.pathName = this.reader.ReadStringToNull();\r\n\r\n this.m_Externals.push(m_External);\r\n }\r\n }\r\n\r\n private ReadRefTypes() {\r\n if (this.header.m_Version >= SerializedFileFormatVersion.SupportsRefObject) {\r\n const refCount = this.reader.ReadInt32();\r\n for (let i = 0; i < refCount; i++) {\r\n this.m_RefTypes.push(this.ReadSerializedType(true))\r\n }\r\n }\r\n }\r\n\r\n public AddObject(obj: UnityObject) {\r\n this.ObjectList.push(obj);\r\n this.ObjectMap.set(obj.m_PathID, obj);\r\n }\r\n}","import { UnityObject } from \"./Object.js\";\r\nimport { ObjectReader } from \"../Util/ObjectReader.js\";\r\nimport { SerializedFile } from \"../Files/Serialized/SerializedFile.js\";\r\nimport { SerializedFileFormatVersion } from \"../Files/Serialized/Models/SerializedFileFormatVersion.js\";\r\n\r\nexport class PPtr<_ extends UnityObject> {\r\n public m_FileID: number;\r\n public m_PathID: BigInt;\r\n\r\n // private index = -2;\r\n\r\n public assetsFile: SerializedFile;\r\n\r\n constructor(reader: ObjectReader) {\r\n this.m_FileID = reader.ReadInt32();\r\n\r\n if (reader.m_Version < SerializedFileFormatVersion.Unknown_14) {\r\n this.m_PathID = BigInt(reader.ReadInt32());\r\n } else {\r\n this.m_PathID = reader.ReadInt64();\r\n }\r\n\r\n this.assetsFile = reader.assetsFile;\r\n }\r\n\r\n /*private TryGetAssetsFile(): [SerializedFile | null, boolean] {\r\n let result = null\r\n\r\n if (this.m_FileID == 0) {\r\n result = this.assetsFile;\r\n return [result, true];\r\n }\r\n\r\n if (this.m_FileID > 0 && this.m_FileID - 1 < this.assetsFile.m_Externals.length) {\r\n const assetsManager = this.assetsFile.assetsManager;\r\n\r\n if (this.index === -2) {\r\n let m_External = this.assetsFile.m_Externals[this.m_FileID - 1]\r\n let name = m_External.pathName;\r\n }\r\n }\r\n\r\n return [result, false]\r\n }*/\r\n\r\n public IsNull() {\r\n if (this.m_PathID == 0n || this.m_FileID < 0) {\r\n return true;\r\n }\r\n }\r\n\r\n public TryGet(assetsFile?: SerializedFile): UnityObject | undefined {\r\n let _assetsFile = this.assetsFile;\r\n if (assetsFile !== undefined) {\r\n _assetsFile = assetsFile;\r\n }\r\n\r\n if (!this.IsNull()) {\r\n const out = _assetsFile.ObjectMap.get(this.m_PathID)\r\n return out;\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","import { UnityObject } from \"./Object.js\";\r\nimport { ObjectReader } from \"../Util/ObjectReader.js\";\r\nimport { BuildTarget } from \"../Enums/BuildTarget.js\";\r\nimport { PPtr} from \"./PPtr.js\"; \r\n\r\nexport class EditorExtension extends UnityObject {\r\n constructor(reader: ObjectReader) {\r\n super(reader);\r\n\r\n if (this.platform === BuildTarget.NoTarget) {\r\n new PPtr<EditorExtension>(reader); // m_PrefabParentObject\r\n new PPtr<UnityObject>(reader); // m_PrefabInternal\r\n }\r\n }\r\n}","import { EditorExtension } from \"./EditorExtension.js\";\r\nimport { ObjectReader } from \"../Util/ObjectReader.js\";\r\n\r\nexport class NamedObject extends EditorExtension {\r\n public m_Name: string;\r\n\r\n constructor(reader: ObjectReader) {\r\n super(reader);\r\n\r\n this.m_Name = reader.ReadAlignedString();\r\n }\r\n}","import { NamedObject } from \"./NamedObject.js\";\r\nimport { ObjectReader } from \"../Util/ObjectReader.js\";\r\n\r\nexport class Texture extends NamedObject {\r\n constructor(reader: ObjectReader) {\r\n super(reader);\r\n\r\n if (this.version.compareTo([2017, 3]) >= 0) {\r\n if (this.version.compareTo([2023, 2]) < 0) {\r\n reader.ReadInt32(); // m_ForcedFallbackFormat\r\n reader.ReadByte(); // m_DownscaleFallback\r\n }\r\n\r\n if (this.version.compareTo([2020, 2]) >= 0) {\r\n reader.ReadByte(); // m_IsAlphaChannelOptional\r\n }\r\n\r\n reader.AlignStream(4);\r\n }\r\n }\r\n}","import { ObjectReader } from \"./ObjectReader.js\";\r\nimport { EndianBinaryReader } from \"./EndianBinaryReader.js\";\r\nimport path from \"./path/index.js\";\r\n\r\nexport class ResourceReader {\r\n private objectReader: ObjectReader;\r\n private needSearch: boolean;\r\n private resReader: EndianBinaryReader | null = null;\r\n\r\n public path: string;\r\n public size: number;\r\n public offset: number;\r\n\r\n constructor(reader: ObjectReader, size: number, offset: number, path: string, objReaderIsRes: boolean = false) {\r\n this.objectReader = reader;\r\n this.needSearch = true;\r\n this.path = path;\r\n this.size = size;\r\n this.offset = offset;\r\n\r\n if (objReaderIsRes) {\r\n this.resReader = reader;\r\n this.needSearch = false;\r\n this.size = reader.view.byteLength;\r\n this.offset = 0;\r\n }\r\n }\r\n\r\n private GetReader() {\r\n if (!this.needSearch) {\r\n return\r\n }\r\n\r\n const resFileName = path.basename(this.path);\r\n const resFile = this.objectReader.assetsFile.assetsManager.resourceReaders.get(resFileName);\r\n if (resFile !== undefined) {\r\n this.resReader = resFile;\r\n this.needSearch = false;\r\n\r\n return;\r\n }\r\n }\r\n\r\n public GetData(): Uint8Array | null {\r\n this.GetReader();\r\n\r\n console.log(`Reading data from resS`);\r\n console.log(this);\r\n\r\n if (this.resReader === null) {\r\n return null;\r\n }\r\n\r\n this.resReader.offset = this.offset;\r\n\r\n return this.resReader.ReadBytes(this.size);\r\n }\r\n}","import { ObjectReader } from \"../Util/ObjectReader.js\";\r\n\r\nexport class GLTextureSettings {\r\n public m_FilterMode = 0;\r\n public m_Aniso = 0;\r\n public m_MipBias = 0;\r\n public m_WrapMode = 0;\r\n\r\n constructor(reader: ObjectReader) {\r\n this.m_FilterMode = reader.ReadInt32();\r\n this.m_Aniso = reader.ReadInt32();\r\n this.m_MipBias = reader.ReadSingle();\r\n \r\n if (reader.version.major >= 2017) {\r\n this.m_WrapMode = reader.ReadInt32();\r\n reader.ReadInt32(); // m_WrapV \r\n reader.ReadInt32(); // m_WrapW\r\n } else {\r\n this.m_WrapMode = reader.ReadInt32();\r\n }\r\n }\r\n}","import { ObjectReader } from \"../Util/ObjectReader.js\";\r\n\r\nexport class StreamingInfo {\r\n public offset = 0n;\r\n public size = 0;\r\n public path = \"\";\r\n\r\n constructor(reader?: ObjectReader) {\r\n if (reader === undefined) {\r\n return;\r\n }\r\n\r\n if (reader.version.major >= 2020) {\r\n this.offset = reader.ReadInt64();\r\n } else {\r\n this.offset = BigInt(reader.ReadUint32());\r\n }\r\n\r\n this.size = reader.ReadUint32();\r\n this.path = reader.ReadAlignedString();\r\n }\r\n}","import { Texture } from \"./Texture.js\"\r\nimport { ObjectReader } from \"../Util/ObjectReader.js\";\r\nimport { ResourceReader } from \"../Util/ResourceReader.js\";\r\nimport { TextureFormat } from \"../Enums/TextureFormat.js\";\r\nimport { GLTextureSettings } from \"./GLTextureSettings.js\";\r\nimport { StreamingInfo } from \"./StreamingInfo.js\";\r\n\r\nexport class Texture2D extends Texture {\r\n public m_Width: number;\r\n public m_Height: number;\r\n public m_CompleteImageSize: number;\r\n public m_TextureFormat: TextureFormat;\r\n public m_MipMap: boolean;\r\n public m_MipCount: number;\r\n public m_TextureSettings: GLTextureSettings;\r\n public m_ImageCount: number;\r\n public m_PlatformBlob: Uint8Array;\r\n public image_data: ResourceReader;\r\n public m_StreamData: StreamingInfo;\r\n\r\n constructor(reader: ObjectReader) {\r\n super(reader);\r\n\r\n this.m_Width = reader.ReadInt32();\r\n this.m_Height = reader.ReadInt32();\r\n this.m_CompleteImageSize = reader.ReadUint32();\r\n\r\n if (reader.version.major >= 2020) {\r\n reader.ReadInt32(); // m_MipsStripped\r\n }\r\n\r\n this.m_TextureFormat = reader.ReadInt32();\r\n\r\n if (reader.version.compareTo([5, 2]) < 0) {\r\n this.m_MipMap = reader.ReadBoolean();\r\n this.m_MipCount = 0;\r\n } else {\r\n this.m_MipMap = false;\r\n this.m_MipCount = reader.ReadInt32();\r\n }\r\n\r\n if (reader.version.compareTo([2, 6]) >= 0) {\r\n reader.ReadBoolean(); // m_IsReadable\r\n }\r\n\r\n if (reader.version.major >= 2020) {\r\n reader.ReadBoolean(); // m_IsPreProcessed\r\n }\r\n\r\n if (reader.version.compareTo([2019, 3]) >= 0) {\r\n if (reader.version.compareTo([2022, 2]) >= 0) {\r\n reader.ReadBoolean(); // m_IgnoreMipmapLimit\r\n reader.AlignStream(4);\r\n }\r\n\r\n reader.ReadBoolean(); // m_IgnoreMasterTextureLimit\r\n }\r\n\r\n if (reader.version.compareTo([3, 0]) >= 0 && reader.version.compareTo([5, 5]) < 0) {\r\n reader.ReadBoolean(); // m_ReadAllowed\r\n }\r\n\r\n if (reader.version.compareTo([2022, 2]) >= 0) {\r\n reader.ReadAlignedString(); // m_MipmapLimitGroupName\r\n }\r\n\r\n if (reader.version.compareTo([2018, 2]) >= 0) {\r\n reader.ReadBoolean(); // m_StreamingMipmaps\r\n }\r\n\r\n reader.AlignStream(4);\r\n\r\n if (reader.version.compareTo([2018, 2]) >= 0) {\r\n reader.ReadInt32(); // m_StreamingMipmapsPriority\r\n }\r\n\r\n this.m_ImageCount = reader.ReadInt32();\r\n reader.ReadInt32(); //m_TextureDimension\r\n this.m_TextureSettings = new GLTextureSettings(reader);\r\n\r\n if (reader.version.major >= 3) {\r\n reader.ReadInt32(); // m_LightmapFormat\r\n }\r\n\r\n if (reader.version.compareTo([3, 5]) >= 0) {\r\n reader.ReadInt32(); // m_ColorSpace\r\n }\r\n\r\n if (reader.version.compareTo([2022, 2]) >= 0) {\r\n this.m_PlatformBlob = new Uint8Array(reader.ReadBytes(reader.ReadInt32()));\r\n reader.AlignStream(4);\r\n } else {\r\n this.m_PlatformBlob = new Uint8Array();\r\n }\r\n\r\n const imageDataSize = reader.ReadInt32();\r\n if (imageDataSize == 0 && reader.version.compareTo([5, 3])) {\r\n this.m_StreamData = new StreamingInfo(reader);\r\n } else {\r\n this.m_StreamData = new StreamingInfo();\r\n }\r\n\r\n if (this.m_StreamData.path !== \"\") {\r\n this.image_data = new ResourceReader(reader, this.m_StreamData.size, Number(this.m_StreamData.offset), this.m_StreamData.path);\r\n } else {\r\n this.image_data = new ResourceReader(reader, imageDataSize, reader.offset, \"\", true);\r\n }\r\n }\r\n}","\r\n// Image formats names are using Microsoft ones from\r\n// https://learn.microsoft.com/en-us/windows/win32/direct3d11/texture-block-compression-in-direct3d-11\r\n// DXT1 = BC1\r\n// DXT3 = BC2\r\n// DXT5 = BC3\r\n// ATI1 = BC4\r\n// ATI2 = BC5\r\nexport type ImageFormat = 'BC1' | 'BC2' | 'BC3' | 'BC4' | 'BC5' | 'BC6H' | 'BC7'\r\n\r\nexport interface ImageShape {\r\n readonly width: number\r\n readonly height: number\r\n}\r\n\r\n// each layer (mipmap) from image with its shape and position in buffer\r\nexport interface LayerInfo {\r\n // offset in bytes in file\r\n readonly offset: number\r\n // length in bytes\r\n readonly length: number\r\n // shape of image\r\n readonly shape: ImageShape\r\n}\r\n\r\nexport interface ImageInfo {\r\n readonly shape: ImageShape\r\n readonly layers: Array<LayerInfo>\r\n readonly format: ImageFormat\r\n}\r\n\r\nexport interface FormatSize {\r\n readonly blockWidth: number\r\n readonly blockHeight: number\r\n readonly blockSize: number\r\n}\r\n\r\n// compession formats with their block dimensions (in pixels) and block size (in bytes)\r\nexport const formatSizes: Record<string, FormatSize> = {\r\n 'BC1': {blockWidth: 4, blockHeight: 4, blockSize: 8},\r\n 'BC2': {blockWidth: 4, blockHeight: 4, blockSize: 16},\r\n 'BC3': {blockWidth: 4, blockHeight: 4, blockSize: 16},\r\n 'BC4': {blockWidth: 4, blockHeight: 4, blockSize: 8},\r\n 'BC5': {blockWidth: 4, blockHeight: 4, blockSize: 16},\r\n 'BC6H': {blockWidth: 4, blockHeight: 4, blockSize: 16},\r\n 'BC7': {blockWidth: 4, blockHeight: 4, blockSize: 16},\r\n 'RGB': {blockWidth: 1, blockHeight: 1, blockSize: 3},\r\n 'RGBA': {blockWidth: 1, blockHeight: 1, blockSize: 4},\r\n}","export function blockExtractBits(block: Uint32Array, startIdx: number, numBits: number): number {\r\n const bitsPerElement: number = (Uint32Array.BYTES_PER_ELEMENT * 8)\r\n var value: number = 0\r\n\r\n for (var i = 0; i < numBits; i++) {\r\n const moveIdx:number = Math.floor(startIdx / bitsPerElement)\r\n const moveBits = moveIdx * bitsPerElement\r\n const shift: number = startIdx - i - moveBits\r\n\r\n if (shift < 0) {\r\n value |= (block[moveIdx] & (1 << (startIdx - moveBits))) << (-shift)\r\n }\r\n else {\r\n value |= Math.abs((block[moveIdx] & (1 << (startIdx - moveBits))) >> shift)\r\n }\r\n startIdx++\r\n }\r\n\r\n return value\r\n}","export const bptcTableP2 = new Uint8Array([\r\n 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,\r\n 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,\r\n 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,\r\n 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,\r\n 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,\r\n 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,\r\n 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1,\r\n 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,\r\n 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,\r\n 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,\r\n 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,\r\n 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,\r\n 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,\r\n 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,\r\n 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,\r\n 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,\r\n 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,\r\n 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,\r\n 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,\r\n 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,\r\n 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,\r\n 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,\r\n 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,\r\n 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,\r\n 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,\r\n 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,\r\n 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,\r\n 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,\r\n 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,\r\n 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,\r\n 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,\r\n 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,\r\n 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,\r\n 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,\r\n 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,\r\n 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,\r\n 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,\r\n 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,\r\n 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,\r\n 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,\r\n 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0,\r\n 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0,\r\n 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,\r\n 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,\r\n 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,\r\n 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,\r\n 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,\r\n 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,\r\n 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,\r\n 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,\r\n 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,\r\n 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0,\r\n 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,\r\n 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1,\r\n 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0,\r\n 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0,\r\n 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1,\r\n 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,\r\n 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,\r\n 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,\r\n 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,\r\n 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,\r\n 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,\r\n 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1\r\n])\r\n\r\nexport const bptcTableP3 = new Uint8Array([\r\n 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2,\r\n 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1,\r\n 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1,\r\n 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1,\r\n 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2,\r\n 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2,\r\n 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1,\r\n 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1,\r\n 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,\r\n 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,\r\n 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,\r\n 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,\r\n 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2,\r\n 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2,\r\n 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2,\r\n 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0,\r\n 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2,\r\n 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0,\r\n 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2,\r\n 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1,\r\n 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2,\r\n 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1,\r\n 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2,\r\n 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0,\r\n 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0,\r\n 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2,\r\n 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0,\r\n 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1,\r\n 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2,\r\n 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2,\r\n 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1,\r\n 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1,\r\n 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2,\r\n 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1,\r\n 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2,\r\n 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0,\r\n 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0,\r\n 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,\r\n 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0,\r\n 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1,\r\n 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1,\r\n 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2,\r\n 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1,\r\n 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2,\r\n 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1,\r\n 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1,\r\n 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1,\r\n 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1,\r\n 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2,\r\n 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1,\r\n 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2,\r\n 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2,\r\n 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2,\r\n 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2,\r\n 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2,\r\n 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2,\r\n 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2,\r\n 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2,\r\n 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2,\r\n 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2,\r\n 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1,\r\n 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2,\r\n 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2,\r\n 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0,\r\n])\r\n\r\nexport const bptcTableAnchorIndexSecondSubset = new Uint8Array([\r\n 15,15,15,15,15,15,15,15,\r\n 15,15,15,15,15,15,15,15,\r\n 15, 2, 8, 2, 2, 8, 8,15,\r\n 2, 8, 2, 2, 8, 8, 2, 2,\r\n 15,15, 6, 8, 2, 8,15,15,\r\n 2, 8, 2, 2, 2,15,15, 6,\r\n 6, 2, 6, 8,15,15, 2, 2,\r\n 15,15,15,15,15, 2, 2,15\r\n])\r\n\r\nexport const bptcTableAnchorIndexSecondSubsetOfThree = new Uint8Array([\r\n 3, 3,15,15, 8, 3,15,15,\r\n 8, 8, 6, 6, 6, 5, 3, 3,\r\n 3, 3, 8,15, 3, 3, 6,10,\r\n 5, 8, 8, 6, 8, 5,15,15,\r\n 8,15, 3, 5, 6,10, 8,15,\r\n 15, 3,15, 5,15,15,15,15,\r\n 3,15, 5, 5, 5, 8, 5,10,\r\n 5,10, 8,13,15,12, 3, 3\r\n])\r\n\r\nexport const bptcTableAnchorIndexThirdSubset = new Uint8Array([\r\n 15, 8, 8, 3,15,15, 3, 8,\r\n 15,15,15,15,15,15,15, 8,\r\n 15, 8,15, 3,15, 8,15, 8,\r\n 3,15, 6,10,15,15,10, 8,\r\n 15, 3,15,10,10, 8, 9,10,\r\n 6,15, 8,15, 3, 6, 6, 8,\r\n 15, 3,15,15,15,15,15,15,\r\n 15,15,15,15, 3,15,15, 8\r\n])","import type { FormatSize } from './header-info.js'\r\nimport { formatSizes } from './header-info.js'\r\nimport { blockExtractBits } from './extract-bits.js'\r\nimport { bptcTableP2,\r\n bptcTableP3, \r\n bptcTableAnchorIndexSecondSubset,\r\n bptcTableAnchorIndexSecondSubsetOfThree,\r\n bptcTableAnchorIndexThirdSubset } from './bptc-tables.js'\r\n\r\nconst bc7TableAWeight2 = new Uint8Array([\r\n\t0, 21, 43, 64\r\n])\r\n\r\nconst bc7TableAWeight3 = new Uint8Array([\r\n\t0, 9, 18, 27, 37, 46, 55, 64\r\n])\r\n\r\nconst bc7TableAWeight4 = new Uint8Array([\r\n\t0, 4, 9, 13, 17, 21, 26, 30,\r\n\t34, 38, 43, 47, 51, 55, 60, 64\r\n])\r\n\r\nconst rgbaPixelSize: number = formatSizes['RGBA'].blockSize\r\n\r\nfunction extractMode(byte: number): number {\r\n for (var i = 0; i < 8; i++) {\r\n if ((byte & (1 << i)) !== 0) {\r\n return i\r\n }\r\n }\r\n // illegal\r\n return -1\r\n}\r\n\r\nfunction interpolate(e0: number, e1: number, index: number, indexprecision: number): number {\r\n\tif (indexprecision == 2) {\r\n\t\treturn (((64 - bc7TableAWeight2[index]) * e0 + bc7TableAWeight2[index] * e1 + 32) >> 6) & 0xFF\r\n }\r\n\telse if (indexprecision == 3) {\r\n\t\treturn (((64 - bc7TableAWeight3[index]) * e0 + bc7TableAWeight3[index] * e1 + 32) >> 6) & 0xFF\r\n }\r\n\telse // indexprecision == 4\r\n {\r\n\t\treturn (((64 - bc7TableAWeight4[index]) * e0 + bc7TableAWeight4[index] * e1 + 32) >> 6) & 0xFF\r\n }\r\n}\r\n\r\nconst modeHasPartitionBits = new Uint8Array([ 1, 1, 1, 1, 0, 0, 0, 1 ])\r\nconst bc7NS = new Uint8Array([ 3, 2, 3, 2, 1, 1, 1, 2 ])\r\nconst PartitionBits = new Uint8Array([4, 6, 6, 6, 0, 0, 0, 6 ])\r\nconst RotationBits = new Uint8Array([ 0, 0, 0, 0, 2, 2, 0, 0 ])\r\nconst bc7TableAlphaIndexBitcount = new Uint8Array([ 3, 3, 2, 2, 3, 2, 4, 2 ])\r\nconst bc7TableColorIndexBitcount = new Uint8Array([ 3, 3, 2, 2, 2, 2, 4, 2 ])\r\nconst bc7TableComponentsInQWORD0 = new Uint8Array([ 2, -1, 1, 1, 3, 3, 3, 2 ])\r\nconst bc7TableColorPrecision = new Uint8Array([ 4, 6, 5, 7, 5, 7, 7, 5 ])\r\nconst bc7TableColorPrecisionPlusPBit = new Uint8Array([ 5, 7, 5, 8, 5, 7, 8, 6 ])\r\nconst bc7TableAlphaPrecision = new Uint8Array([ 0, 0, 0, 0, 6, 8, 7, 5 ])\r\nconst bc7TableAlphaPrecisionPlusPBit = new Uint8Array([ 0, 0, 0, 0, 6, 8, 8, 6 ])\r\nconst bc7TableModeHasPBits = new Uint8Array([ 1, 1, 0, 1, 0, 0, 1, 1 ])\r\nconst bc7TableInterpalationBits = new Uint8Array([ 3, 3, 2, 2, 2, 2, 4, 2 ])\r\nconst bc7TableInterpalationBits2 = new Uint8Array([ 0, 0, 0, 0, 3, 2, 0, 0 ])\r\n\r\nfunction decoodeBlockBC7Mode1(inputBuffer: Uint8Array, size: FormatSize): Uint8Array {\r\n const partitionSetID: number = inputBuffer[0] >> 2\r\n const endpoint = new Uint8Array(12)\r\n endpoint[0] = inputBuffer[1] & 0x3F // red, subnet 0, endpoint 0\r\n endpoint[3] = (inputBuffer[1] >> 6) | ((inputBuffer[2] & 0x0F) << 2) // red, subnet 0, endpoint 1\r\n endpoint[6] = (inputBuffer[2] >> 4) | ((inputBuffer[3] & 0x03) << 4) // red, subnet 1, endpoint 0\r\n endpoint[9] = inputBuffer[3] >> 2 // red, subnet 1, endpoint 1\r\n\r\n endpoint[1] = inputBuffer[4] & 0x3F // green, subnet 0, endpoint 0\r\n endpoint[4] = (inputBuffer[4] >> 6) | ((inputBuffer[5] & 0x0F) << 2) // green, subnet 0, endpoint 1\r\n endpoint[7] = (inputBuffer[5] >> 4) | ((inputBuffer[6] & 0x03) << 4) // green, subnet 1, endpoint 0\r\n endpoint[10] = inputBuffer[6] >> 2 // green, subnet 1, endpoint 1\r\n\r\n endpoint[2] = inputBuffer[7] & 0x3F // blue, subnet 0, endpoint 0\r\n endpoint[5] = (inputBuffer[7] >> 6) | ((inputBuffer[8] & 0x0F) << 2) // blue, subnet 0, endpoint 1\r\n endpoint[8] = (inputBuffer[8] >> 4) | ((inputBuffer[9] & 0x03) << 4) // blue, subnet 1, endpoint 0\r\n endpoint[11] = inputBuffer[9] >> 2 // blue, subnet 1, endpoint 1\r\n\r\n for (var i = 0; i < 2 * 2; i++) {\r\n\t\t//component-wise left-shift\r\n\t\tendpoint[i * 3 + 0] <<= 2;\r\n\t\tendpoint[i * 3 + 1] <<= 2;\r\n\t\tendpoint[i * 3 + 2] <<= 2;\r\n }\r\n\r\n const pbitZero: number = (inputBuffer[10] & 0x01) << 1\r\n const pbitOne: number = inputBuffer[10] & 0x02\r\n\r\n // RGB only pbits for mode 1, one for each subset.\r\n\tfor (var j = 0; j < 3; j++) {\r\n\t\tendpoint[0 * 3 + j] |= pbitZero\r\n\t\tendpoint[1 * 3 + j] |= pbitZero\r\n\t\tendpoint[2 * 3 + j] |= pbitOne\r\n\t\tendpoint[3 * 3 + j] |= pbitOne\r\n\t}\r\n\r\n\tfor (var i = 0; i < 2 * 2; i++) {\r\n // Replicate each component's MSB into the LSB.\r\n\t\tendpoint[i * 3 + 0] |= endpoint[i * 3 + 0] >> 7\r\n\t\tendpoint[i * 3 + 1] |= endpoint[i * 3 + 1] >> 7\r\n\t\tendpoint[i * 3 + 2] |= endpoint[i * 3 + 2] >> 7\r\n\t}\r\n\r\n const subsetIndex = new Uint8Array(16)\r\n\tfor (var i = 0; i < 16; i++) {\r\n // subsetIndex[i] is a number from 0 to 1.\r\n\t\tsubsetIndex[i] = bptcTableP2[partitionSetID * 16 + i]\r\n }\r\n\r\n const anchorIndex = new Uint8Array([0, bptcTableAnchorIndexSecondSubset[partitionSetID]])\r\n const colorIndexArray = new Uint32Array([inputBuffer[10] >> 2 | (inputBuffer[11] << 6) | (inputBuffer[12] << 14) | (inputBuffer[13] << 22) | (inputBuffer[14] << 30), \r\n inputBuffer[14] | (inputBuffer[15] << 8) ])\r\n var moveBits: number = 0\r\n var idx: number = 0\r\n\r\n const blockSizeInPixels: number = size.blockWidth * size.blockHeight\r\n var outputBuffer = new Uint8Array(blockSizeInPixels * rgbaPixelSize)\r\n for (var i = 0; i < 16; i++) {\r\n var colorIndex: number = 0\r\n\r\n if (i === anchorIndex[subsetIndex[i]]) {\r\n colorIndex = (colorIndexArray[idx] >> moveBits) & 0x03\r\n moveBits += 2\r\n }\r\n else {\r\n colorIndex = (colorIndexArray[idx] >> moveBits) & 0x07\r\n moveBits += 3\r\n }\r\n\r\n // move to next element in array\r\n if (moveBits >= 30) {\r\n moveBits -= 30\r\n idx++\r\n }\r\n\r\n var endpointStart = new Uint8Array(3)\r\n var endpointEnd = new Uint8Array(3)\r\n for (var j = 0; j < 3; j++) {\r\n endpointStart[j] = endpoint[2 * subsetIndex[i] * 3 + j];\r\n endpointEnd[j] = endpoint[(2 * subsetIndex[i] + 1) * 3 + j];\r\n }\r\n\r\n outputBuffer[i * rgbaPixelSize] = interpolate(endpointStart[0], endpointEnd[0], colorIndex, 3)\r\n outputBuffer[i * rgbaPixelSize + 1] = interpolate(endpointStart[1], endpointEnd[1], colorIndex, 3)\r\n outputBuffer[i * rgbaPixelSize + 2] = interpolate(endpointStart[2], endpointEnd[2], colorIndex, 3)\r\n outputBuffer[i * rgbaPixelSize + 3] = 0xFF\r\n }\r\n\r\n return outputBuffer\r\n}\r\n\r\nexport function decodeBC7Block(inputBuffer: Uint8Array, size: FormatSize): Uint8Array {\r\n const data = new Uint32Array(inputBuffer.buffer, inputBuffer.byteOffset, 4)\r\n const mode = extractMode(inputBuffer[0])\r\n var index: number = mode + 1\r\n\r\n if (mode === 1) {\r\n return decoodeBlockBC7Mode1(inputBuffer, size)\r\n }\r\n\r\n var nuSubsets: number = 1\r\n var partitionSetId: number = 0\r\n if (modeHasPartitionBits[mode] === 1 ) {\r\n \r\n const numOfPartitionBits: number = PartitionBits[mode]\r\n nuSubsets = bc7NS[mode]\r\n partitionSetId = blockExtractBits(data, index, numOfPartitionBits)\r\n index += numOfPartitionBits\r\n }\r\n\r\n const numOfRotationBits: number = RotationBits[mode]\r\n const rotation: number = blockExtractBits(data, index, numOfRotationBits)\r\n index += numOfRotationBits\r\n \r\n var indexSelectionBit: number = 0\r\n if (mode === 4) {\r\n indexSelectionBit = blockExtractBits(data, index, 1)\r\n index += 1\r\n }\r\n\r\n const alphaIndexBitcount: number = bc7TableAlphaIndexBitcount[mode] - indexSelectionBit\r\n const colorIndexBitcount: number = bc7TableColorIndexBitcount[mode] + indexSelectionBit\r\n \r\n var endpoint = new Uint8Array(24)\r\n\r\n // extract endpoints\r\n const componentsInQWORD0: number = bc7TableComponentsInQWORD0[mode]\r\n const precision: number = bc7TableColorPrecision[mode]\r\n\r\n for (var i = 0; i < componentsInQWORD0; i++) { // for each color component\r\n for (var j = 0; j < nuSubsets; j++) { // for each subset\r\n for (var k = 0; k < 2; k++) { // For each endpoint\r\n endpoint[j * 8 + k * 4 + i] = blockExtractBits(data, index, precision)\r\n index += precision\r\n }\r\n }\r\n }\r\n\r\n if (componentsInQWORD0 < 3) {\r\n const i: number = componentsInQWORD0\r\n for (var j = 0; j < nuSubsets; j++) { // for each subset\r\n for (var k = 0; k < 2; k++) { // For each endpoint\r\n endpoint[j * 8 + k * 4 + i] = blockExtractBits(data, index, precision)\r\n index += precision\r\n }\r\n }\r\n }\r\n\r\n if (componentsInQWORD0 < 2) {\r\n const i: number = 2\r\n for (var j = 0; j < nuSubsets; j++) { // for each subset\r\n for (var k = 0; k < 2; k++) { // For each endpoint\r\n endpoint[j * 8 + k * 4 + i] = blockExtractBits(data, index, precision)\r\n index += precision\r\n }\r\n }\r\n }\r\n \r\n const alphaPrecision: number = bc7TableAlphaPrecision[mode]\r\n if (alphaPrecision > 0) {\r\n for (var j = 0; j < nuSubsets; j++) { // for each subset\r\n for (var k = 0; k < 2; k++) { // For each endpoint\r\n endpoint[j * 8 + k * 4 + 3] = blockExtractBits(data, index, alphaPrecision)\r\n index += alphaPrecision\r\n }\r\n }\r\n }\r\n // end extract endpoints\r\n\r\n // fully decode endpoints\r\n if (bc7TableModeHasPBits[mode]) {\r\n for (var i = 0; i < nuSubsets * 2; i++) {\r\n const bit: number = blockExtractBits(data, index, 1)\r\n index += 1\r\n\r\n endpoint[i * 4 + 0] <<= 1\r\n endpoint[i * 4 + 1] <<= 1\r\n endpoint[i * 4 + 2] <<= 1\r\n endpoint[i * 4 + 3] <<= 1\r\n endpoint[i * 4 + 0] |= bit\r\n endpoint[i * 4 + 1] |= bit\r\n endpoint[i * 4 + 2] |= bit\r\n endpoint[i * 4 + 3] |= bit\r\n \r\n }\r\n }\r\n\r\n const colorPrec: number = bc7TableColorPrecisionPlusPBit[mode]\r\n const alphaPrec: number = bc7TableAlphaPrecisionPlusPBit[mode]\r\n\r\n for (var i = 0; i < nuSubsets * 2; i++) {\r\n // Color_component_precision & alpha_component_precision includes pbit\r\n // left shift endpoint components so that their MSB lies in bit 7\r\n endpoint[i * 4 + 0] <<= (8 - colorPrec);\r\n endpoint[i * 4 + 1] <<= (8 - colorPrec);\r\n endpoint[i * 4 + 2] <<= (8 - colorPrec);\r\n endpoint[i * 4 + 3] <<= (8 - alphaPrec);\r\n\r\n // Replicate each component's MSB into the LSBs revealed by the left-shift operation above.\r\n endpoint[i * 4 + 0] |= (endpoint[i * 4 + 0] >> colorPrec);\r\n endpoint[i * 4 + 1] |= (endpoint[i * 4 + 1] >> colorPrec);\r\n endpoint[i * 4 + 2] |= (endpoint[i * 4 + 2] >> colorPrec);\r\n endpoint[i * 4 + 3] |= (endpoint[i * 4 + 3] >> alphaPrec);\r\n }\r\n\r\n if (mode <= 3) {\r\n for (var i = 0; i < nuSubsets * 2; i++) {\r\n endpoint[i * 4 + 3] = 0xFF\r\n }\r\n }\r\n // end fully decode endpoints\r\n\r\n var subsetIndex = new Uint8Array(16)\r\n for (var i = 0; i < 16; i++) {\r\n if (nuSubsets == 1) {\r\n subsetIndex[i] = 0\r\n }\r\n else if (nuSubsets == 2) {\r\n subsetIndex[i] = bptcTableP2[partitionSetId * 16 + i]\r\n }\r\n else {\r\n subsetIndex[i] = bptcTableP3[partitionSetId * 16 + i]\r\n }\r\n }\r\n\r\n var anchorIndex = new Uint8Array(4)\r\n for (var i = 0; i < nuSubsets; i++) {\r\n if (i == 0) {\r\n anchorIndex[i] = 0\r\n }\r\n else if (nuSubsets == 2) {\r\n anchorIndex[i] = bptcTableAnchorIndexSecondSubset[partitionSetId]\r\n }\r\n else if (i == 1) {\r\n anchorIndex[i] = bptcTableAnchorIndexSecondSubsetOfThree[partitionSetId]\r\n }\r\n else {\r\n anchorIndex[i] = bptcTableAnchorIndexThirdSubset[partitionSetId]\r\n }\r\n }\r\n\r\n var colorIndex = new Uint8Array(16)\r\n var alphaIndex = new Uint8Array(16)\r\n\r\n if (index >= 64) { // this implies the mode is not 4.\r\n const bits1: number = bc7TableInterpalationBits[mode]\r\n const bits2: number = bits1 - 1\r\n for (var i = 0; i < 16; i++) {\r\n if (i === anchorIndex[subsetIndex[i]]) {\r\n alphaIndex[i] = colorIndex[i] = blockExtractBits(data, index, bits2)\r\n index += bits2\r\n }\r\n else {\r\n alphaIndex[i] = colorIndex[i] = blockExtractBits(data, index, bits1)\r\n index += bits1\r\n }\r\n }\r\n }\r\n else { // Implies mode 4.\r\n for (var i = 0; i < 16; i++) {\r\n const bits: number = i === anchorIndex[subsetIndex[i]] ? 1 : 2\r\n if (indexSelectionBit) {\r\n alphaIndex[i] = blockExtractBits(data, index, bits)\r\n }\r\n else {\r\n colorIndex[i] = blockExtractBits(data, index, bits)\r\n }\r\n index += bits\r\n }\r\n }\r\n\r\n if (bc7TableInterpalationBits2[mode] > 0) {\r\n const bits1: number = bc7TableInterpalationBits2[mode]\r\n const bits2: number = bits1 - 1\r\n for (var i = 0; i < 16; i++) {\r\n if (i === anchorIndex[subsetIndex[i]]) {\r\n if (indexSelectionBit) {\r\n colorIndex[i] = blockExtractBits(data, index, 2)\r\n index += 2\r\n }\r\n else {\r\n alphaIndex[i] = blockExtractBits(data, index, bits2)\r\n index += bits2\r\n }\r\n }\r\n else {\r\n if (indexSelectionBit) {\r\n colorIndex[i] = blockExtractBits(data, index, 3)\r\n index += 3\r\n }\r\n else {\r\n alphaIndex[i] = blockExtractBits(data, index, bits1)\r\n index += bits1\r\n }\r\n }\r\n }\r\n }\r\n\r\n var endpointStart = new Uint8Array(4)\r\n var endpointEnd = new Uint8Array(4)\r\n\r\n const blockSizeInPixels: number = size.blockWidth * size.blockHeight\r\n var outputBuffer = new Uint8Array(blockSizeInPixels * rgbaPixelSize)\r\n for (var i = 0; i < blockSizeInPixels; i++) {\r\n for (var j = 0; j < 4; j++) {\r\n endpointStart[j] = endpoint[2 * subsetIndex[i] * 4 + j]\r\n endpointEnd[j] = endpoint[(2 * subsetIndex[i] + 1) * 4 + j]\r\n }\r\n\r\n if (rotation > 0) {\r\n if (rotation == 1) {\r\n outputBuffer[i * rgbaPixelSize] = interpolate(endpointStart[3], endpointEnd[3], alphaIndex[i], alphaIndexBitcount) \r\n outputBuffer[i * rgbaPixelSize + 1] = interpolate(endpointStart[1], endpointEnd[1], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 2] = interpolate(endpointStart[2], endpointEnd[2], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 3] = interpolate(endpointStart[0], endpointEnd[0], colorIndex[i], colorIndexBitcount)\r\n }\r\n else if (rotation == 2) {\r\n outputBuffer[i * rgbaPixelSize] = interpolate(endpointStart[0], endpointEnd[0], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 1] = interpolate(endpointStart[3], endpointEnd[3], alphaIndex[i], alphaIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 2] = interpolate(endpointStart[2], endpointEnd[2], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 3] = interpolate(endpointStart[1], endpointEnd[1], colorIndex[i], colorIndexBitcount)\r\n }\r\n else {\r\n outputBuffer[i * rgbaPixelSize] = interpolate(endpointStart[0], endpointEnd[0], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 1] = interpolate(endpointStart[1], endpointEnd[1], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 2] = interpolate(endpointStart[3], endpointEnd[3], alphaIndex[i], alphaIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 3] = interpolate(endpointStart[2], endpointEnd[2], colorIndex[i], colorIndexBitcount)\r\n }\r\n }\r\n else {\r\n outputBuffer[i * rgbaPixelSize] = interpolate(endpointStart[0], endpointEnd[0], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 1] = interpolate(endpointStart[1], endpointEnd[1], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 2] = interpolate(endpointStart[2], endpointEnd[2], colorIndex[i], colorIndexBitcount)\r\n outputBuffer[i * rgbaPixelSize + 3] = interpolate(endpointStart[3], endpointEnd[3], alphaIndex[i], alphaIndexBitcount)\r\n }\r\n }\r\n\r\n return outputBuffer\r\n}","import { formatSizes } from './header-info'\r\nimport type { FormatSize, LayerInfo } from './header-info.js'\r\nimport { decodeBC7Block } from './bc7'\r\n\r\ntype blockDecodeFunctionType = (inputBuffer: Uint8Array, size: FormatSize) => Uint8Array\r\n\r\nconst blockDecode: Record<string, blockDecodeFunctionType> = {\r\n 'BC7': decodeBC7Block,\r\n}\r\n\r\nconst rgbaPixelSize: number = formatSizes['RGBA'].blockSize\r\n\r\nexport function decodeImage(inputBuffer: Uint8Array, imageFormat: string, layer: LayerInfo): Uint8Array {\r\n const shape = layer.shape\r\n const format = formatSizes[imageFormat]\r\n const decodeFunc = blockDecode[imageFormat]\r\n const blockIDWidth = Math.floor((shape.width + format.blockWidth - 1) / format.blockWidth)\r\n const blockIDHeight = Math.floor((shape.height + format.blockHeight - 1) / format.blockHeight)\r\n\r\n var resultImage = new Uint8Array(shape.width * shape.height * rgbaPixelSize)\r\n var offsetIn = layer.offset\r\n for (var y = 0; y < blockIDHeight; y++) {\r\n const startPixelY = y * format.blockHeight\r\n const blockYCount = startPixelY + format.blockHeight > shape.height ? shape.height - startPixelY : format.blockHeight\r\n\r\n for (var x = 0; x < blockIDWidth; x++) {\r\n const uint8Buffer = new Uint8Array(inputBuffer.buffer, inputBuffer.byteOffset + offsetIn, format.blockSize)\r\n const workBuffer = decodeFunc(uint8Buffer, format)\r\n\r\n const startPixelX = x * format.blockWidth\r\n const blockXCount = startPixelX + format.blockWidth > shape.width ? shape.width - startPixelX : format.blockWidth\r\n const copySize = blockXCount * rgbaPixelSize\r\n\r\n for (var i = 0; i < blockYCount; i++) {\r\n const sourceStart = i * format.blockWidth * rgbaPixelSize\r\n const targetStart = ((startPixelY + i) * shape.width + startPixelX) * rgbaPixelSize\r\n resultImage.set(workBuffer.subarray(sourceStart, sourceStart + copySize), targetStart)\r\n }\r\n\r\n offsetIn += format.blockSize\r\n }\r\n }\r\n\r\n return resultImage\r\n}","import { Texture2D } from \"../Classes/Texture2D.js\";\r\nimport { TextureFormat } from \"../Enums/TextureFormat.js\";\r\n\r\nimport { decodeImage } from \"./ImageDecoders/decode.js\"; \r\n\r\nimport { encodePng } from '@lunapaint/png-codec';\r\n\r\nexport async function ExportTexture2D(m_Texture2D: Texture2D): Promise<string | null> {\r\n if (m_Texture2D.image_data.size === 0 || m_Texture2D.m_Width <= 0 || m_Texture2D.m_Height <= 0) {\r\n console.error(\"Tried to decode an image with no image_data, or with no size...\");\r\n return null;\r\n }\r\n\r\n const imageBlob = m_Texture2D.image_data.GetData();\r\n if (imageBlob === null) {\r\n console.error(\"Could not read texture data from resS...\");\r\n return null;\r\n }\r\n\r\n let outputImage = new Uint8Array(m_Texture2D.m_Width * m_Texture2D.m_Height * 4);\r\n let outputImageSuccess = false;\r\n\r\n if (m_Texture2D.m_TextureFormat === TextureFormat.DXT1) {\r\n outputImageSuccess = ExportDXT1(imageBlob, outputImage, m_Texture2D.m_Width, m_Texture2D.m_Height);\r\n } else if (m_Texture2D.m_TextureFormat === TextureFormat.RGBA32) {\r\n outputImage = new Uint8Array(imageBlob);\r\n outputImageSuccess = true;\r\n } else if (m_Texture2D.m_TextureFormat === TextureFormat.DXT5) {\r\n outputImageSuccess = ExportDXT5(imageBlob, outputImage, m_Texture2D.m_Width, m_Texture2D.m_Height);\r\n } else if (m_Texture2D.m_TextureFormat === TextureFormat.BC7) {\r\n outputImageSuccess = ExportBC7(imageBlob, outputImage, m_Texture2D.m_Width, m_Texture2D.m_Height);\r\n } else {\r\n console.log(`Unknown image format ${m_Texture2D.m_TextureFormat}`);\r\n }\r\n\r\n if (!outputImageSuccess) {\r\n return null;\r\n }\r\n\r\n const width = m_Texture2D.m_Width;\r\n const height = m_Texture2D.m_Height;\r\n const flipped = new Uint8Array(outputImage.length);\r\n\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const srcIndex = (y * width + x) * 4;\r\n const dstIndex = ((height - 1 - y) * width + x) * 4;\r\n\r\n flipped[dstIndex] = outputImage[srcIndex];\r\n flipped[dstIndex + 1] = outputImage[srcIndex + 1];\r\n flipped[dstIndex + 2] = outputImage[srcIndex + 2];\r\n flipped[dstIndex + 3] = outputImage[srcIndex + 3];\r\n }\r\n }\r\n\r\n const pngData = await encodePng({ data: flipped, width: m_Texture2D.m_Width, height: m_Texture2D.m_Height });\r\n\r\n let binary = \"\";\r\n for (let i = 0; i < pngData.data.length; i++) {\r\n binary += String.fromCharCode(pngData.data[i]);\r\n }\r\n\r\n const base64 = btoa(binary);\r\n\r\n return `data:image/png;base64,${base64}`;\r\n}\r\n\r\nfunction ExportDXT1(input: Uint8Array, outputRef: Uint8Array, width: number, height: number): boolean {\r\n try {\r\n const view = new DataView(input.buffer, 0, input.length);\r\n const decoded = decodeBC1(view, width, height);\r\n outputRef.set(decoded);\r\n } catch (err) {\r\n console.error(`Failed to decode img: ${err}`);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction ExportDXT5(input: Uint8Array, outputRef: Uint8Array, width: number, height: number): boolean {\r\n try {\r\n const view = new DataView(input.buffer, 0, input.length);\r\n const decoded = decodeBC3(view, width, height, false);\r\n outputRef.set(decoded);\r\n } catch (err) {\r\n console.error(`Failed to decode img: ${err}`);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction ExportBC7(input: Uint8Array, outputRef: Uint8Array, width: number, height: number): boolean {\r\n try {\r\n const decoded = decodeImage(input, 'BC7', {offset: 0, length: input.length, shape: {width: width, height: height}});\r\n outputRef.set(decoded);\r\n } catch (err) {\r\n console.error(`Failed to decode img: ${err}`);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/*\r\n BC1 and BC3 decoding from https://github.com/kchapelier/decode-dxt\r\n*/\r\n\r\nfunction decodeBC1(imageData: DataView, width: number, height: number): Uint8Array {\r\n var rgba = new Uint8Array(width * height * 4),\r\n height_4 = (height / 4) | 0,\r\n width_4 = (width / 4) | 0,\r\n offset = 0,\r\n colorValues,\r\n colorIndices,\r\n colorIndex,\r\n pixelIndex,\r\n rgbaIndex,\r\n h,\r\n w,\r\n x,\r\n y;\r\n\r\n for (h = 0; h < height_4; h++) {\r\n for (w = 0; w < width_4; w++) {\r\n colorValues = interpolateColorValues(imageData.getUint16(offset, true), imageData.getUint16(offset + 2, true), true);\r\n colorIndices = imageData.getUint32(offset + 4, true);\r\n\r\n for (y = 0; y < 4; y++) {\r\n for (x = 0; x < 4; x++) {\r\n pixelIndex = (3 - x) + (y * 4);\r\n rgbaIndex = (h * 4 + 3 - y) * width * 4 + (w * 4 + x) * 4;\r\n colorIndex = (colorIndices >> (2 * (15 - pixelIndex))) & 0x03;\r\n rgba[rgbaIndex] = colorValues[colorIndex * 4];\r\n rgba[rgbaIndex + 1] = colorValues[colorIndex * 4 + 1];\r\n rgba[rgbaIndex + 2] = colorValues[colorIndex * 4 + 2];\r\n rgba[rgbaIndex + 3] = colorValues[colorIndex * 4 + 3];\r\n }\r\n }\r\n\r\n offset += 8;\r\n }\r\n }\r\n\r\n return rgba;\r\n}\r\n\r\nfunction interpolateColorValues(firstVal: number, secondVal: number, isDxt1: boolean) {\r\n var firstColor = convert565ByteToRgb(firstVal),\r\n secondColor = convert565ByteToRgb(secondVal),\r\n colorValues = ([] as number[]).concat(firstColor, 255, secondColor, 255);\r\n\r\n if (isDxt1 && firstVal <= secondVal) {\r\n colorValues.push(\r\n Math.round((firstColor[0] + secondColor[0]) / 2),\r\n Math.round((firstColor[1] + secondColor[1]) / 2),\r\n Math.round((firstColor[2] + secondColor[2]) / 2),\r\n 255,\r\n\r\n 0,\r\n 0,\r\n 0,\r\n 0\r\n );\r\n } else {\r\n colorValues.push(\r\n Math.round(lerp(firstColor[0], secondColor[0], 1 / 3)),\r\n Math.round(lerp(firstColor[1], secondColor[1], 1 / 3)),\r\n Math.round(lerp(firstColor[2], secondColor[2], 1 / 3)),\r\n 255,\r\n\r\n Math.round(lerp(firstColor[0], secondColor[0], 2 / 3)),\r\n Math.round(lerp(firstColor[1], secondColor[1], 2 / 3)),\r\n Math.round(lerp(firstColor[2], secondColor[2], 2 / 3)),\r\n 255\r\n );\r\n }\r\n\r\n return colorValues;\r\n};\r\n\r\nfunction convert565ByteToRgb(byte: number) {\r\n return [\r\n Math.round(((byte >>> 11) & 31) * (255 / 31)),\r\n Math.round(((byte >>> 5) & 63) * (255 / 63)),\r\n Math.round((byte & 31) * (255 / 31))\r\n ];\r\n};\r\n\r\nfunction lerp(v1: number, v2: number, r: number) {\r\n return v1 * (1 - r) + v2 * r;\r\n};\r\n\r\nfunction decodeBC3 (imageData: DataView, width: number, height: number, premultiplied: boolean) {\r\n var rgba = new Uint8Array(width * height * 4),\r\n height_4 = (height / 4) | 0,\r\n width_4 = (width / 4) | 0,\r\n offset = 0,\r\n alphaValues,\r\n alphaIndices,\r\n alphaIndex,\r\n alphaValue,\r\n multiplier,\r\n colorValues,\r\n colorIndices,\r\n colorIndex,\r\n pixelIndex,\r\n rgbaIndex,\r\n h,\r\n w,\r\n x,\r\n y;\r\n\r\n for (h = 0; h < height_4; h++) {\r\n for (w = 0; w < width_4; w++) {\r\n alphaValues = interpolateAlphaValues(imageData.getUint8(offset), imageData.getUint8(offset + 1));\r\n alphaIndices = [\r\n imageData.getUint16(offset + 6, true),\r\n imageData.getUint16(offset + 4, true),\r\n imageData.getUint16(offset + 2, true)\r\n ];\r\n\r\n colorValues = interpolateColorValues(imageData.getUint16(offset + 8, true), imageData.getUint16(offset + 10, true), false);\r\n colorIndices = imageData.getUint32(offset + 12, true);\r\n\r\n for (y = 0; y < 4; y++) {\r\n for (x = 0; x < 4; x++) {\r\n pixelIndex = (3 - x) + (y * 4);\r\n rgbaIndex = (h * 4 + 3 - y) * width * 4 + (w * 4 + x) * 4;\r\n colorIndex = (colorIndices >> (2 * (15 - pixelIndex))) & 0x03;\r\n alphaIndex = getAlphaIndex(alphaIndices, pixelIndex);\r\n alphaValue = alphaValues[alphaIndex];\r\n\r\n multiplier = premultiplied ? 255 / alphaValue : 1;\r\n\r\n rgba[rgbaIndex] = multiply(colorValues[colorIndex * 4], multiplier);\r\n rgba[rgbaIndex + 1] = multiply(colorValues[colorIndex * 4 + 1], multiplier);\r\n rgba[rgbaIndex + 2] = multiply(colorValues[colorIndex * 4 + 2], multiplier);\r\n rgba[rgbaIndex + 3] = alphaValue\r\n }\r\n }\r\n\r\n offset += 16;\r\n }\r\n }\r\n\r\n return rgba;\r\n};\r\n\r\nfunction interpolateAlphaValues (firstVal: number, secondVal: number) {\r\n var alphaValues = [firstVal, secondVal];\r\n\r\n if (firstVal > secondVal) {\r\n alphaValues.push(\r\n Math.floor(lerp(firstVal, secondVal, 1 / 7)),\r\n Math.floor(lerp(firstVal, secondVal, 2 / 7)),\r\n Math.floor(lerp(firstVal, secondVal, 3 / 7)),\r\n Math.floor(lerp(firstVal, secondVal, 4 / 7)),\r\n Math.floor(lerp(firstVal, secondVal, 5 / 7)),\r\n Math.floor(lerp(firstVal, secondVal, 6 / 7))\r\n );\r\n } else {\r\n alphaValues.push(\r\n Math.floor(lerp(firstVal, secondVal, 1 / 5)),\r\n Math.floor(lerp(firstVal, secondVal, 2 / 5)),\r\n Math.floor(lerp(firstVal, secondVal, 3 / 5)),\r\n Math.floor(lerp(firstVal, secondVal, 4 / 5)),\r\n 0,\r\n 255\r\n );\r\n }\r\n\r\n return alphaValues;\r\n};\r\n\r\nfunction multiply(component: number, multiplier: number) {\r\n if (!isFinite(multiplier) || multiplier === 0) {\r\n return 0;\r\n }\r\n\r\n return Math.round(component * multiplier);\r\n};\r\n\r\nfunction getAlphaIndex (alphaIndices: number[], pixelIndex: number) {\r\n return extractBitsFromUin16Array(alphaIndices, (3 * (15 - pixelIndex)), 3);\r\n};\r\n\r\nfunction extractBitsFromUin16Array (array: number[], shift: number, length: number) {\r\n // sadly while javascript operates with doubles, it does all its binary operations on 32 bytes integers\r\n // so we have to get a bit dirty to do the bitshifting on the 48 bytes integer for the alpha values of DXT5\r\n\r\n var height = array.length,\r\n heightm1 = height - 1,\r\n width = 16,\r\n rowS = ((shift / width) | 0),\r\n rowE = (((shift + length - 1) / width) | 0),\r\n shiftS,\r\n shiftE,\r\n result;\r\n\r\n if (rowS === rowE) {\r\n // all the requested bits are contained in a single uint16\r\n shiftS = (shift % width);\r\n result = (array[heightm1 - rowS] >> shiftS) & (Math.pow(2, length) - 1);\r\n } else {\r\n // the requested bits are contained in two continuous uint16\r\n shiftS = (shift % width);\r\n shiftE = (width - shiftS);\r\n result = (array[heightm1 - rowS] >> shiftS) & (Math.pow(2, length) - 1);\r\n result += (array[heightm1 - rowE] & (Math.pow(2, length - shiftE) - 1)) << shiftE;\r\n }\r\n\r\n return result;\r\n};","import { EndianBinaryReader } from \"./Util/EndianBinaryReader.js\";\r\nimport { FileReader } from \"./Util/FileReader.js\";\r\nimport { FileType } from \"./Enums/FileType.js\";\r\nimport { ClassIDType } from \"./Enums/ClassIDType.js\"\r\nimport { BundleFile } from \"./Files/Bundle/BundleFile.js\";\r\nimport { UnityVersion } from \"./Util/UnityVersions.js\"\r\nimport { SerializedFile } from \"./Files/Serialized/SerializedFile.js\"\r\nimport { SerializedFileFormatVersion } from \"./Files/Serialized/Models/SerializedFileFormatVersion.js\"\r\nimport { ObjectReader } from \"./Util/ObjectReader.js\";\r\nimport { UnityObject } from \"./Classes/Object.js\";\r\nimport { Texture2D } from \"./Classes/Texture2D.js\";\r\nimport path from \"./Util/path/index.js\";\r\n\r\nexport class AssetsManager {\r\n public loadedAssetsFileNames: string[] = [];\r\n public loadedAssetsFiles: SerializedFile[] = [];\r\n public resourceReaders = new Map<string, FileReader>()\r\n\r\n public LoadFile(data: ArrayBuffer, name: string) {\r\n const endianReader = new EndianBinaryReader(data)\r\n const fileReader = new FileReader(name, endianReader);\r\n\r\n this.LoadFileByType(fileReader);\r\n }\r\n\r\n private LoadFileByType(reader: FileReader) {\r\n switch (reader.FileType) {\r\n case FileType.BundleFile:\r\n this.LoadBundleFile(reader);\r\n }\r\n\r\n this.ReadAssets();\r\n }\r\n\r\n private LoadBundleFile(reader: FileReader) {\r\n const bundleFile = new BundleFile(reader, false);\r\n console.log(bundleFile);\r\n\r\n let isLoaded = this.LoadBundleFiles(reader, bundleFile)\r\n\r\n if (bundleFile.IsDataAfterBundle) {\r\n throw new Error(\"Data after bundle not supported\") //TODO\r\n }\r\n\r\n return isLoaded\r\n }\r\n\r\n private LoadBundleFiles(reader: FileReader, bundle: BundleFile): boolean {\r\n for (const file of bundle.fileList) {\r\n if (file.stream.isAllZero()) {\r\n continue;\r\n }\r\n\r\n file.stream.offset = 0;\r\n\r\n const dummyPath = path.join(path.dirname(reader.FullPath), file.fileName);\r\n const subReader = new FileReader(dummyPath, file.stream)\r\n if (subReader.FileType == FileType.AssetsFile) {\r\n if (!this.LoadAssetsFromMemory(subReader, reader.FullPath, bundle.m_Header.unityRevision)) {\r\n return false;\r\n }\r\n } else {\r\n console.log(`Setting resS with len: ${subReader.view.byteLength}`);\r\n this.resourceReaders.set(file.fileName, subReader);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private LoadAssetsFromMemory(reader: FileReader, originalPath: string, assetBundleUnityVersion?: UnityVersion): boolean {\r\n if (reader.FileName in this.loadedAssetsFileNames) {\r\n console.info(`Skipping ${reader.FileName} as it is loaded already`);\r\n\r\n return true;\r\n }\r\n\r\n try {\r\n const assetsFile = new SerializedFile(reader, this);\r\n assetsFile.originalPath = originalPath;\r\n\r\n if (assetBundleUnityVersion !== undefined && assetsFile.header.m_Version < SerializedFileFormatVersion.Unknown_7) {\r\n assetsFile.version = assetBundleUnityVersion;\r\n }\r\n\r\n if (assetsFile.version.isStripped) {\r\n if (assetBundleUnityVersion === undefined) {\r\n throw new Error(\"AssetsFile UnityVersion was stripped and could not be found\");\r\n }\r\n\r\n console.warn(`AssetsFile UnityVersion was stripped. Assumed version is ${assetBundleUnityVersion.toString()}`);\r\n assetsFile.version = assetBundleUnityVersion;\r\n }\r\n\r\n this.loadedAssetsFiles.push(assetsFile);\r\n this.loadedAssetsFileNames.push(reader.FileName);\r\n\r\n } catch (err) {\r\n console.warn(`Failed to load AssetsFile: ${reader.FileName} It may be a resS ${err}`);\r\n\r\n this.resourceReaders.set(reader.FileName, reader);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private ReadAssets() {\r\n for (let assetsFile of this.loadedAssetsFiles) {\r\n for (let objectInfo of assetsFile.m_Objects) {\r\n let objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo);\r\n //try {\r\n let obj: UnityObject | null = null;\r\n\r\n if (objectReader.type == ClassIDType.Texture2D) {\r\n obj = new Texture2D(objectReader);\r\n } else {\r\n obj = new UnityObject(objectReader);\r\n }\r\n\r\n if (obj !== null) {\r\n assetsFile.AddObject(obj);\r\n }\r\n\r\n //} catch (err) {\r\n // console.error(`Failed to load object ${assetsFile.originalPath} error: ${err}`);\r\n //}\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { ExportTexture2D } from \"./Exporters/Texture2D.js\";\r\nexport { Texture2D } from \"./Classes/Texture2D.js\";\r\n"],"mappings":"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,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAClC,CAAC;AAEM,IAAM,cAAc,IAAI,WAAW;AAAA,EACtC;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAC9B;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE;AAAA,EAAE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","names":["isAbsolute","ClassIDType","hashTable","percent","SerializedFile","i","rgbaPixelSize","format","AssetsManager","SerializedFile"]}