@twin.org/image 0.0.3-next.36 → 0.0.3-next.38
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.
|
@@ -227,9 +227,6 @@ export class JpegEncoder {
|
|
|
227
227
|
x = 0;
|
|
228
228
|
while (x < quadWidth) {
|
|
229
229
|
start = quadWidth * y + x;
|
|
230
|
-
p = start;
|
|
231
|
-
col = -1;
|
|
232
|
-
row = 0;
|
|
233
230
|
for (pos = 0; pos < 64; pos++) {
|
|
234
231
|
row = pos >> 3; // /8
|
|
235
232
|
col = (pos & 7) * 4; // %8
|
|
@@ -244,7 +241,7 @@ export class JpegEncoder {
|
|
|
244
241
|
}
|
|
245
242
|
r = imageData[p++];
|
|
246
243
|
g = imageData[p++];
|
|
247
|
-
b = imageData[p
|
|
244
|
+
b = imageData[p];
|
|
248
245
|
// use lookup table (slightly faster)
|
|
249
246
|
this._ydu[pos] =
|
|
250
247
|
((this._rgbYuvTable[r] +
|
|
@@ -295,7 +292,7 @@ export class JpegEncoder {
|
|
|
295
292
|
if (quality <= 0 || quality > 100) {
|
|
296
293
|
throw new GeneralError(JpegEncoder.CLASS_NAME, "invalidQuality", { value: quality });
|
|
297
294
|
}
|
|
298
|
-
let sf
|
|
295
|
+
let sf;
|
|
299
296
|
if (quality < 50) {
|
|
300
297
|
sf = Math.floor(5000 / quality);
|
|
301
298
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jpegEncoder.js","sourceRoot":"","sources":["../../../src/encoders/jpegEncoder.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,+BAA+B;AAC/B,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;;GAGG;AACH,MAAM,OAAO,WAAW;IACvB;;OAEG;IACI,MAAM,CAAU,UAAU,iBAAiC;IAElE;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACjD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;KACpC,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;KACpD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\nimport { GeneralError } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\n\n/**\n * JPEG Encoder.\n * Based on JPEG encoder ported to JavaScript and optimized by Andreas Ritter.\n */\nexport class JpegEncoder {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<JpegEncoder>();\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_VALUES: number[] = [\n\t\t0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,\n\t\t0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,\n\t\t0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,\n\t\t0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,\n\t\t0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\n\t\t0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\n\t\t0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n\t\t0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,\n\t\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,\n\t\t0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_VALUES: number[] = [\n\t\t0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,\n\t\t0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,\n\t\t0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,\n\t\t0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,\n\t\t0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,\n\t\t0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,\n\t\t0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,\n\t\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,\n\t\t0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,\n\t\t0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/** @internal */\n\tprivate static readonly _SIG_ZAG: number[] = [\n\t\t0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11,\n\t\t18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34,\n\t\t37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _yTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _uvTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblY: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblUV: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _ydcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVdcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _yacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _bitCode: number[][];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _category: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _outputFDctQuant: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _du: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteOut: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteNew: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _bytePos: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _ydu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _udu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _vdu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _rgbYuvTable: number[];\n\n\t/**\n\t * Create a new instance of JpegEncoder.\n\t */\n\tconstructor() {\n\t\tthis._yTable = Array.from({ length: 64 });\n\t\tthis._uvTable = Array.from({ length: 64 });\n\t\tthis._fdTblY = Array.from({ length: 64 });\n\t\tthis._fdTblUV = Array.from({ length: 64 });\n\n\t\tthis._bitCode = Array.from({ length: 65535 });\n\t\tthis._category = Array.from({ length: 65535 });\n\t\tthis._outputFDctQuant = Array.from({ length: 64 });\n\t\tthis._du = Array.from({ length: 64 });\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tthis._ydu = Array.from({ length: 64 });\n\t\tthis._udu = Array.from({ length: 64 });\n\t\tthis._vdu = Array.from({ length: 64 });\n\t\tthis._rgbYuvTable = Array.from({ length: 2048 });\n\n\t\tthis.initHuffmanTbl();\n\t\tthis.initCategoryNumber();\n\t\tthis.initRGBYUVTable();\n\t}\n\n\t/**\n\t * Encode the image with the given quality.\n\t * @param width The width of the image to encode.\n\t * @param height The height of the image to encode.\n\t * @param imageData The data for the image.\n\t * @param quality The quality to encode the image at.\n\t * @returns The data for the encoded image.\n\t */\n\tpublic encode(width: number, height: number, imageData: Uint8Array, quality: number): Uint8Array {\n\t\tthis.setQuality(quality);\n\n\t\t// Initialize bit writer\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\t// Add JPEG headers\n\t\tthis.writeWord(0xffd8); // SOI\n\t\tthis.writeAPP0();\n\t\tthis.writeDQT();\n\t\tthis.writeSOF0(width, height);\n\t\tthis.writeDHT();\n\t\tthis.writeSOS();\n\n\t\t// Encode 8x8 macro blocks\n\t\tlet DCY = 0;\n\t\tlet DCU = 0;\n\t\tlet DCV = 0;\n\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tconst quadWidth = width * 4;\n\n\t\tlet x;\n\t\tlet y = 0;\n\t\tlet r;\n\t\tlet g;\n\t\tlet b;\n\t\tlet start;\n\t\tlet p;\n\t\tlet col;\n\t\tlet row;\n\t\tlet pos;\n\t\twhile (y < height) {\n\t\t\tx = 0;\n\t\t\twhile (x < quadWidth) {\n\t\t\t\tstart = quadWidth * y + x;\n\t\t\t\tp = start;\n\t\t\t\tcol = -1;\n\t\t\t\trow = 0;\n\n\t\t\t\tfor (pos = 0; pos < 64; pos++) {\n\t\t\t\t\trow = pos >> 3; // /8\n\t\t\t\t\tcol = (pos & 7) * 4; // %8\n\t\t\t\t\tp = start + row * quadWidth + col;\n\n\t\t\t\t\tif (y + row >= height) {\n\t\t\t\t\t\t// padding bottom\n\t\t\t\t\t\tp -= quadWidth * (y + 1 + row - height);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (x + col >= quadWidth) {\n\t\t\t\t\t\t// padding right\n\t\t\t\t\t\tp -= x + col - quadWidth + 4;\n\t\t\t\t\t}\n\n\t\t\t\t\tr = imageData[p++];\n\t\t\t\t\tg = imageData[p++];\n\t\t\t\t\tb = imageData[p++];\n\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tthis._ydu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[r] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 256)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 512)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._udu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 768)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1024)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1280)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._vdu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 1280)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1536)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1792)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t}\n\n\t\t\t\tif (this._ydcHashTable && this._yacHashTable) {\n\t\t\t\t\tDCY = this.processDU(\n\t\t\t\t\t\tthis._ydu,\n\t\t\t\t\t\tthis._fdTblY,\n\t\t\t\t\t\tDCY,\n\t\t\t\t\t\tthis._ydcHashTable,\n\t\t\t\t\t\tthis._yacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCU = this.processDU(\n\t\t\t\t\t\tthis._udu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCU,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCV = this.processDU(\n\t\t\t\t\t\tthis._vdu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCV,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tx += 32;\n\t\t\t}\n\t\t\ty += 8;\n\t\t}\n\n\t\t// Do the bit alignment of the EOI marker\n\t\tif (this._bytePos >= 0) {\n\t\t\tconst fillBits = [];\n\t\t\tfillBits[1] = this._bytePos + 1;\n\t\t\tfillBits[0] = (1 << (this._bytePos + 1)) - 1;\n\t\t\tthis.writeBits(fillBits);\n\t\t}\n\n\t\tthis.writeWord(0xffd9); // EOI\n\n\t\treturn new Uint8Array(this._byteOut);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setQuality(quality: number): void {\n\t\tif (quality <= 0 || quality > 100) {\n\t\t\tthrow new GeneralError(JpegEncoder.CLASS_NAME, \"invalidQuality\", { value: quality });\n\t\t}\n\n\t\tlet sf = 0;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality * 2);\n\t\t}\n\n\t\tthis.initQuantTables(sf);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initQuantTables(sf: number): void {\n\t\tconst YQT = [\n\t\t\t16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69,\n\t\t\t56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104,\n\t\t\t113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99\n\t\t];\n\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tlet t = Math.floor((YQT[i] * sf + 50) / 100);\n\t\t\tif (t < 1) {\n\t\t\t\tt = 1;\n\t\t\t} else if (t > 255) {\n\t\t\t\tt = 255;\n\t\t\t}\n\t\t\tthis._yTable[JpegEncoder._SIG_ZAG[i]] = t;\n\t\t}\n\t\tconst UVQT = [\n\t\t\t17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99,\n\t\t\t99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99\n\t\t];\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tlet u = Math.floor((UVQT[j] * sf + 50) / 100);\n\t\t\tif (u < 1) {\n\t\t\t\tu = 1;\n\t\t\t} else if (u > 255) {\n\t\t\t\tu = 255;\n\t\t\t}\n\t\t\tthis._uvTable[JpegEncoder._SIG_ZAG[j]] = u;\n\t\t}\n\t\tconst aAsf = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n\t\tlet k = 0;\n\t\tfor (let row = 0; row < 8; row++) {\n\t\t\tfor (let col = 0; col < 8; col++) {\n\t\t\t\tthis._fdTblY[k] = 1 / (this._yTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tthis._fdTblUV[k] = 1 / (this._uvTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tk++;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate computeHuffmanTbl(nrCodes: number[], stdTable: number[]): number[][] {\n\t\tlet codeValue = 0;\n\t\tlet posInTable = 0;\n\t\tconst HT: number[][] = [];\n\t\tfor (let k = 1; k <= 16; k++) {\n\t\t\tfor (let j = 1; j <= nrCodes[k]; j++) {\n\t\t\t\tHT[stdTable[posInTable]] = [];\n\t\t\t\tHT[stdTable[posInTable]][0] = codeValue;\n\t\t\t\tHT[stdTable[posInTable]][1] = k;\n\t\t\t\tposInTable++;\n\t\t\t\tcodeValue++;\n\t\t\t}\n\t\t\tcodeValue *= 2;\n\t\t}\n\t\treturn HT;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initHuffmanTbl(): void {\n\t\tthis._ydcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVdcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_VALUES\n\t\t);\n\t\tthis._yacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_VALUES\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initCategoryNumber(): void {\n\t\tlet nrLower = 1;\n\t\tlet nrUpper = 2;\n\t\tfor (let cat = 1; cat <= 15; cat++) {\n\t\t\t// Positive numbers\n\t\t\tfor (let nr = nrLower; nr < nrUpper; nr++) {\n\t\t\t\tthis._category[32767 + nr] = cat;\n\t\t\t\tthis._bitCode[32767 + nr] = [];\n\t\t\t\tthis._bitCode[32767 + nr][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nr][0] = nr;\n\t\t\t}\n\t\t\t// Negative numbers\n\t\t\tfor (let nrNeg = -(nrUpper - 1); nrNeg <= -nrLower; nrNeg++) {\n\t\t\t\tthis._category[32767 + nrNeg] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg] = [];\n\t\t\t\tthis._bitCode[32767 + nrNeg][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg][0] = nrUpper - 1 + nrNeg;\n\t\t\t}\n\t\t\tnrLower <<= 1;\n\t\t\tnrUpper <<= 1;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initRGBYUVTable(): void {\n\t\tfor (let i = 0; i < 256; i++) {\n\t\t\tthis._rgbYuvTable[i] = 19595 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 256)] = 38470 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 512)] = 7471 * i + 0x8000;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 768)] = -11059 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1024)] = -21709 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1280)] = 32768 * i + 0x807fff;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1536)] = -27439 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1792)] = -5329 * i;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeBits(bs: number[]): void {\n\t\tconst value = bs[0];\n\t\tlet posVal = bs[1] - 1;\n\t\twhile (posVal >= 0) {\n\t\t\tif (value & (1 << posVal)) {\n\t\t\t\tthis._byteNew |= 1 << this._bytePos;\n\t\t\t}\n\t\t\tposVal--;\n\t\t\tthis._bytePos--;\n\t\t\tif (this._bytePos < 0) {\n\t\t\t\tif (this._byteNew === 0xff) {\n\t\t\t\t\tthis.writeByte(0xff);\n\t\t\t\t\tthis.writeByte(0);\n\t\t\t\t} else {\n\t\t\t\t\tthis.writeByte(this._byteNew);\n\t\t\t\t}\n\t\t\t\tthis._bytePos = 7;\n\t\t\t\tthis._byteNew = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeByte(value: number): void {\n\t\tthis._byteOut.push(value);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeWord(value: number): void {\n\t\tthis.writeByte((value >> 8) & 0xff);\n\t\tthis.writeByte(value & 0xff);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate fDCTQuant(data: number[], fdTbl: number[]): number[] {\n\t\tlet d0;\n\t\tlet d1;\n\t\tlet d2;\n\t\tlet d3;\n\t\tlet d4;\n\t\tlet d5;\n\t\tlet d6;\n\t\tlet d7;\n\t\t/* Pass 1: process rows. */\n\t\tlet dataOff = 0;\n\t\tlet i;\n\t\tconst I8 = 8;\n\t\tconst I64 = 64;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 1];\n\t\t\td2 = data[dataOff + 2];\n\t\t\td3 = data[dataOff + 3];\n\t\t\td4 = data[dataOff + 4];\n\t\t\td5 = data[dataOff + 5];\n\t\t\td6 = data[dataOff + 6];\n\t\t\td7 = data[dataOff + 7];\n\n\t\t\tconst tmp0 = d0 + d7;\n\t\t\tconst tmp7 = d0 - d7;\n\t\t\tconst tmp1 = d1 + d6;\n\t\t\tconst tmp6 = d1 - d6;\n\t\t\tconst tmp2 = d2 + d5;\n\t\t\tconst tmp5 = d2 - d5;\n\t\t\tconst tmp3 = d3 + d4;\n\t\t\tconst tmp4 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10 = tmp0 + tmp3; /* phase 2 */\n\t\t\tconst tmp13 = tmp0 - tmp3;\n\t\t\tlet tmp11 = tmp1 + tmp2;\n\t\t\tlet tmp12 = tmp1 - tmp2;\n\n\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\tdata[dataOff + 4] = tmp10 - tmp11;\n\n\t\t\tconst z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 2] = tmp13 + z1; /* phase 5 */\n\t\t\tdata[dataOff + 6] = tmp13 - z1;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\ttmp12 = tmp6 + tmp7;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\tconst z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n\t\t\tconst z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\tconst z3 = tmp11 * 0.707106781; /* c4 */\n\n\t\t\tconst z11 = tmp7 + z3; /* phase 5 */\n\t\t\tconst z13 = tmp7 - z3;\n\n\t\t\tdata[dataOff + 5] = z13 + z2; /* phase 6 */\n\t\t\tdata[dataOff + 3] = z13 - z2;\n\t\t\tdata[dataOff + 1] = z11 + z4;\n\t\t\tdata[dataOff + 7] = z11 - z4;\n\n\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t}\n\n\t\t/* Pass 2: process columns. */\n\t\tdataOff = 0;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 8];\n\t\t\td2 = data[dataOff + 16];\n\t\t\td3 = data[dataOff + 24];\n\t\t\td4 = data[dataOff + 32];\n\t\t\td5 = data[dataOff + 40];\n\t\t\td6 = data[dataOff + 48];\n\t\t\td7 = data[dataOff + 56];\n\n\t\t\tconst tmp0p2 = d0 + d7;\n\t\t\tconst tmp7p2 = d0 - d7;\n\t\t\tconst tmp1p2 = d1 + d6;\n\t\t\tconst tmp6p2 = d1 - d6;\n\t\t\tconst tmp2p2 = d2 + d5;\n\t\t\tconst tmp5p2 = d2 - d5;\n\t\t\tconst tmp3p2 = d3 + d4;\n\t\t\tconst tmp4p2 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n\t\t\tconst tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\tlet tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\tlet tmp12p2 = tmp1p2 - tmp2p2;\n\n\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\tdata[dataOff + 32] = tmp10p2 - tmp11p2;\n\n\t\t\tconst z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\tdata[dataOff + 48] = tmp13p2 - z1p2;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\tconst z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\tconst z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\tconst z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n\t\t\tconst z11p2 = tmp7p2 + z3p2; /* phase 5 */\n\t\t\tconst z13p2 = tmp7p2 - z3p2;\n\n\t\t\tdata[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n\t\t\tdata[dataOff + 24] = z13p2 - z2p2;\n\t\t\tdata[dataOff + 8] = z11p2 + z4p2;\n\t\t\tdata[dataOff + 56] = z11p2 - z4p2;\n\n\t\t\tdataOff++; /* advance pointer to next column */\n\t\t}\n\n\t\t// Quantize/descale the coefficients\n\t\tlet fDCTQuant;\n\t\tfor (i = 0; i < I64; ++i) {\n\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\tfDCTQuant = data[i] * fdTbl[i];\n\t\t\tthis._outputFDctQuant[i] =\n\t\t\t\tfDCTQuant > 0 ? Math.trunc(fDCTQuant + 0.5) : Math.trunc(fDCTQuant - 0.5);\n\t\t}\n\t\treturn this._outputFDctQuant;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeAPP0(): void {\n\t\tthis.writeWord(0xffe0); // marker\n\t\tthis.writeWord(16); // length\n\t\tthis.writeByte(0x4a); // J\n\t\tthis.writeByte(0x46); // F\n\t\tthis.writeByte(0x49); // I\n\t\tthis.writeByte(0x46); // F\n\t\t// cspell:disable-next-line\n\t\tthis.writeByte(0); // = \"JFIF\",'\\0'\n\t\tthis.writeByte(1); // version hi\n\t\tthis.writeByte(1); // version lo\n\t\tthis.writeByte(0); // xy units\n\t\tthis.writeWord(1); // x density\n\t\tthis.writeWord(1); // y density\n\t\tthis.writeByte(0); // thumb n width\n\t\tthis.writeByte(0); // thumb n height\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeSOF0(width: number, height: number): void {\n\t\tthis.writeWord(0xffc0); // marker\n\t\tthis.writeWord(17); // length, true color YUV JPG\n\t\tthis.writeByte(8); // precision\n\t\tthis.writeWord(height);\n\t\tthis.writeWord(width);\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0x11); // HVY\n\t\tthis.writeByte(0); // QTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HVU\n\t\tthis.writeByte(1); // QTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HVV\n\t\tthis.writeByte(1); // QTV\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeDQT(): void {\n\t\tthis.writeWord(0xffdb); // marker\n\t\tthis.writeWord(132); // length\n\t\tthis.writeByte(0);\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tthis.writeByte(this._yTable[i]);\n\t\t}\n\t\tthis.writeByte(1);\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tthis.writeByte(this._uvTable[j]);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeDHT(): void {\n\t\tthis.writeWord(0xffc4); // marker\n\t\tthis.writeWord(0x01a2); // length\n\n\t\tthis.writeByte(0); // HTYDc info\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_NR_CODES[i + 1]);\n\t\t}\n\t\tfor (let j = 0; j <= 11; j++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_VALUES[j]);\n\t\t}\n\n\t\tthis.writeByte(0x10); // HTYAc info\n\t\tfor (let k = 0; k < 16; k++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_NR_CODES[k + 1]);\n\t\t}\n\t\tfor (let l = 0; l <= 161; l++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_VALUES[l]);\n\t\t}\n\n\t\tthis.writeByte(1); // HTUDc info\n\t\tfor (let m = 0; m < 16; m++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_NR_CODES[m + 1]);\n\t\t}\n\t\tfor (let n = 0; n <= 11; n++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_VALUES[n]);\n\t\t}\n\n\t\tthis.writeByte(0x11); // HTUAc info\n\t\tfor (let o = 0; o < 16; o++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_NR_CODES[o + 1]);\n\t\t}\n\t\tfor (let p = 0; p <= 161; p++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_VALUES[p]);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeSOS(): void {\n\t\tthis.writeWord(0xffda); // marker\n\t\tthis.writeWord(12); // length\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0); // HTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HTV\n\t\tthis.writeByte(0); // Ss\n\t\tthis.writeByte(0x3f); // Se\n\t\tthis.writeByte(0); // Bf\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate processDU(\n\t\tCDU: number[],\n\t\tfdTbl: number[],\n\t\tpassedDC: number,\n\t\tHTDc: number[][],\n\t\tHTAc: number[][]\n\t): number {\n\t\tlet DC = passedDC;\n\t\tconst EOB = HTAc[0x00];\n\t\tconst m16zeroes = HTAc[0xf0];\n\t\tlet pos;\n\t\tconst I16 = 16;\n\t\tconst I63 = 63;\n\t\tconst I64 = 64;\n\t\tconst DU_DCT = this.fDCTQuant(CDU, fdTbl);\n\t\t// ZigZag reorder\n\t\tfor (let j = 0; j < I64; ++j) {\n\t\t\tthis._du[JpegEncoder._SIG_ZAG[j]] = DU_DCT[j];\n\t\t}\n\t\tconst diff = this._du[0] - DC;\n\t\tDC = this._du[0];\n\t\t// Encode DC\n\t\tif (diff === 0) {\n\t\t\tthis.writeBits(HTDc[0]); // Diff might be 0\n\t\t} else {\n\t\t\tpos = 32767 + diff;\n\t\t\tthis.writeBits(HTDc[this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t}\n\t\t// Encode ACs\n\t\tlet end0pos = 63; // was const... which is crazy\n\t\tfor (; end0pos > 0 && this._du[end0pos] === 0; end0pos--) {}\n\t\t// end0pos = first element in reverse order !=0\n\t\tif (end0pos === 0) {\n\t\t\tthis.writeBits(EOB);\n\t\t\treturn DC;\n\t\t}\n\t\tlet i = 1;\n\t\tlet lng;\n\t\twhile (i <= end0pos) {\n\t\t\tconst startPos = i;\n\t\t\tfor (; this._du[i] === 0 && i <= end0pos; ++i) {}\n\t\t\tlet nrZeroes = i - startPos;\n\t\t\tif (nrZeroes >= I16) {\n\t\t\t\tlng = nrZeroes >> 4;\n\t\t\t\tfor (let nrMarker = 1; nrMarker <= lng; ++nrMarker) {\n\t\t\t\t\tthis.writeBits(m16zeroes);\n\t\t\t\t}\n\t\t\t\tnrZeroes &= 0xf;\n\t\t\t}\n\t\t\tpos = 32767 + this._du[i];\n\t\t\tthis.writeBits(HTAc[(nrZeroes << 4) + this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t\ti++;\n\t\t}\n\t\tif (end0pos !== I63) {\n\t\t\tthis.writeBits(EOB);\n\t\t}\n\t\treturn DC;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"jpegEncoder.js","sourceRoot":"","sources":["../../../src/encoders/jpegEncoder.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,+BAA+B;AAC/B,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;;GAGG;AACH,MAAM,OAAO,WAAW;IACvB;;OAEG;IACI,MAAM,CAAU,UAAU,iBAAiC;IAElE;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACjD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;KACpC,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,0BAA0B,GAAa;QAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;KACpD,CAAC;IAEF;;OAEG;IACK,MAAM,CAAU,wBAAwB,GAAa;QAC5D,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\nimport { GeneralError } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\n\n/**\n * JPEG Encoder.\n * Based on JPEG encoder ported to JavaScript and optimized by Andreas Ritter.\n */\nexport class JpegEncoder {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<JpegEncoder>();\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_LUMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_LUMINANCE_VALUES: number[] = [\n\t\t0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,\n\t\t0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,\n\t\t0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,\n\t\t0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,\n\t\t0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\n\t\t0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\n\t\t0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n\t\t0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,\n\t\t0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,\n\t\t0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_DC_CHROMINANCE_VALUES: number[] = [\n\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_NR_CODES: number[] = [\n\t\t0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _STD_AC_CHROMINANCE_VALUES: number[] = [\n\t\t0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,\n\t\t0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,\n\t\t0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,\n\t\t0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,\n\t\t0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,\n\t\t0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,\n\t\t0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,\n\t\t0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,\n\t\t0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,\n\t\t0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n\t\t0xf9, 0xfa\n\t];\n\n\t/** @internal */\n\tprivate static readonly _SIG_ZAG: number[] = [\n\t\t0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11,\n\t\t18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34,\n\t\t37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _yTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _uvTable: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblY: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _fdTblUV: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _ydcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVdcHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _yacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _uVacHashTable: number[][] | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _bitCode: number[][];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _category: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _outputFDctQuant: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _du: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteOut: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _byteNew: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _bytePos: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _ydu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _udu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _vdu: number[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _rgbYuvTable: number[];\n\n\t/**\n\t * Create a new instance of JpegEncoder.\n\t */\n\tconstructor() {\n\t\tthis._yTable = Array.from({ length: 64 });\n\t\tthis._uvTable = Array.from({ length: 64 });\n\t\tthis._fdTblY = Array.from({ length: 64 });\n\t\tthis._fdTblUV = Array.from({ length: 64 });\n\n\t\tthis._bitCode = Array.from({ length: 65535 });\n\t\tthis._category = Array.from({ length: 65535 });\n\t\tthis._outputFDctQuant = Array.from({ length: 64 });\n\t\tthis._du = Array.from({ length: 64 });\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tthis._ydu = Array.from({ length: 64 });\n\t\tthis._udu = Array.from({ length: 64 });\n\t\tthis._vdu = Array.from({ length: 64 });\n\t\tthis._rgbYuvTable = Array.from({ length: 2048 });\n\n\t\tthis.initHuffmanTbl();\n\t\tthis.initCategoryNumber();\n\t\tthis.initRGBYUVTable();\n\t}\n\n\t/**\n\t * Encode the image with the given quality.\n\t * @param width The width of the image to encode.\n\t * @param height The height of the image to encode.\n\t * @param imageData The data for the image.\n\t * @param quality The quality to encode the image at.\n\t * @returns The data for the encoded image.\n\t */\n\tpublic encode(width: number, height: number, imageData: Uint8Array, quality: number): Uint8Array {\n\t\tthis.setQuality(quality);\n\n\t\t// Initialize bit writer\n\t\tthis._byteOut = [];\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\t// Add JPEG headers\n\t\tthis.writeWord(0xffd8); // SOI\n\t\tthis.writeAPP0();\n\t\tthis.writeDQT();\n\t\tthis.writeSOF0(width, height);\n\t\tthis.writeDHT();\n\t\tthis.writeSOS();\n\n\t\t// Encode 8x8 macro blocks\n\t\tlet DCY = 0;\n\t\tlet DCU = 0;\n\t\tlet DCV = 0;\n\n\t\tthis._byteNew = 0;\n\t\tthis._bytePos = 7;\n\n\t\tconst quadWidth = width * 4;\n\n\t\tlet x;\n\t\tlet y = 0;\n\t\tlet r;\n\t\tlet g;\n\t\tlet b;\n\t\tlet start;\n\t\tlet p;\n\t\tlet col;\n\t\tlet row;\n\t\tlet pos;\n\t\twhile (y < height) {\n\t\t\tx = 0;\n\t\t\twhile (x < quadWidth) {\n\t\t\t\tstart = quadWidth * y + x;\n\n\t\t\t\tfor (pos = 0; pos < 64; pos++) {\n\t\t\t\t\trow = pos >> 3; // /8\n\t\t\t\t\tcol = (pos & 7) * 4; // %8\n\t\t\t\t\tp = start + row * quadWidth + col;\n\n\t\t\t\t\tif (y + row >= height) {\n\t\t\t\t\t\t// padding bottom\n\t\t\t\t\t\tp -= quadWidth * (y + 1 + row - height);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (x + col >= quadWidth) {\n\t\t\t\t\t\t// padding right\n\t\t\t\t\t\tp -= x + col - quadWidth + 4;\n\t\t\t\t\t}\n\n\t\t\t\t\tr = imageData[p++];\n\t\t\t\t\tg = imageData[p++];\n\t\t\t\t\tb = imageData[p];\n\n\t\t\t\t\t// use lookup table (slightly faster)\n\t\t\t\t\tthis._ydu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[r] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 256)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 512)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._udu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 768)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1024)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1280)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t\tthis._vdu[pos] =\n\t\t\t\t\t\t((this._rgbYuvTable[Math.trunc(r + 1280)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(g + 1536)] +\n\t\t\t\t\t\t\tthis._rgbYuvTable[Math.trunc(b + 1792)]) >>\n\t\t\t\t\t\t\t16) -\n\t\t\t\t\t\t128;\n\t\t\t\t}\n\n\t\t\t\tif (this._ydcHashTable && this._yacHashTable) {\n\t\t\t\t\tDCY = this.processDU(\n\t\t\t\t\t\tthis._ydu,\n\t\t\t\t\t\tthis._fdTblY,\n\t\t\t\t\t\tDCY,\n\t\t\t\t\t\tthis._ydcHashTable,\n\t\t\t\t\t\tthis._yacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCU = this.processDU(\n\t\t\t\t\t\tthis._udu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCU,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (this._uVdcHashTable && this._uVacHashTable) {\n\t\t\t\t\tDCV = this.processDU(\n\t\t\t\t\t\tthis._vdu,\n\t\t\t\t\t\tthis._fdTblUV,\n\t\t\t\t\t\tDCV,\n\t\t\t\t\t\tthis._uVdcHashTable,\n\t\t\t\t\t\tthis._uVacHashTable\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tx += 32;\n\t\t\t}\n\t\t\ty += 8;\n\t\t}\n\n\t\t// Do the bit alignment of the EOI marker\n\t\tif (this._bytePos >= 0) {\n\t\t\tconst fillBits = [];\n\t\t\tfillBits[1] = this._bytePos + 1;\n\t\t\tfillBits[0] = (1 << (this._bytePos + 1)) - 1;\n\t\t\tthis.writeBits(fillBits);\n\t\t}\n\n\t\tthis.writeWord(0xffd9); // EOI\n\n\t\treturn new Uint8Array(this._byteOut);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setQuality(quality: number): void {\n\t\tif (quality <= 0 || quality > 100) {\n\t\t\tthrow new GeneralError(JpegEncoder.CLASS_NAME, \"invalidQuality\", { value: quality });\n\t\t}\n\n\t\tlet sf;\n\t\tif (quality < 50) {\n\t\t\tsf = Math.floor(5000 / quality);\n\t\t} else {\n\t\t\tsf = Math.floor(200 - quality * 2);\n\t\t}\n\n\t\tthis.initQuantTables(sf);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initQuantTables(sf: number): void {\n\t\tconst YQT = [\n\t\t\t16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69,\n\t\t\t56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104,\n\t\t\t113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99\n\t\t];\n\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tlet t = Math.floor((YQT[i] * sf + 50) / 100);\n\t\t\tif (t < 1) {\n\t\t\t\tt = 1;\n\t\t\t} else if (t > 255) {\n\t\t\t\tt = 255;\n\t\t\t}\n\t\t\tthis._yTable[JpegEncoder._SIG_ZAG[i]] = t;\n\t\t}\n\t\tconst UVQT = [\n\t\t\t17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99,\n\t\t\t99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,\n\t\t\t99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99\n\t\t];\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tlet u = Math.floor((UVQT[j] * sf + 50) / 100);\n\t\t\tif (u < 1) {\n\t\t\t\tu = 1;\n\t\t\t} else if (u > 255) {\n\t\t\t\tu = 255;\n\t\t\t}\n\t\t\tthis._uvTable[JpegEncoder._SIG_ZAG[j]] = u;\n\t\t}\n\t\tconst aAsf = [1, 1.387039845, 1.306562965, 1.175875602, 1, 0.785694958, 0.5411961, 0.275899379];\n\t\tlet k = 0;\n\t\tfor (let row = 0; row < 8; row++) {\n\t\t\tfor (let col = 0; col < 8; col++) {\n\t\t\t\tthis._fdTblY[k] = 1 / (this._yTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tthis._fdTblUV[k] = 1 / (this._uvTable[JpegEncoder._SIG_ZAG[k]] * aAsf[row] * aAsf[col] * 8);\n\t\t\t\tk++;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate computeHuffmanTbl(nrCodes: number[], stdTable: number[]): number[][] {\n\t\tlet codeValue = 0;\n\t\tlet posInTable = 0;\n\t\tconst HT: number[][] = [];\n\t\tfor (let k = 1; k <= 16; k++) {\n\t\t\tfor (let j = 1; j <= nrCodes[k]; j++) {\n\t\t\t\tHT[stdTable[posInTable]] = [];\n\t\t\t\tHT[stdTable[posInTable]][0] = codeValue;\n\t\t\t\tHT[stdTable[posInTable]][1] = k;\n\t\t\t\tposInTable++;\n\t\t\t\tcodeValue++;\n\t\t\t}\n\t\t\tcodeValue *= 2;\n\t\t}\n\t\treturn HT;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initHuffmanTbl(): void {\n\t\tthis._ydcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVdcHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_DC_CHROMINANCE_VALUES\n\t\t);\n\t\tthis._yacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_LUMINANCE_VALUES\n\t\t);\n\t\tthis._uVacHashTable = this.computeHuffmanTbl(\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_NR_CODES,\n\t\t\tJpegEncoder._STD_AC_CHROMINANCE_VALUES\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initCategoryNumber(): void {\n\t\tlet nrLower = 1;\n\t\tlet nrUpper = 2;\n\t\tfor (let cat = 1; cat <= 15; cat++) {\n\t\t\t// Positive numbers\n\t\t\tfor (let nr = nrLower; nr < nrUpper; nr++) {\n\t\t\t\tthis._category[32767 + nr] = cat;\n\t\t\t\tthis._bitCode[32767 + nr] = [];\n\t\t\t\tthis._bitCode[32767 + nr][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nr][0] = nr;\n\t\t\t}\n\t\t\t// Negative numbers\n\t\t\tfor (let nrNeg = -(nrUpper - 1); nrNeg <= -nrLower; nrNeg++) {\n\t\t\t\tthis._category[32767 + nrNeg] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg] = [];\n\t\t\t\tthis._bitCode[32767 + nrNeg][1] = cat;\n\t\t\t\tthis._bitCode[32767 + nrNeg][0] = nrUpper - 1 + nrNeg;\n\t\t\t}\n\t\t\tnrLower <<= 1;\n\t\t\tnrUpper <<= 1;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate initRGBYUVTable(): void {\n\t\tfor (let i = 0; i < 256; i++) {\n\t\t\tthis._rgbYuvTable[i] = 19595 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 256)] = 38470 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 512)] = 7471 * i + 0x8000;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 768)] = -11059 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1024)] = -21709 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1280)] = 32768 * i + 0x807fff;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1536)] = -27439 * i;\n\t\t\tthis._rgbYuvTable[Math.trunc(i + 1792)] = -5329 * i;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeBits(bs: number[]): void {\n\t\tconst value = bs[0];\n\t\tlet posVal = bs[1] - 1;\n\t\twhile (posVal >= 0) {\n\t\t\tif (value & (1 << posVal)) {\n\t\t\t\tthis._byteNew |= 1 << this._bytePos;\n\t\t\t}\n\t\t\tposVal--;\n\t\t\tthis._bytePos--;\n\t\t\tif (this._bytePos < 0) {\n\t\t\t\tif (this._byteNew === 0xff) {\n\t\t\t\t\tthis.writeByte(0xff);\n\t\t\t\t\tthis.writeByte(0);\n\t\t\t\t} else {\n\t\t\t\t\tthis.writeByte(this._byteNew);\n\t\t\t\t}\n\t\t\t\tthis._bytePos = 7;\n\t\t\t\tthis._byteNew = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeByte(value: number): void {\n\t\tthis._byteOut.push(value);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeWord(value: number): void {\n\t\tthis.writeByte((value >> 8) & 0xff);\n\t\tthis.writeByte(value & 0xff);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate fDCTQuant(data: number[], fdTbl: number[]): number[] {\n\t\tlet d0;\n\t\tlet d1;\n\t\tlet d2;\n\t\tlet d3;\n\t\tlet d4;\n\t\tlet d5;\n\t\tlet d6;\n\t\tlet d7;\n\t\t/* Pass 1: process rows. */\n\t\tlet dataOff = 0;\n\t\tlet i;\n\t\tconst I8 = 8;\n\t\tconst I64 = 64;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 1];\n\t\t\td2 = data[dataOff + 2];\n\t\t\td3 = data[dataOff + 3];\n\t\t\td4 = data[dataOff + 4];\n\t\t\td5 = data[dataOff + 5];\n\t\t\td6 = data[dataOff + 6];\n\t\t\td7 = data[dataOff + 7];\n\n\t\t\tconst tmp0 = d0 + d7;\n\t\t\tconst tmp7 = d0 - d7;\n\t\t\tconst tmp1 = d1 + d6;\n\t\t\tconst tmp6 = d1 - d6;\n\t\t\tconst tmp2 = d2 + d5;\n\t\t\tconst tmp5 = d2 - d5;\n\t\t\tconst tmp3 = d3 + d4;\n\t\t\tconst tmp4 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10 = tmp0 + tmp3; /* phase 2 */\n\t\t\tconst tmp13 = tmp0 - tmp3;\n\t\t\tlet tmp11 = tmp1 + tmp2;\n\t\t\tlet tmp12 = tmp1 - tmp2;\n\n\t\t\tdata[dataOff] = tmp10 + tmp11; /* phase 3 */\n\t\t\tdata[dataOff + 4] = tmp10 - tmp11;\n\n\t\t\tconst z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 2] = tmp13 + z1; /* phase 5 */\n\t\t\tdata[dataOff + 6] = tmp13 - z1;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10 = tmp4 + tmp5; /* phase 2 */\n\t\t\ttmp11 = tmp5 + tmp6;\n\t\t\ttmp12 = tmp6 + tmp7;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n\t\t\tconst z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n\t\t\tconst z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n\t\t\tconst z3 = tmp11 * 0.707106781; /* c4 */\n\n\t\t\tconst z11 = tmp7 + z3; /* phase 5 */\n\t\t\tconst z13 = tmp7 - z3;\n\n\t\t\tdata[dataOff + 5] = z13 + z2; /* phase 6 */\n\t\t\tdata[dataOff + 3] = z13 - z2;\n\t\t\tdata[dataOff + 1] = z11 + z4;\n\t\t\tdata[dataOff + 7] = z11 - z4;\n\n\t\t\tdataOff += 8; /* advance pointer to next row */\n\t\t}\n\n\t\t/* Pass 2: process columns. */\n\t\tdataOff = 0;\n\t\tfor (i = 0; i < I8; ++i) {\n\t\t\td0 = data[dataOff];\n\t\t\td1 = data[dataOff + 8];\n\t\t\td2 = data[dataOff + 16];\n\t\t\td3 = data[dataOff + 24];\n\t\t\td4 = data[dataOff + 32];\n\t\t\td5 = data[dataOff + 40];\n\t\t\td6 = data[dataOff + 48];\n\t\t\td7 = data[dataOff + 56];\n\n\t\t\tconst tmp0p2 = d0 + d7;\n\t\t\tconst tmp7p2 = d0 - d7;\n\t\t\tconst tmp1p2 = d1 + d6;\n\t\t\tconst tmp6p2 = d1 - d6;\n\t\t\tconst tmp2p2 = d2 + d5;\n\t\t\tconst tmp5p2 = d2 - d5;\n\t\t\tconst tmp3p2 = d3 + d4;\n\t\t\tconst tmp4p2 = d3 - d4;\n\n\t\t\t/* Even part */\n\t\t\tlet tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n\t\t\tconst tmp13p2 = tmp0p2 - tmp3p2;\n\t\t\tlet tmp11p2 = tmp1p2 + tmp2p2;\n\t\t\tlet tmp12p2 = tmp1p2 - tmp2p2;\n\n\t\t\tdata[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n\t\t\tdata[dataOff + 32] = tmp10p2 - tmp11p2;\n\n\t\t\tconst z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n\t\t\tdata[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n\t\t\tdata[dataOff + 48] = tmp13p2 - z1p2;\n\n\t\t\t/* Odd part */\n\t\t\ttmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n\t\t\ttmp11p2 = tmp5p2 + tmp6p2;\n\t\t\ttmp12p2 = tmp6p2 + tmp7p2;\n\n\t\t\t/* The rotator is modified from fig 4-8 to avoid extra negations. */\n\t\t\tconst z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n\t\t\tconst z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n\t\t\tconst z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n\t\t\tconst z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n\t\t\tconst z11p2 = tmp7p2 + z3p2; /* phase 5 */\n\t\t\tconst z13p2 = tmp7p2 - z3p2;\n\n\t\t\tdata[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n\t\t\tdata[dataOff + 24] = z13p2 - z2p2;\n\t\t\tdata[dataOff + 8] = z11p2 + z4p2;\n\t\t\tdata[dataOff + 56] = z11p2 - z4p2;\n\n\t\t\tdataOff++; /* advance pointer to next column */\n\t\t}\n\n\t\t// Quantize/descale the coefficients\n\t\tlet fDCTQuant;\n\t\tfor (i = 0; i < I64; ++i) {\n\t\t\t// Apply the quantization and scaling factor & Round to nearest integer\n\t\t\tfDCTQuant = data[i] * fdTbl[i];\n\t\t\tthis._outputFDctQuant[i] =\n\t\t\t\tfDCTQuant > 0 ? Math.trunc(fDCTQuant + 0.5) : Math.trunc(fDCTQuant - 0.5);\n\t\t}\n\t\treturn this._outputFDctQuant;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeAPP0(): void {\n\t\tthis.writeWord(0xffe0); // marker\n\t\tthis.writeWord(16); // length\n\t\tthis.writeByte(0x4a); // J\n\t\tthis.writeByte(0x46); // F\n\t\tthis.writeByte(0x49); // I\n\t\tthis.writeByte(0x46); // F\n\t\t// cspell:disable-next-line\n\t\tthis.writeByte(0); // = \"JFIF\",'\\0'\n\t\tthis.writeByte(1); // version hi\n\t\tthis.writeByte(1); // version lo\n\t\tthis.writeByte(0); // xy units\n\t\tthis.writeWord(1); // x density\n\t\tthis.writeWord(1); // y density\n\t\tthis.writeByte(0); // thumb n width\n\t\tthis.writeByte(0); // thumb n height\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeSOF0(width: number, height: number): void {\n\t\tthis.writeWord(0xffc0); // marker\n\t\tthis.writeWord(17); // length, true color YUV JPG\n\t\tthis.writeByte(8); // precision\n\t\tthis.writeWord(height);\n\t\tthis.writeWord(width);\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0x11); // HVY\n\t\tthis.writeByte(0); // QTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HVU\n\t\tthis.writeByte(1); // QTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HVV\n\t\tthis.writeByte(1); // QTV\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeDQT(): void {\n\t\tthis.writeWord(0xffdb); // marker\n\t\tthis.writeWord(132); // length\n\t\tthis.writeByte(0);\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tthis.writeByte(this._yTable[i]);\n\t\t}\n\t\tthis.writeByte(1);\n\t\tfor (let j = 0; j < 64; j++) {\n\t\t\tthis.writeByte(this._uvTable[j]);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeDHT(): void {\n\t\tthis.writeWord(0xffc4); // marker\n\t\tthis.writeWord(0x01a2); // length\n\n\t\tthis.writeByte(0); // HTYDc info\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_NR_CODES[i + 1]);\n\t\t}\n\t\tfor (let j = 0; j <= 11; j++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_LUMINANCE_VALUES[j]);\n\t\t}\n\n\t\tthis.writeByte(0x10); // HTYAc info\n\t\tfor (let k = 0; k < 16; k++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_NR_CODES[k + 1]);\n\t\t}\n\t\tfor (let l = 0; l <= 161; l++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_LUMINANCE_VALUES[l]);\n\t\t}\n\n\t\tthis.writeByte(1); // HTUDc info\n\t\tfor (let m = 0; m < 16; m++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_NR_CODES[m + 1]);\n\t\t}\n\t\tfor (let n = 0; n <= 11; n++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_DC_CHROMINANCE_VALUES[n]);\n\t\t}\n\n\t\tthis.writeByte(0x11); // HTUAc info\n\t\tfor (let o = 0; o < 16; o++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_NR_CODES[o + 1]);\n\t\t}\n\t\tfor (let p = 0; p <= 161; p++) {\n\t\t\tthis.writeByte(JpegEncoder._STD_AC_CHROMINANCE_VALUES[p]);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeSOS(): void {\n\t\tthis.writeWord(0xffda); // marker\n\t\tthis.writeWord(12); // length\n\t\tthis.writeByte(3); // nr of components\n\t\tthis.writeByte(1); // IdY\n\t\tthis.writeByte(0); // HTY\n\t\tthis.writeByte(2); // IdU\n\t\tthis.writeByte(0x11); // HTU\n\t\tthis.writeByte(3); // IdV\n\t\tthis.writeByte(0x11); // HTV\n\t\tthis.writeByte(0); // Ss\n\t\tthis.writeByte(0x3f); // Se\n\t\tthis.writeByte(0); // Bf\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate processDU(\n\t\tCDU: number[],\n\t\tfdTbl: number[],\n\t\tpassedDC: number,\n\t\tHTDc: number[][],\n\t\tHTAc: number[][]\n\t): number {\n\t\tlet DC = passedDC;\n\t\tconst EOB = HTAc[0x00];\n\t\tconst m16zeroes = HTAc[0xf0];\n\t\tlet pos;\n\t\tconst I16 = 16;\n\t\tconst I63 = 63;\n\t\tconst I64 = 64;\n\t\tconst DU_DCT = this.fDCTQuant(CDU, fdTbl);\n\t\t// ZigZag reorder\n\t\tfor (let j = 0; j < I64; ++j) {\n\t\t\tthis._du[JpegEncoder._SIG_ZAG[j]] = DU_DCT[j];\n\t\t}\n\t\tconst diff = this._du[0] - DC;\n\t\tDC = this._du[0];\n\t\t// Encode DC\n\t\tif (diff === 0) {\n\t\t\tthis.writeBits(HTDc[0]); // Diff might be 0\n\t\t} else {\n\t\t\tpos = 32767 + diff;\n\t\t\tthis.writeBits(HTDc[this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t}\n\t\t// Encode ACs\n\t\tlet end0pos = 63; // was const... which is crazy\n\t\tfor (; end0pos > 0 && this._du[end0pos] === 0; end0pos--) {}\n\t\t// end0pos = first element in reverse order !=0\n\t\tif (end0pos === 0) {\n\t\t\tthis.writeBits(EOB);\n\t\t\treturn DC;\n\t\t}\n\t\tlet i = 1;\n\t\tlet lng;\n\t\twhile (i <= end0pos) {\n\t\t\tconst startPos = i;\n\t\t\tfor (; this._du[i] === 0 && i <= end0pos; ++i) {}\n\t\t\tlet nrZeroes = i - startPos;\n\t\t\tif (nrZeroes >= I16) {\n\t\t\t\tlng = nrZeroes >> 4;\n\t\t\t\tfor (let nrMarker = 1; nrMarker <= lng; ++nrMarker) {\n\t\t\t\t\tthis.writeBits(m16zeroes);\n\t\t\t\t}\n\t\t\t\tnrZeroes &= 0xf;\n\t\t\t}\n\t\t\tpos = 32767 + this._du[i];\n\t\t\tthis.writeBits(HTAc[(nrZeroes << 4) + this._category[pos]]);\n\t\t\tthis.writeBits(this._bitCode[pos]);\n\t\t\ti++;\n\t\t}\n\t\tif (end0pos !== I63) {\n\t\t\tthis.writeBits(EOB);\n\t\t}\n\t\treturn DC;\n\t}\n}\n"]}
|
|
@@ -533,8 +533,8 @@ export class PngEncoder {
|
|
|
533
533
|
copyTile(sb, sw, sh, tb, tw, th, xOffset, yOffset, mode) {
|
|
534
534
|
const w = Math.min(sw, tw);
|
|
535
535
|
const h = Math.min(sh, th);
|
|
536
|
-
let si
|
|
537
|
-
let ti
|
|
536
|
+
let si;
|
|
537
|
+
let ti;
|
|
538
538
|
for (let y = 0; y < h; y++) {
|
|
539
539
|
for (let x = 0; x < w; x++) {
|
|
540
540
|
if (xOffset >= 0 && yOffset >= 0) {
|
|
@@ -823,7 +823,7 @@ export class PngEncoder {
|
|
|
823
823
|
const A = rj;
|
|
824
824
|
let b = [0.5, 0.5, 0.5, 0.5];
|
|
825
825
|
let mi = 0;
|
|
826
|
-
let tmi
|
|
826
|
+
let tmi;
|
|
827
827
|
if (N !== 0) {
|
|
828
828
|
for (let i = 0; i < 10; i++) {
|
|
829
829
|
b = this.m4MultiplyVec(A, b);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pngEncoder.js","sourceRoot":"","sources":["../../../src/encoders/pngEncoder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\n/* eslint-disable no-continue */\nimport { Compression } from \"@twin.org/core\";\nimport type { Frame } from \"./png/frame.js\";\nimport type { ImageData } from \"./png/imageData.js\";\nimport type { Leaf } from \"./png/leaf.js\";\n\n/**\n * PNG Encoder.\n * Based on https://github.com/photopea/UPNG.js.\n */\nexport class PngEncoder {\n\t/**\n\t * Encode the image frames to png.\n\t * @param buffers The frame buffers to encode.\n\t * @param w The image width.\n\t * @param h The image height.\n\t * @returns The data for the image.\n\t */\n\tpublic async encode(buffers: ArrayBuffer[], w: number, h: number): Promise<Uint8Array> {\n\t\tconst ps = 0;\n\t\tconst forbidPlte = false;\n\t\tconst data = new Uint8Array(buffers[0].byteLength * buffers.length + 100);\n\t\tconst wr = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tdata[i] = wr[i];\n\t\t}\n\t\tlet offset = 8;\n\n\t\tconst nImg = await this.compressPNG(buffers, w, h, ps, forbidPlte);\n\n\t\tthis.writeUint(data, offset, 13);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IHDR\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, w);\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, h);\n\t\toffset += 4;\n\t\tdata[offset] = nImg.depth;\n\t\toffset++;\n\t\tdata[offset] = nImg.cType;\n\t\toffset++;\n\t\tdata[offset] = 0; // compress\n\t\toffset++;\n\t\tdata[offset] = 0; // filter\n\t\toffset++;\n\t\tdata[offset] = 0; // interlace\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 17, 17));\n\t\toffset += 4; // crc\n\n\t\t// 9 bytes to say, that it is sRGB\n\t\tthis.writeUint(data, offset, 1);\n\t\toffset += 4;\n\t\tthis.writeASCII(data, offset, \"sRGB\");\n\t\toffset += 4;\n\t\tdata[offset] = 1;\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 5, 5));\n\t\toffset += 4; // crc\n\n\t\tconst anim = buffers.length > 1;\n\t\tif (anim) {\n\t\t\tthis.writeUint(data, offset, 8);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"acTL\");\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, buffers.length);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, 0);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 12, 12));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tif (nImg.cType === 3) {\n\t\t\tconst dl = nImg.plte.length;\n\t\t\tthis.writeUint(data, offset, dl * 3);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"PLTE\");\n\t\t\toffset += 4;\n\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\tconst ti = i * 3;\n\t\t\t\tconst c = nImg.plte[i];\n\t\t\t\tconst r = c & 255;\n\t\t\t\tconst g = (c >> 8) & 255;\n\t\t\t\tconst b = (c >> 16) & 255;\n\t\t\t\tdata[offset + ti + 0] = r;\n\t\t\t\tdata[offset + ti + 1] = g;\n\t\t\t\tdata[offset + ti + 2] = b;\n\t\t\t}\n\t\t\toffset += dl * 3;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl * 3 - 4, dl * 3 + 4));\n\t\t\toffset += 4; // crc\n\n\t\t\tif (nImg.gotAlpha) {\n\t\t\t\tthis.writeUint(data, offset, dl);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"tRNS\");\n\t\t\t\toffset += 4;\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = (nImg.plte[i] >> 24) & 255;\n\t\t\t\t}\n\t\t\t\toffset += dl;\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl - 4, dl + 4));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\t\t}\n\n\t\tlet fi = 0;\n\t\tfor (let j = 0; j < nImg.frames.length; j++) {\n\t\t\tconst fr = nImg.frames[j];\n\t\t\tif (anim) {\n\t\t\t\tthis.writeUint(data, offset, 26);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"fcTL\");\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.width);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.height);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.x);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.y);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUshort(data, offset, 0);\n\t\t\t\toffset += 2;\n\t\t\t\tthis.writeUshort(data, offset, 1000);\n\t\t\t\toffset += 2;\n\t\t\t\tdata[offset] = fr.dispose;\n\t\t\t\toffset++; // dispose\n\t\t\t\tdata[offset] = fr.blend;\n\t\t\t\toffset++; // blend\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 30, 30));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\n\t\t\tconst imgD = fr.cImg;\n\t\t\tconst dl: number = imgD?.length ?? 0;\n\t\t\tthis.writeUint(data, offset, dl + (j === 0 ? 0 : 4));\n\t\t\toffset += 4;\n\t\t\tconst iOff = offset;\n\t\t\t// cspell:disable-next-line\n\t\t\tthis.writeASCII(data, offset, j === 0 ? \"IDAT\" : \"fdAT\");\n\t\t\toffset += 4;\n\t\t\tif (j !== 0) {\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t}\n\t\t\tif (imgD) {\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = imgD[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += dl;\n\t\t\tthis.writeUint(data, offset, this.crc(data, iOff, offset - iOff));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tthis.writeUint(data, offset, 0);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IEND\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 4, 4));\n\t\toffset += 4; // crc\n\n\t\treturn new Uint8Array(data.buffer.slice(0, offset));\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async compressPNG(\n\t\tbuffers: ArrayBuffer[],\n\t\tw: number,\n\t\th: number,\n\t\tps: number,\n\t\tforbidPlte: boolean\n\t): Promise<ImageData> {\n\t\tconst out = this.compress(buffers, w, h, ps, 0, forbidPlte);\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\tconst frm = out.frames[i];\n\t\t\tconst nw = frm.rect.width;\n\t\t\tconst nh = frm.rect.height;\n\t\t\tconst bpl = frm.bpl;\n\t\t\tconst bpp = frm.bpp;\n\t\t\tconst fData = new Uint8Array(nw * bpl + nh);\n\t\t\tfrm.cImg = await this.filterZero(frm.img, nh, bpp, bpl, fData);\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate compress(\n\t\tinBuffers: ArrayBufferLike[],\n\t\tw: number,\n\t\th: number,\n\t\tinPs: number,\n\t\tforGIF: number,\n\t\tforbidPlte: boolean\n\t): ImageData {\n\t\tlet cType = 6;\n\t\tlet depth = 8;\n\t\tlet bpp = 4;\n\t\tlet alphaAnd = 255;\n\t\tlet ps = inPs;\n\t\tlet buffers = inBuffers;\n\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\tconst img = new Uint8Array(buffers[j]);\n\t\t\tconst iLen = img.length;\n\t\t\tfor (let i = 0; i < iLen; i += 4) {\n\t\t\t\talphaAnd &= img[i + 3];\n\t\t\t}\n\t\t}\n\t\tlet gotAlpha: boolean = alphaAnd !== 255;\n\n\t\tconst cMap: { [id: number]: number } = {};\n\t\tconst pLte = [];\n\t\tif (buffers.length !== 0) {\n\t\t\tcMap[0] = 0;\n\t\t\tpLte.push(0);\n\t\t\tif (ps !== 0) {\n\t\t\t\tps--;\n\t\t\t}\n\t\t}\n\n\t\tif (ps !== 0) {\n\t\t\tconst qRes = this.quantize(buffers, ps, forGIF);\n\t\t\tbuffers = qRes.buffers;\n\t\t\tfor (let i = 0; i < qRes.plte.length; i++) {\n\t\t\t\tconst c = qRes.plte[i].est?.rgba ?? 0;\n\t\t\t\tif (!cMap[c]) {\n\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\tpLte.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// what if ps==0, but there are <=256 colors? we still need to detect, if the palette could be used\n\t\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\t\tconst img32 = new Uint32Array(buffers[j]);\n\t\t\t\tconst iLen = img32.length;\n\t\t\t\tfor (let i = 0; i < iLen; i++) {\n\t\t\t\t\tconst c = img32[i];\n\t\t\t\t\tif ((i < w || (c !== img32[i - 1] && c !== img32[i - w])) && !cMap[c]) {\n\t\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\t\tpLte.push(c);\n\t\t\t\t\t\tif (pLte.length >= 300) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst brute = gotAlpha ? forGIF : false; // brute : frames can only be copied, not \"blended\"\n\t\tconst cc = pLte.length;\n\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\tif (cc <= 2) {\n\t\t\t\tdepth = 1;\n\t\t\t} else if (cc <= 4) {\n\t\t\t\tdepth = 2;\n\t\t\t} else if (cc <= 16) {\n\t\t\t\tdepth = 4;\n\t\t\t} else {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tif (forGIF) {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tgotAlpha = true;\n\t\t}\n\n\t\tconst frames: Frame[] = [];\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\tlet cImg = new Uint8Array(buffers[j]);\n\t\t\tlet cImg32 = new Uint32Array(cImg.buffer);\n\n\t\t\tlet nx = 0;\n\t\t\tlet ny = 0;\n\t\t\tlet nw = w;\n\t\t\tlet nh = h;\n\t\t\tlet blend = 0;\n\t\t\tif (j !== 0 && !brute) {\n\t\t\t\tconst tLim = forGIF || j === 1 || frames[frames.length - 2].dispose === 2 ? 1 : 2;\n\t\t\t\tlet tStp = 0;\n\t\t\t\tlet tArea = 1e9;\n\t\t\t\tfor (let it = 0; it < tLim; it++) {\n\t\t\t\t\tconst p32 = new Uint32Array(buffers[j - 1 - it]);\n\t\t\t\t\tlet mix = w;\n\t\t\t\t\tlet miy = h;\n\t\t\t\t\tlet max = -1;\n\t\t\t\t\tlet may = -1;\n\t\t\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\t\t\t\tconst i = y * w + x;\n\t\t\t\t\t\t\tif (cImg32[i] !== p32[i]) {\n\t\t\t\t\t\t\t\tif (x < mix) {\n\t\t\t\t\t\t\t\t\tmix = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (x > max) {\n\t\t\t\t\t\t\t\t\tmax = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y < miy) {\n\t\t\t\t\t\t\t\t\tmiy = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y > may) {\n\t\t\t\t\t\t\t\t\tmay = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst sArea = max === -1 ? 1 : (max - mix + 1) * (may - miy + 1);\n\t\t\t\t\tif (sArea < tArea) {\n\t\t\t\t\t\ttArea = sArea;\n\t\t\t\t\t\ttStp = it;\n\t\t\t\t\t\tif (max === -1) {\n\t\t\t\t\t\t\tnx = 0;\n\t\t\t\t\t\t\tny = 0;\n\t\t\t\t\t\t\tnw = 1;\n\t\t\t\t\t\t\tnh = 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnx = mix;\n\t\t\t\t\t\t\tny = miy;\n\t\t\t\t\t\t\tnw = max - mix + 1;\n\t\t\t\t\t\t\tnh = may - miy + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst pImg = new Uint8Array(buffers[j - 1 - tStp]);\n\t\t\t\tif (tStp === 1) {\n\t\t\t\t\tframes[frames.length - 1].dispose = 2;\n\t\t\t\t}\n\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 4);\n\t\t\t\tthis.copyTile(pImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\tif (this.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 3)) {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 2);\n\t\t\t\t\tblend = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\t\tblend = 0;\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcImg32 = new Uint32Array(cImg.buffer);\n\t\t\t}\n\t\t\tlet bpl = 4 * nw;\n\t\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\t\tbpl = Math.ceil((depth * nw) / 8);\n\t\t\t\tconst nImg = new Uint8Array(bpl * nh);\n\t\t\t\tfor (let y = 0; y < nh; y++) {\n\t\t\t\t\tconst i = y * bpl;\n\t\t\t\t\tconst ii = y * nw;\n\t\t\t\t\tif (depth === 8) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + x] = cMap[cImg32[ii + x]];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 4) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 1)] |= cMap[cImg32[ii + x]] << (4 - (x & 1) * 4);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 2) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 2)] |= cMap[cImg32[ii + x]] << (6 - (x & 3) * 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 1) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 3)] |= cMap[cImg32[ii + x]] << (7 - (x & 7) * 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 3;\n\t\t\t\tbpp = 1;\n\t\t\t} else if (!gotAlpha && buffers.length === 1) {\n\t\t\t\t// some next \"reduced\" frames may contain alpha for blending\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 3);\n\t\t\t\tconst area = nw * nh;\n\t\t\t\tfor (let i = 0; i < area; i++) {\n\t\t\t\t\tconst ti = i * 3;\n\t\t\t\t\tconst qi = i * 4;\n\t\t\t\t\tnImg[ti] = cImg[qi];\n\t\t\t\t\tnImg[ti + 1] = cImg[qi + 1];\n\t\t\t\t\tnImg[ti + 2] = cImg[qi + 2];\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 2;\n\t\t\t\tbpp = 3;\n\t\t\t\tbpl = 3 * nw;\n\t\t\t}\n\t\t\tframes.push({\n\t\t\t\trect: {\n\t\t\t\t\tx: nx,\n\t\t\t\t\ty: ny,\n\t\t\t\t\twidth: nw,\n\t\t\t\t\theight: nh\n\t\t\t\t},\n\t\t\t\timg: cImg,\n\t\t\t\tbpl,\n\t\t\t\tbpp,\n\t\t\t\tblend,\n\t\t\t\tdispose: brute ? 1 : 0\n\t\t\t});\n\t\t}\n\t\treturn { cType, depth, plte: pLte, gotAlpha, frames };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async filterZero(\n\t\timg: Uint8Array,\n\t\th: number,\n\t\tbpp: number,\n\t\tbpl: number,\n\t\tdata: Uint8Array\n\t): Promise<Uint8Array> {\n\t\tconst fls = [];\n\t\tfor (let t = 0; t < 5; t++) {\n\t\t\tif (h * bpl > 500000 && (t === 2 || t === 3 || t === 4)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\tthis.filterLine(data, img, y, bpl, bpp, t);\n\t\t\t}\n\t\t\tconst deflated = await Compression.compress(data, \"deflate\");\n\t\t\tfls.push(deflated);\n\t\t\tif (bpp === 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet ti: number = 0;\n\t\tlet tSize = 1e9;\n\t\tfor (let i = 0; i < fls.length; i++) {\n\t\t\tif (fls[i].length < tSize) {\n\t\t\t\tti = i;\n\t\t\t\ttSize = fls[i].length;\n\t\t\t}\n\t\t}\n\t\treturn fls[ti];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate filterLine(\n\t\tdata: Uint8Array,\n\t\timg: Uint8Array,\n\t\ty: number,\n\t\tbpl: number,\n\t\tbpp: number,\n\t\ttype: number\n\t): void {\n\t\tconst i = y * bpl;\n\t\tlet di = i + y;\n\t\tdata[di] = type;\n\t\tdi++;\n\n\t\tif (type === 0) {\n\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t} else if (type === 1) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\tdata[di + x] = (img[i + x] - img[i + x - bpp] + 256) & 255;\n\t\t\t}\n\t\t} else if (y === 0) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - (img[i + x - bpp] >> 1) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - this.paeth(img[i + x - bpp], 0, 0) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - img[i + x - bpl]) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - (img[i + x - bpl] >> 1)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - ((img[i + x - bpl] + img[i + x - bpp]) >> 1)) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - this.paeth(0, img[i + x - bpl], 0)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] =\n\t\t\t\t\t\t(img[i + x] +\n\t\t\t\t\t\t\t256 -\n\t\t\t\t\t\t\tthis.paeth(img[i + x - bpp], img[i + x - bpl], img[i + x - bpp - bpl])) &\n\t\t\t\t\t\t255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate paeth(a: number, b: number, c: number): number {\n\t\tconst p = a + b - c;\n\t\tconst pa = Math.abs(p - a);\n\t\tconst pb = Math.abs(p - b);\n\t\tconst pc = Math.abs(p - c);\n\t\tif (pa <= pb && pa <= pc) {\n\t\t\treturn a;\n\t\t}\n\t\tif (pb <= pc) {\n\t\t\treturn b;\n\t\t}\n\t\treturn c;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeASCII(data: Uint8Array, p: number, s: string): void {\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tdata[p + i] = s.charCodeAt(i);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeUint(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 24) & 255;\n\t\tbuff[p + 1] = (n >> 16) & 255;\n\t\tbuff[p + 2] = (n >> 8) & 255;\n\t\tbuff[p + 3] = n & 255;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeUshort(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 8) & 255;\n\t\tbuff[p + 1] = n & 255;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate copyTile(\n\t\tsb: Uint8Array,\n\t\tsw: number,\n\t\tsh: number,\n\t\ttb: Uint8Array,\n\t\ttw: number,\n\t\tth: number,\n\t\txOffset: number,\n\t\tyOffset: number,\n\t\tmode: number\n\t): boolean {\n\t\tconst w = Math.min(sw, tw);\n\t\tconst h = Math.min(sh, th);\n\t\tlet si = 0;\n\t\tlet ti = 0;\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\tif (xOffset >= 0 && yOffset >= 0) {\n\t\t\t\t\tsi = (y * sw + x) << 2;\n\t\t\t\t\tti = ((yOffset + y) * tw + xOffset + x) << 2;\n\t\t\t\t} else {\n\t\t\t\t\tsi = ((-yOffset + y) * sw - xOffset + x) << 2;\n\t\t\t\t\tti = (y * tw + x) << 2;\n\t\t\t\t}\n\n\t\t\t\tif (mode === 0) {\n\t\t\t\t\ttb[ti] = sb[si];\n\t\t\t\t\ttb[ti + 1] = sb[si + 1];\n\t\t\t\t\ttb[ti + 2] = sb[si + 2];\n\t\t\t\t\ttb[ti + 3] = sb[si + 3];\n\t\t\t\t} else if (mode === 1) {\n\t\t\t\t\tconst fa = sb[si + 3] * (1 / 255);\n\t\t\t\t\tconst fr = sb[si] * fa;\n\t\t\t\t\tconst fg = sb[si + 1] * fa;\n\t\t\t\t\tconst fb = sb[si + 2] * fa;\n\t\t\t\t\tconst ba = tb[ti + 3] * (1 / 255);\n\t\t\t\t\tconst br = tb[ti] * ba;\n\t\t\t\t\tconst bg = tb[ti + 1] * ba;\n\t\t\t\t\tconst bb = tb[ti + 2] * ba;\n\n\t\t\t\t\tconst ifa = 1 - fa;\n\t\t\t\t\tconst oa = fa + ba * ifa;\n\t\t\t\t\tconst ioa = oa === 0 ? 0 : 1 / oa;\n\t\t\t\t\ttb[ti + 3] = 255 * oa;\n\t\t\t\t\ttb[ti + 0] = (fr + br * ifa) * ioa;\n\t\t\t\t\ttb[ti + 1] = (fg + bg * ifa) * ioa;\n\t\t\t\t\ttb[ti + 2] = (fb + bb * ifa) * ioa;\n\t\t\t\t} else if (mode === 2) {\n\t\t\t\t\t// copy only differences, otherwise zero\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\ttb[ti] = 0;\n\t\t\t\t\t\ttb[ti + 1] = 0;\n\t\t\t\t\t\ttb[ti + 2] = 0;\n\t\t\t\t\t\ttb[ti + 3] = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttb[ti] = fr;\n\t\t\t\t\t\ttb[ti + 1] = fg;\n\t\t\t\t\t\ttb[ti + 2] = fb;\n\t\t\t\t\t\ttb[ti + 3] = fa;\n\t\t\t\t\t}\n\t\t\t\t} else if (mode === 3) {\n\t\t\t\t\t// check if can be blended\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (fa < 220 && ba > 20) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crc(b: Uint8Array, o: number, l: number): number {\n\t\treturn this.crcUpdate(0xffffffff, b, o, l) ^ 0xffffffff;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crcUpdate(c: number, buf: Uint8Array, off: number, len: number): number {\n\t\tlet localC = c;\n\t\tconst crcTable = this.crcTable();\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tlocalC = crcTable[(localC ^ buf[off + i]) & 0xff] ^ (localC >>> 8);\n\t\t}\n\t\treturn localC;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crcTable(): Uint32Array {\n\t\tconst tab = new Uint32Array(256);\n\t\tfor (let n = 0; n < 256; n++) {\n\t\t\tlet c = n;\n\t\t\tfor (let k = 0; k < 8; k++) {\n\t\t\t\tif (c & 1) {\n\t\t\t\t\tc = 0xedb88320 ^ (c >>> 1);\n\t\t\t\t} else {\n\t\t\t\t\tc >>>= 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttab[n] = c;\n\t\t}\n\t\treturn tab;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantize(\n\t\tbuffers: ArrayBufferLike[],\n\t\tps: number,\n\t\troundAlpha: number\n\t): { buffers: ArrayBufferLike[]; plte: Leaf[] } {\n\t\tconst imgs: Uint8Array[] = [];\n\t\tlet total = 0;\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\timgs.push(this.alphaMul(new Uint8Array(buffers[i]), roundAlpha));\n\t\t\ttotal += buffers[i].byteLength;\n\t\t}\n\n\t\tconst nImg = new Uint8Array(total);\n\t\tconst nImg32 = new Uint32Array(nImg.buffer);\n\t\tlet nOff = 0;\n\t\tfor (let i = 0; i < imgs.length; i++) {\n\t\t\tconst img = imgs[i];\n\t\t\tconst il = img.length;\n\t\t\tfor (let j = 0; j < il; j++) {\n\t\t\t\tnImg[nOff + j] = img[j];\n\t\t\t}\n\t\t\tnOff += il;\n\t\t}\n\n\t\tconst root: Leaf = {\n\t\t\ti0: 0,\n\t\t\ti1: nImg.length,\n\t\t\tbst: null,\n\t\t\test: null,\n\t\t\ttDst: 0,\n\t\t\tleft: null,\n\t\t\tright: null\n\t\t};\n\t\troot.bst = this.quantizeStats(nImg, root.i0, root.i1);\n\t\troot.est = this.quantizeEStats(root.bst);\n\t\tconst leafs: Leaf[] = [root];\n\n\t\twhile (leafs.length < ps) {\n\t\t\tlet maxL = 0;\n\t\t\tlet mi = 0;\n\t\t\tfor (let i = 0; i < leafs.length; i++) {\n\t\t\t\tconst est = leafs[i].est;\n\t\t\t\tif (est && est.L > maxL) {\n\t\t\t\t\tmaxL = est.L;\n\t\t\t\t\tmi = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (maxL < 1e-3) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst node = leafs[mi];\n\n\t\t\tconst s0 = this.quantizeSplitPixels(\n\t\t\t\tnImg,\n\t\t\t\tnImg32,\n\t\t\t\tnode.i0,\n\t\t\t\tnode.i1,\n\t\t\t\tnode.est?.e ?? [],\n\t\t\t\tnode.est?.eMq255 ?? 0\n\t\t\t);\n\n\t\t\tconst ln: Leaf = {\n\t\t\t\ti0: node.i0,\n\t\t\t\ti1: s0,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\tln.bst = this.quantizeStats(nImg, ln.i0, ln.i1);\n\t\t\tln.est = this.quantizeEStats(ln.bst);\n\t\t\tconst rn: Leaf = {\n\t\t\t\ti0: s0,\n\t\t\t\ti1: node.i1,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\trn.bst = {\n\t\t\t\tR: [],\n\t\t\t\tm: [],\n\t\t\t\tN: (node.bst?.N ?? 0) - ln.bst.N\n\t\t\t};\n\t\t\tfor (let i = 0; i < 16; i++) {\n\t\t\t\trn.bst.R[i] = (node.bst?.R[i] ?? 0) - ln.bst.R[i];\n\t\t\t}\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\trn.bst.m[i] = (node.bst?.m[i] ?? 0) - ln.bst.m[i];\n\t\t\t}\n\t\t\trn.est = this.quantizeEStats(rn.bst);\n\n\t\t\tnode.left = ln;\n\t\t\tnode.right = rn;\n\t\t\tleafs[mi] = ln;\n\t\t\tleafs.push(rn);\n\t\t}\n\t\tleafs.sort((a, b) => (b.bst?.N ?? 0) - (a.bst?.N ?? 0));\n\n\t\tconst outBuffers: ArrayBufferLike[] = [];\n\t\tfor (let ii = 0; ii < imgs.length; ii++) {\n\t\t\tconst sb = new Uint8Array(imgs[ii]);\n\t\t\tconst tb: Uint32Array = new Uint32Array(imgs[ii]);\n\t\t\tconst len = sb.length;\n\n\t\t\tfor (let i = 0; i < len; i += 4) {\n\t\t\t\tconst r = sb[i] * (1 / 255);\n\t\t\t\tconst g = sb[i + 1] * (1 / 255);\n\t\t\t\tconst b = sb[i + 2] * (1 / 255);\n\t\t\t\tconst a = sb[i + 3] * (1 / 255);\n\n\t\t\t\tlet nd: Leaf | null = root;\n\t\t\t\twhile (nd?.left) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tnd = this.quantizePlaneDst(nd.est!, r, g, b, a) <= 0 ? nd.left : nd.right;\n\t\t\t\t}\n\n\t\t\t\ttb[i >> 2] = nd?.est?.rgba ?? 0;\n\t\t\t}\n\t\t\toutBuffers[ii] = tb.buffer;\n\t\t}\n\t\treturn { buffers: outBuffers, plte: leafs };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeStats(\n\t\tnImg: Uint8Array,\n\t\ti0: number,\n\t\ti1: number\n\t): { R: number[]; m: number[]; N: number } {\n\t\tconst R = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\t\tconst m = [0, 0, 0, 0];\n\t\tconst N = (i1 - i0) >> 2;\n\t\tfor (let i = i0; i < i1; i += 4) {\n\t\t\tconst r = nImg[i] * (1 / 255);\n\t\t\tconst g = nImg[i + 1] * (1 / 255);\n\t\t\tconst b = nImg[i + 2] * (1 / 255);\n\t\t\tconst a = nImg[i + 3] * (1 / 255);\n\n\t\t\tm[0] += r;\n\t\t\tm[1] += g;\n\t\t\tm[2] += b;\n\t\t\tm[3] += a;\n\n\t\t\tR[0] += r * r;\n\t\t\tR[1] += r * g;\n\t\t\tR[2] += r * b;\n\t\t\tR[3] += r * a;\n\t\t\tR[5] += g * g;\n\t\t\tR[6] += g * b;\n\t\t\tR[7] += g * a;\n\t\t\tR[10] += b * b;\n\t\t\tR[11] += b * a;\n\t\t\tR[15] += a * a;\n\t\t}\n\t\tR[4] = R[1];\n\t\tR[8] = R[2];\n\t\tR[12] = R[3];\n\t\tR[9] = R[6];\n\t\tR[13] = R[7];\n\t\tR[14] = R[11];\n\n\t\treturn { R, m, N };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeEStats(stats: { R: number[]; m: number[]; N: number }): {\n\t\tCov: number[];\n\t\tq: number[];\n\t\te: number[];\n\t\tL: number;\n\t\teMq255: number;\n\t\teMq: number;\n\t\trgba: number;\n\t} {\n\t\tconst R = stats.R;\n\t\tconst m = stats.m;\n\t\tconst N = stats.N;\n\n\t\tconst m0 = m[0];\n\t\tconst m1 = m[1];\n\t\tconst m2 = m[2];\n\t\tconst m3 = m[3];\n\t\tconst iN = N === 0 ? 0 : 1 / N;\n\t\tconst rj = [\n\t\t\tR[0] - m0 * m0 * iN,\n\t\t\tR[1] - m0 * m1 * iN,\n\t\t\tR[2] - m0 * m2 * iN,\n\t\t\tR[3] - m0 * m3 * iN,\n\t\t\tR[4] - m1 * m0 * iN,\n\t\t\tR[5] - m1 * m1 * iN,\n\t\t\tR[6] - m1 * m2 * iN,\n\t\t\tR[7] - m1 * m3 * iN,\n\t\t\tR[8] - m2 * m0 * iN,\n\t\t\tR[9] - m2 * m1 * iN,\n\t\t\tR[10] - m2 * m2 * iN,\n\t\t\tR[11] - m2 * m3 * iN,\n\t\t\tR[12] - m3 * m0 * iN,\n\t\t\tR[13] - m3 * m1 * iN,\n\t\t\tR[14] - m3 * m2 * iN,\n\t\t\tR[15] - m3 * m3 * iN\n\t\t];\n\n\t\tconst A = rj;\n\t\tlet b = [0.5, 0.5, 0.5, 0.5];\n\t\tlet mi = 0;\n\t\tlet tmi = 0;\n\n\t\tif (N !== 0) {\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\tb = this.m4MultiplyVec(A, b);\n\t\t\t\ttmi = Math.sqrt(this.m4Dot(b, b));\n\t\t\t\tb = this.m4Sml(1 / tmi, b);\n\t\t\t\tif (Math.abs(tmi - mi) < 1e-9) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmi = tmi;\n\t\t\t}\n\t\t}\n\t\tconst q = [m0 * iN, m1 * iN, m2 * iN, m3 * iN];\n\t\tconst eMq255 = this.m4Dot(this.m4Sml(255, q), b);\n\n\t\tconst ia = q[3] < 0.001 ? 0 : 1 / q[3];\n\n\t\treturn {\n\t\t\tCov: rj,\n\t\t\tq,\n\t\t\te: b,\n\t\t\tL: mi,\n\t\t\teMq255,\n\t\t\teMq: this.m4Dot(b, q),\n\t\t\trgba:\n\t\t\t\t((Math.round(255 * q[3]) << 24) |\n\t\t\t\t\t(Math.round(255 * q[2] * ia) << 16) |\n\t\t\t\t\t(Math.round(255 * q[1] * ia) << 8) |\n\t\t\t\t\t(Math.round(255 * q[0] * ia) << 0)) >>>\n\t\t\t\t0\n\t\t};\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizePlaneDst(\n\t\test: { e: number[]; eMq: number },\n\t\tr: number,\n\t\tg: number,\n\t\tb: number,\n\t\ta: number\n\t): number {\n\t\tconst e = est.e;\n\t\treturn e[0] * r + e[1] * g + e[2] * b + e[3] * a - est.eMq;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeSplitPixels(\n\t\tnImg: Uint8Array,\n\t\tnImg32: Uint32Array,\n\t\ti0in: number,\n\t\ti1in: number,\n\t\te: number[],\n\t\teMq: number\n\t): number {\n\t\tlet i1 = i1in - 4;\n\t\tlet i0 = i0in;\n\t\twhile (i0 < i1) {\n\t\t\twhile (this.quantizeVecDot(nImg, i0, e) <= eMq) {\n\t\t\t\ti0 += 4;\n\t\t\t}\n\t\t\twhile (this.quantizeVecDot(nImg, i1, e) > eMq) {\n\t\t\t\ti1 -= 4;\n\t\t\t}\n\t\t\tif (i0 >= i1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst t = nImg32[i0 >> 2];\n\t\t\tnImg32[i0 >> 2] = nImg32[i1 >> 2];\n\t\t\tnImg32[i1 >> 2] = t;\n\n\t\t\ti0 += 4;\n\t\t\ti1 -= 4;\n\t\t}\n\t\twhile (this.quantizeVecDot(nImg, i0, e) > eMq) {\n\t\t\ti0 -= 4;\n\t\t}\n\t\treturn i0 + 4;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeVecDot(nImg: Uint8Array, i: number, e: number[]): number {\n\t\treturn nImg[i] * e[0] + nImg[i + 1] * e[1] + nImg[i + 2] * e[2] + nImg[i + 3] * e[3];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4MultiplyVec(m: number[], v: number[]): number[] {\n\t\treturn [\n\t\t\tm[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * v[3],\n\t\t\tm[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7] * v[3],\n\t\t\tm[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11] * v[3],\n\t\t\tm[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15] * v[3]\n\t\t];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4Dot(x: number[], y: number[]): number {\n\t\treturn x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4Sml(a: number, y: number[]): number[] {\n\t\treturn [a * y[0], a * y[1], a * y[2], a * y[3]];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate alphaMul(img: Uint8Array, roundA: number): Uint8Array {\n\t\tconst nImg = new Uint8Array(img.length);\n\t\tconst area = img.length >> 2;\n\t\tfor (let i = 0; i < area; i++) {\n\t\t\tconst qi = i << 2;\n\t\t\tlet ia = img[qi + 3];\n\t\t\tif (roundA) {\n\t\t\t\tia = ia < 128 ? 0 : 255;\n\t\t\t}\n\t\t\tconst a = ia * (1 / 255);\n\t\t\tnImg[qi + 0] = img[qi + 0] * a;\n\t\t\tnImg[qi + 1] = img[qi + 1] * a;\n\t\t\tnImg[qi + 2] = img[qi + 2] * a;\n\t\t\tnImg[qi + 3] = ia;\n\t\t}\n\t\treturn nImg;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pngEncoder.js","sourceRoot":"","sources":["../../../src/encoders/pngEncoder.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,+BAA+B;AAC/B,uCAAuC;AACvC,gCAAgC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK7C;;;GAGG;AACH,MAAM,OAAO,UAAU;IACtB;;;;;;OAMG;IACI,KAAK,CAAC,MAAM,CAAC,OAAsB,EAAE,CAAS,EAAE,CAAS;QAC/D,MAAM,EAAE,GAAG,CAAC,CAAC;QACb,MAAM,UAAU,GAAG,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAC1E,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAEnE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,CAAC;QACZ,2BAA2B;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;QAC7B,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAC3B,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;QAC9B,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;QAEnB,kCAAkC;QAClC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;QAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAClB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;YAEnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACtC,MAAM,IAAI,CAAC,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;gBAC/C,CAAC;gBACD,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;YACpB,CAAC;QACF,CAAC;QAED,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACtC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrC,MAAM,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;gBAC1B,MAAM,EAAE,CAAC,CAAC,UAAU;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;gBACxB,MAAM,EAAE,CAAC,CAAC,QAAQ;gBAClB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9D,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;YACpB,CAAC;YAED,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YACrB,MAAM,EAAE,GAAW,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,CAAC;YACpB,2BAA2B;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,MAAM,IAAI,CAAC,CAAC;YACb,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;YACD,MAAM,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;QACpB,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,2BAA2B;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;QAEnB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CACxB,OAAsB,EACtB,CAAS,EACT,CAAS,EACT,EAAU,EACV,UAAmB;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;YAC5C,GAAG,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,QAAQ,CACf,SAA4B,EAC5B,CAAS,EACT,CAAS,EACT,IAAY,EACZ,MAAc,EACd,UAAmB;QAEnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,IAAI,OAAO,GAAG,SAAS,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,wFAAwF;YACxF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,QAAQ,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;QACD,IAAI,QAAQ,GAAY,QAAQ,KAAK,GAAG,CAAC;QAEzC,MAAM,IAAI,GAA6B,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACd,EAAE,EAAE,CAAC;YACN,CAAC;QACF,CAAC;QAED,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBACd,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,oGAAoG;YACpG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,wFAAwF;gBACxF,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACb,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;4BACxB,MAAM;wBACP,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mDAAmD;QAC5F,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACb,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;iBAAM,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACpB,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;iBAAM,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrB,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACP,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE1C,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,IAAI,KAAK,GAAG,GAAG,CAAC;gBAChB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;oBAClC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACjD,IAAI,GAAG,GAAG,CAAC,CAAC;oBACZ,IAAI,GAAG,GAAG,CAAC,CAAC;oBACZ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;oBACb,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;oBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACpB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC1B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;oCACb,GAAG,GAAG,CAAC,CAAC;gCACT,CAAC;gCACD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;oCACb,GAAG,GAAG,CAAC,CAAC;gCACT,CAAC;gCACD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;oCACb,GAAG,GAAG,CAAC,CAAC;gCACT,CAAC;gCACD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;oCACb,GAAG,GAAG,CAAC,CAAC;gCACT,CAAC;4BACF,CAAC;wBACF,CAAC;oBACF,CAAC;oBACD,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;oBACjE,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;wBACnB,KAAK,GAAG,KAAK,CAAC;wBACd,IAAI,GAAG,EAAE,CAAC;wBACV,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;4BAChB,EAAE,GAAG,CAAC,CAAC;4BACP,EAAE,GAAG,CAAC,CAAC;4BACP,EAAE,GAAG,CAAC,CAAC;4BACP,EAAE,GAAG,CAAC,CAAC;wBACR,CAAC;6BAAM,CAAC;4BACP,EAAE,GAAG,GAAG,CAAC;4BACT,EAAE,GAAG,GAAG,CAAC;4BACT,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;4BACnB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;wBACpB,CAAC;oBACF,CAAC;gBACF,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACnD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;gBACvC,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACrD,KAAK,GAAG,CAAC,CAAC;gBACX,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACrD,KAAK,GAAG,CAAC,CAAC;gBACX,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACjB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;gBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;oBAClB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;oBAClB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;wBACpC,CAAC;oBACF,CAAC;yBAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACjE,CAAC;oBACF,CAAC;yBAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACjE,CAAC;oBACF,CAAC;yBAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACjE,CAAC;oBACF,CAAC;gBACF,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;gBACV,GAAG,GAAG,CAAC,CAAC;YACT,CAAC;iBAAM,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,4DAA4D;gBAC5D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;gBACV,GAAG,GAAG,CAAC,CAAC;gBACR,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACd,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE;oBACL,CAAC,EAAE,EAAE;oBACL,CAAC,EAAE,EAAE;oBACL,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,EAAE;iBACV;gBACD,GAAG,EAAE,IAAI;gBACT,GAAG;gBACH,GAAG;gBACH,KAAK;gBACL,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACtB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACvB,GAAe,EACf,CAAS,EACT,GAAW,EACX,GAAW,EACX,IAAgB;QAEhB,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzD,SAAS;YACV,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM;YACP,CAAC;QACF,CAAC;QACD,IAAI,EAAE,GAAW,CAAC,CAAC;QACnB,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBAC3B,EAAE,GAAG,CAAC,CAAC;gBACP,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACvB,CAAC;QACF,CAAC;QACD,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,UAAU,CACjB,IAAgB,EAChB,GAAe,EACf,CAAS,EACT,GAAW,EACX,GAAW,EACX,IAAY;QAEZ,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QAChB,EAAE,EAAE,CAAC;QAEL,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,CAAC;QACF,CAAC;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC5D,CAAC;QACF,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBACnE,CAAC;YACF,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC9E,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC5D,CAAC;YACF,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACnE,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACxF,CAAC;YACF,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC9E,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;4BACV,GAAG;4BACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;4BACxE,GAAG,CAAC;gBACN,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1B,OAAO,CAAC,CAAC;QACV,CAAC;QACD,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YACd,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC;IACV,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,IAAgB,EAAE,CAAS,EAAE,CAAS;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,IAAgB,EAAE,CAAS,EAAE,CAAS;QACvD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAgB,EAAE,CAAS,EAAE,CAAS;QACzD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,QAAQ,CACf,EAAc,EACd,EAAU,EACV,EAAU,EACV,EAAc,EACd,EAAU,EACV,EAAU,EACV,OAAe,EACf,OAAe,EACf,IAAY;QAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3B,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;oBAClC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oBACvB,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACP,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9C,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;gBAED,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBAChB,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAChB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACxB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACxB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACvB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAClC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAClC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBAE3B,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;oBACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;oBACzB,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oBAClC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;oBACtB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;oBACnC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;oBACnC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBACpC,CAAC;qBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACvB,wCAAwC;oBACxC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;wBACtD,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;wBACX,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBACf,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBACf,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACP,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;wBACZ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;wBAChB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;wBAChB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;oBACjB,CAAC;gBACF,CAAC;qBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACvB,0BAA0B;oBAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;wBACtD,SAAS;oBACV,CAAC;oBACD,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;wBACzB,OAAO,KAAK,CAAC;oBACd,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACK,GAAG,CAAC,CAAa,EAAE,CAAS,EAAE,CAAS;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC;IACzD,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,CAAS,EAAE,GAAe,EAAE,GAAW,EAAE,GAAW;QACrE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,QAAQ,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;OAEG;IACK,QAAQ;QACf,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACX,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACP,CAAC,MAAM,CAAC,CAAC;gBACV,CAAC;YACF,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,QAAQ,CACf,OAA0B,EAC1B,EAAU,EACV,UAAkB;QAElB,MAAM,IAAI,GAAiB,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YACjE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAChC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAS;YAClB,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,IAAI,CAAC,MAAM;YACf,GAAG,EAAE,IAAI;YACT,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;SACX,CAAC;QACF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAW,CAAC,IAAI,CAAC,CAAC;QAE7B,OAAO,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC1B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;oBACzB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;oBACb,EAAE,GAAG,CAAC,CAAC;gBACR,CAAC;YACF,CAAC;YACD,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;gBACjB,MAAM;YACP,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YAEvB,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAClC,IAAI,EACJ,MAAM,EACN,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EACjB,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,CACrB,CAAC;YAEF,MAAM,EAAE,GAAS;gBAChB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,EAAE,EAAE,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;aACX,CAAC;YACF,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,EAAE,GAAS;gBAChB,EAAE,EAAE,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,GAAG,EAAE,IAAI;gBACT,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;aACX,CAAC;YACF,EAAE,CAAC,GAAG,GAAG;gBACR,CAAC,EAAE,EAAE;gBACL,CAAC,EAAE,EAAE;gBACL,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;aAChC,CAAC;YACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAErC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAExD,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,EAAE,GAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;YAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAEhC,IAAI,EAAE,GAAgB,IAAI,CAAC;gBAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC;oBACjB,oEAAoE;oBACpE,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC3E,CAAC;gBAED,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;YACjC,CAAC;YACD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;QAC5B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,aAAa,CACpB,IAAgB,EAChB,EAAU,EACV,EAAU;QAEV,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAElC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAEd,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAA8C;QASpE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAElB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;SACpB,CAAC;QAEF,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,GAAG,CAAC;QAER,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;oBAC/B,MAAM;gBACP,CAAC;gBACD,EAAE,GAAG,GAAG,CAAC;YACV,CAAC;QACF,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvC,OAAO;YACN,GAAG,EAAE,EAAE;YACP,CAAC;YACD,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,EAAE;YACL,MAAM;YACN,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,EACH,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9B,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;gBACnC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,CAAC;SACF,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CACvB,GAAiC,EACjC,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS;QAET,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;IAC5D,CAAC;IAED;;OAEG;IACK,mBAAmB,CAC1B,IAAgB,EAChB,MAAmB,EACnB,IAAY,EACZ,IAAY,EACZ,CAAW,EACX,GAAW;QAEX,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;QAClB,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;gBAChD,EAAE,IAAI,CAAC,CAAC;YACT,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;gBAC/C,EAAE,IAAI,CAAC,CAAC;YACT,CAAC;YACD,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACd,MAAM;YACP,CAAC;YAED,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAEpB,EAAE,IAAI,CAAC,CAAC;YACR,EAAE,IAAI,CAAC,CAAC;QACT,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YAC/C,EAAE,IAAI,CAAC,CAAC;QACT,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,CAAC;IACf,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,IAAgB,EAAE,CAAS,EAAE,CAAW;QAC9D,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,CAAW,EAAE,CAAW;QAC7C,OAAO;YACN,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAW,EAAE,CAAW;QACrC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAS,EAAE,CAAW;QACnC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,GAAe,EAAE,MAAc;QAC/C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACrB,IAAI,MAAM,EAAE,CAAC;gBACZ,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACzB,CAAC;YACD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-mixed-operators */\n/* eslint-disable no-continue */\nimport { Compression } from \"@twin.org/core\";\nimport type { Frame } from \"./png/frame.js\";\nimport type { ImageData } from \"./png/imageData.js\";\nimport type { Leaf } from \"./png/leaf.js\";\n\n/**\n * PNG Encoder.\n * Based on https://github.com/photopea/UPNG.js.\n */\nexport class PngEncoder {\n\t/**\n\t * Encode the image frames to png.\n\t * @param buffers The frame buffers to encode.\n\t * @param w The image width.\n\t * @param h The image height.\n\t * @returns The data for the image.\n\t */\n\tpublic async encode(buffers: ArrayBuffer[], w: number, h: number): Promise<Uint8Array> {\n\t\tconst ps = 0;\n\t\tconst forbidPlte = false;\n\t\tconst data = new Uint8Array(buffers[0].byteLength * buffers.length + 100);\n\t\tconst wr = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tdata[i] = wr[i];\n\t\t}\n\t\tlet offset = 8;\n\n\t\tconst nImg = await this.compressPNG(buffers, w, h, ps, forbidPlte);\n\n\t\tthis.writeUint(data, offset, 13);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IHDR\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, w);\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, h);\n\t\toffset += 4;\n\t\tdata[offset] = nImg.depth;\n\t\toffset++;\n\t\tdata[offset] = nImg.cType;\n\t\toffset++;\n\t\tdata[offset] = 0; // compress\n\t\toffset++;\n\t\tdata[offset] = 0; // filter\n\t\toffset++;\n\t\tdata[offset] = 0; // interlace\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 17, 17));\n\t\toffset += 4; // crc\n\n\t\t// 9 bytes to say, that it is sRGB\n\t\tthis.writeUint(data, offset, 1);\n\t\toffset += 4;\n\t\tthis.writeASCII(data, offset, \"sRGB\");\n\t\toffset += 4;\n\t\tdata[offset] = 1;\n\t\toffset++;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 5, 5));\n\t\toffset += 4; // crc\n\n\t\tconst anim = buffers.length > 1;\n\t\tif (anim) {\n\t\t\tthis.writeUint(data, offset, 8);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"acTL\");\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, buffers.length);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, 0);\n\t\t\toffset += 4;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 12, 12));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tif (nImg.cType === 3) {\n\t\t\tconst dl = nImg.plte.length;\n\t\t\tthis.writeUint(data, offset, dl * 3);\n\t\t\toffset += 4;\n\t\t\tthis.writeASCII(data, offset, \"PLTE\");\n\t\t\toffset += 4;\n\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\tconst ti = i * 3;\n\t\t\t\tconst c = nImg.plte[i];\n\t\t\t\tconst r = c & 255;\n\t\t\t\tconst g = (c >> 8) & 255;\n\t\t\t\tconst b = (c >> 16) & 255;\n\t\t\t\tdata[offset + ti + 0] = r;\n\t\t\t\tdata[offset + ti + 1] = g;\n\t\t\t\tdata[offset + ti + 2] = b;\n\t\t\t}\n\t\t\toffset += dl * 3;\n\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl * 3 - 4, dl * 3 + 4));\n\t\t\toffset += 4; // crc\n\n\t\t\tif (nImg.gotAlpha) {\n\t\t\t\tthis.writeUint(data, offset, dl);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"tRNS\");\n\t\t\t\toffset += 4;\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = (nImg.plte[i] >> 24) & 255;\n\t\t\t\t}\n\t\t\t\toffset += dl;\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - dl - 4, dl + 4));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\t\t}\n\n\t\tlet fi = 0;\n\t\tfor (let j = 0; j < nImg.frames.length; j++) {\n\t\t\tconst fr = nImg.frames[j];\n\t\t\tif (anim) {\n\t\t\t\tthis.writeUint(data, offset, 26);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeASCII(data, offset, \"fcTL\");\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.width);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.height);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.x);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUint(data, offset, fr.rect.y);\n\t\t\t\toffset += 4;\n\t\t\t\tthis.writeUshort(data, offset, 0);\n\t\t\t\toffset += 2;\n\t\t\t\tthis.writeUshort(data, offset, 1000);\n\t\t\t\toffset += 2;\n\t\t\t\tdata[offset] = fr.dispose;\n\t\t\t\toffset++; // dispose\n\t\t\t\tdata[offset] = fr.blend;\n\t\t\t\toffset++; // blend\n\t\t\t\tthis.writeUint(data, offset, this.crc(data, offset - 30, 30));\n\t\t\t\toffset += 4; // crc\n\t\t\t}\n\n\t\t\tconst imgD = fr.cImg;\n\t\t\tconst dl: number = imgD?.length ?? 0;\n\t\t\tthis.writeUint(data, offset, dl + (j === 0 ? 0 : 4));\n\t\t\toffset += 4;\n\t\t\tconst iOff = offset;\n\t\t\t// cspell:disable-next-line\n\t\t\tthis.writeASCII(data, offset, j === 0 ? \"IDAT\" : \"fdAT\");\n\t\t\toffset += 4;\n\t\t\tif (j !== 0) {\n\t\t\t\tthis.writeUint(data, offset, fi++);\n\t\t\t\toffset += 4;\n\t\t\t}\n\t\t\tif (imgD) {\n\t\t\t\tfor (let i = 0; i < dl; i++) {\n\t\t\t\t\tdata[offset + i] = imgD[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += dl;\n\t\t\tthis.writeUint(data, offset, this.crc(data, iOff, offset - iOff));\n\t\t\toffset += 4; // crc\n\t\t}\n\n\t\tthis.writeUint(data, offset, 0);\n\t\toffset += 4;\n\t\t// cspell:disable-next-line\n\t\tthis.writeASCII(data, offset, \"IEND\");\n\t\toffset += 4;\n\t\tthis.writeUint(data, offset, this.crc(data, offset - 4, 4));\n\t\toffset += 4; // crc\n\n\t\treturn new Uint8Array(data.buffer.slice(0, offset));\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async compressPNG(\n\t\tbuffers: ArrayBuffer[],\n\t\tw: number,\n\t\th: number,\n\t\tps: number,\n\t\tforbidPlte: boolean\n\t): Promise<ImageData> {\n\t\tconst out = this.compress(buffers, w, h, ps, 0, forbidPlte);\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\tconst frm = out.frames[i];\n\t\t\tconst nw = frm.rect.width;\n\t\t\tconst nh = frm.rect.height;\n\t\t\tconst bpl = frm.bpl;\n\t\t\tconst bpp = frm.bpp;\n\t\t\tconst fData = new Uint8Array(nw * bpl + nh);\n\t\t\tfrm.cImg = await this.filterZero(frm.img, nh, bpp, bpl, fData);\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate compress(\n\t\tinBuffers: ArrayBufferLike[],\n\t\tw: number,\n\t\th: number,\n\t\tinPs: number,\n\t\tforGIF: number,\n\t\tforbidPlte: boolean\n\t): ImageData {\n\t\tlet cType = 6;\n\t\tlet depth = 8;\n\t\tlet bpp = 4;\n\t\tlet alphaAnd = 255;\n\t\tlet ps = inPs;\n\t\tlet buffers = inBuffers;\n\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\tconst img = new Uint8Array(buffers[j]);\n\t\t\tconst iLen = img.length;\n\t\t\tfor (let i = 0; i < iLen; i += 4) {\n\t\t\t\talphaAnd &= img[i + 3];\n\t\t\t}\n\t\t}\n\t\tlet gotAlpha: boolean = alphaAnd !== 255;\n\n\t\tconst cMap: { [id: number]: number } = {};\n\t\tconst pLte = [];\n\t\tif (buffers.length !== 0) {\n\t\t\tcMap[0] = 0;\n\t\t\tpLte.push(0);\n\t\t\tif (ps !== 0) {\n\t\t\t\tps--;\n\t\t\t}\n\t\t}\n\n\t\tif (ps !== 0) {\n\t\t\tconst qRes = this.quantize(buffers, ps, forGIF);\n\t\t\tbuffers = qRes.buffers;\n\t\t\tfor (let i = 0; i < qRes.plte.length; i++) {\n\t\t\t\tconst c = qRes.plte[i].est?.rgba ?? 0;\n\t\t\t\tif (!cMap[c]) {\n\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\tpLte.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// what if ps==0, but there are <=256 colors? we still need to detect, if the palette could be used\n\t\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\t\t// when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\t\tconst img32 = new Uint32Array(buffers[j]);\n\t\t\t\tconst iLen = img32.length;\n\t\t\t\tfor (let i = 0; i < iLen; i++) {\n\t\t\t\t\tconst c = img32[i];\n\t\t\t\t\tif ((i < w || (c !== img32[i - 1] && c !== img32[i - w])) && !cMap[c]) {\n\t\t\t\t\t\tcMap[c] = pLte.length;\n\t\t\t\t\t\tpLte.push(c);\n\t\t\t\t\t\tif (pLte.length >= 300) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst brute = gotAlpha ? forGIF : false; // brute : frames can only be copied, not \"blended\"\n\t\tconst cc = pLte.length;\n\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\tif (cc <= 2) {\n\t\t\t\tdepth = 1;\n\t\t\t} else if (cc <= 4) {\n\t\t\t\tdepth = 2;\n\t\t\t} else if (cc <= 16) {\n\t\t\t\tdepth = 4;\n\t\t\t} else {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tif (forGIF) {\n\t\t\t\tdepth = 8;\n\t\t\t}\n\t\t\tgotAlpha = true;\n\t\t}\n\n\t\tconst frames: Frame[] = [];\n\t\tfor (let j = 0; j < buffers.length; j++) {\n\t\t\tlet cImg = new Uint8Array(buffers[j]);\n\t\t\tlet cImg32 = new Uint32Array(cImg.buffer);\n\n\t\t\tlet nx = 0;\n\t\t\tlet ny = 0;\n\t\t\tlet nw = w;\n\t\t\tlet nh = h;\n\t\t\tlet blend = 0;\n\t\t\tif (j !== 0 && !brute) {\n\t\t\t\tconst tLim = forGIF || j === 1 || frames[frames.length - 2].dispose === 2 ? 1 : 2;\n\t\t\t\tlet tStp = 0;\n\t\t\t\tlet tArea = 1e9;\n\t\t\t\tfor (let it = 0; it < tLim; it++) {\n\t\t\t\t\tconst p32 = new Uint32Array(buffers[j - 1 - it]);\n\t\t\t\t\tlet mix = w;\n\t\t\t\t\tlet miy = h;\n\t\t\t\t\tlet max = -1;\n\t\t\t\t\tlet may = -1;\n\t\t\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\t\t\t\tconst i = y * w + x;\n\t\t\t\t\t\t\tif (cImg32[i] !== p32[i]) {\n\t\t\t\t\t\t\t\tif (x < mix) {\n\t\t\t\t\t\t\t\t\tmix = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (x > max) {\n\t\t\t\t\t\t\t\t\tmax = x;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y < miy) {\n\t\t\t\t\t\t\t\t\tmiy = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y > may) {\n\t\t\t\t\t\t\t\t\tmay = y;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst sArea = max === -1 ? 1 : (max - mix + 1) * (may - miy + 1);\n\t\t\t\t\tif (sArea < tArea) {\n\t\t\t\t\t\ttArea = sArea;\n\t\t\t\t\t\ttStp = it;\n\t\t\t\t\t\tif (max === -1) {\n\t\t\t\t\t\t\tnx = 0;\n\t\t\t\t\t\t\tny = 0;\n\t\t\t\t\t\t\tnw = 1;\n\t\t\t\t\t\t\tnh = 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnx = mix;\n\t\t\t\t\t\t\tny = miy;\n\t\t\t\t\t\t\tnw = max - mix + 1;\n\t\t\t\t\t\t\tnh = may - miy + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst pImg = new Uint8Array(buffers[j - 1 - tStp]);\n\t\t\t\tif (tStp === 1) {\n\t\t\t\t\tframes[frames.length - 1].dispose = 2;\n\t\t\t\t}\n\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 4);\n\t\t\t\tthis.copyTile(pImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\tif (this.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 3)) {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 2);\n\t\t\t\t\tblend = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.copyTile(cImg, w, h, nImg, nw, nh, -nx, -ny, 0);\n\t\t\t\t\tblend = 0;\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcImg32 = new Uint32Array(cImg.buffer);\n\t\t\t}\n\t\t\tlet bpl = 4 * nw;\n\t\t\tif (cc <= 256 && !forbidPlte) {\n\t\t\t\tbpl = Math.ceil((depth * nw) / 8);\n\t\t\t\tconst nImg = new Uint8Array(bpl * nh);\n\t\t\t\tfor (let y = 0; y < nh; y++) {\n\t\t\t\t\tconst i = y * bpl;\n\t\t\t\t\tconst ii = y * nw;\n\t\t\t\t\tif (depth === 8) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + x] = cMap[cImg32[ii + x]];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 4) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 1)] |= cMap[cImg32[ii + x]] << (4 - (x & 1) * 4);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 2) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 2)] |= cMap[cImg32[ii + x]] << (6 - (x & 3) * 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (depth === 1) {\n\t\t\t\t\t\tfor (let x = 0; x < nw; x++) {\n\t\t\t\t\t\t\tnImg[i + (x >> 3)] |= cMap[cImg32[ii + x]] << (7 - (x & 7) * 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 3;\n\t\t\t\tbpp = 1;\n\t\t\t} else if (!gotAlpha && buffers.length === 1) {\n\t\t\t\t// some next \"reduced\" frames may contain alpha for blending\n\t\t\t\tconst nImg = new Uint8Array(nw * nh * 3);\n\t\t\t\tconst area = nw * nh;\n\t\t\t\tfor (let i = 0; i < area; i++) {\n\t\t\t\t\tconst ti = i * 3;\n\t\t\t\t\tconst qi = i * 4;\n\t\t\t\t\tnImg[ti] = cImg[qi];\n\t\t\t\t\tnImg[ti + 1] = cImg[qi + 1];\n\t\t\t\t\tnImg[ti + 2] = cImg[qi + 2];\n\t\t\t\t}\n\t\t\t\tcImg = nImg;\n\t\t\t\tcType = 2;\n\t\t\t\tbpp = 3;\n\t\t\t\tbpl = 3 * nw;\n\t\t\t}\n\t\t\tframes.push({\n\t\t\t\trect: {\n\t\t\t\t\tx: nx,\n\t\t\t\t\ty: ny,\n\t\t\t\t\twidth: nw,\n\t\t\t\t\theight: nh\n\t\t\t\t},\n\t\t\t\timg: cImg,\n\t\t\t\tbpl,\n\t\t\t\tbpp,\n\t\t\t\tblend,\n\t\t\t\tdispose: brute ? 1 : 0\n\t\t\t});\n\t\t}\n\t\treturn { cType, depth, plte: pLte, gotAlpha, frames };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async filterZero(\n\t\timg: Uint8Array,\n\t\th: number,\n\t\tbpp: number,\n\t\tbpl: number,\n\t\tdata: Uint8Array\n\t): Promise<Uint8Array> {\n\t\tconst fls = [];\n\t\tfor (let t = 0; t < 5; t++) {\n\t\t\tif (h * bpl > 500000 && (t === 2 || t === 3 || t === 4)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (let y = 0; y < h; y++) {\n\t\t\t\tthis.filterLine(data, img, y, bpl, bpp, t);\n\t\t\t}\n\t\t\tconst deflated = await Compression.compress(data, \"deflate\");\n\t\t\tfls.push(deflated);\n\t\t\tif (bpp === 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet ti: number = 0;\n\t\tlet tSize = 1e9;\n\t\tfor (let i = 0; i < fls.length; i++) {\n\t\t\tif (fls[i].length < tSize) {\n\t\t\t\tti = i;\n\t\t\t\ttSize = fls[i].length;\n\t\t\t}\n\t\t}\n\t\treturn fls[ti];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate filterLine(\n\t\tdata: Uint8Array,\n\t\timg: Uint8Array,\n\t\ty: number,\n\t\tbpl: number,\n\t\tbpp: number,\n\t\ttype: number\n\t): void {\n\t\tconst i = y * bpl;\n\t\tlet di = i + y;\n\t\tdata[di] = type;\n\t\tdi++;\n\n\t\tif (type === 0) {\n\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t} else if (type === 1) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\tdata[di + x] = (img[i + x] - img[i + x - bpp] + 256) & 255;\n\t\t\t}\n\t\t} else if (y === 0) {\n\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t}\n\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = img[i + x];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - (img[i + x - bpp] >> 1) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] - this.paeth(img[i + x - bpp], 0, 0) + 256) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (type === 2) {\n\t\t\t\tfor (let x = 0; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - img[i + x - bpl]) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - (img[i + x - bpl] >> 1)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - ((img[i + x - bpl] + img[i + x - bpp]) >> 1)) & 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 4) {\n\t\t\t\tfor (let x = 0; x < bpp; x++) {\n\t\t\t\t\tdata[di + x] = (img[i + x] + 256 - this.paeth(0, img[i + x - bpl], 0)) & 255;\n\t\t\t\t}\n\t\t\t\tfor (let x = bpp; x < bpl; x++) {\n\t\t\t\t\tdata[di + x] =\n\t\t\t\t\t\t(img[i + x] +\n\t\t\t\t\t\t\t256 -\n\t\t\t\t\t\t\tthis.paeth(img[i + x - bpp], img[i + x - bpl], img[i + x - bpp - bpl])) &\n\t\t\t\t\t\t255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate paeth(a: number, b: number, c: number): number {\n\t\tconst p = a + b - c;\n\t\tconst pa = Math.abs(p - a);\n\t\tconst pb = Math.abs(p - b);\n\t\tconst pc = Math.abs(p - c);\n\t\tif (pa <= pb && pa <= pc) {\n\t\t\treturn a;\n\t\t}\n\t\tif (pb <= pc) {\n\t\t\treturn b;\n\t\t}\n\t\treturn c;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeASCII(data: Uint8Array, p: number, s: string): void {\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tdata[p + i] = s.charCodeAt(i);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeUint(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 24) & 255;\n\t\tbuff[p + 1] = (n >> 16) & 255;\n\t\tbuff[p + 2] = (n >> 8) & 255;\n\t\tbuff[p + 3] = n & 255;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate writeUshort(buff: Uint8Array, p: number, n: number): void {\n\t\tbuff[p] = (n >> 8) & 255;\n\t\tbuff[p + 1] = n & 255;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate copyTile(\n\t\tsb: Uint8Array,\n\t\tsw: number,\n\t\tsh: number,\n\t\ttb: Uint8Array,\n\t\ttw: number,\n\t\tth: number,\n\t\txOffset: number,\n\t\tyOffset: number,\n\t\tmode: number\n\t): boolean {\n\t\tconst w = Math.min(sw, tw);\n\t\tconst h = Math.min(sh, th);\n\t\tlet si;\n\t\tlet ti;\n\t\tfor (let y = 0; y < h; y++) {\n\t\t\tfor (let x = 0; x < w; x++) {\n\t\t\t\tif (xOffset >= 0 && yOffset >= 0) {\n\t\t\t\t\tsi = (y * sw + x) << 2;\n\t\t\t\t\tti = ((yOffset + y) * tw + xOffset + x) << 2;\n\t\t\t\t} else {\n\t\t\t\t\tsi = ((-yOffset + y) * sw - xOffset + x) << 2;\n\t\t\t\t\tti = (y * tw + x) << 2;\n\t\t\t\t}\n\n\t\t\t\tif (mode === 0) {\n\t\t\t\t\ttb[ti] = sb[si];\n\t\t\t\t\ttb[ti + 1] = sb[si + 1];\n\t\t\t\t\ttb[ti + 2] = sb[si + 2];\n\t\t\t\t\ttb[ti + 3] = sb[si + 3];\n\t\t\t\t} else if (mode === 1) {\n\t\t\t\t\tconst fa = sb[si + 3] * (1 / 255);\n\t\t\t\t\tconst fr = sb[si] * fa;\n\t\t\t\t\tconst fg = sb[si + 1] * fa;\n\t\t\t\t\tconst fb = sb[si + 2] * fa;\n\t\t\t\t\tconst ba = tb[ti + 3] * (1 / 255);\n\t\t\t\t\tconst br = tb[ti] * ba;\n\t\t\t\t\tconst bg = tb[ti + 1] * ba;\n\t\t\t\t\tconst bb = tb[ti + 2] * ba;\n\n\t\t\t\t\tconst ifa = 1 - fa;\n\t\t\t\t\tconst oa = fa + ba * ifa;\n\t\t\t\t\tconst ioa = oa === 0 ? 0 : 1 / oa;\n\t\t\t\t\ttb[ti + 3] = 255 * oa;\n\t\t\t\t\ttb[ti + 0] = (fr + br * ifa) * ioa;\n\t\t\t\t\ttb[ti + 1] = (fg + bg * ifa) * ioa;\n\t\t\t\t\ttb[ti + 2] = (fb + bb * ifa) * ioa;\n\t\t\t\t} else if (mode === 2) {\n\t\t\t\t\t// copy only differences, otherwise zero\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\ttb[ti] = 0;\n\t\t\t\t\t\ttb[ti + 1] = 0;\n\t\t\t\t\t\ttb[ti + 2] = 0;\n\t\t\t\t\t\ttb[ti + 3] = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttb[ti] = fr;\n\t\t\t\t\t\ttb[ti + 1] = fg;\n\t\t\t\t\t\ttb[ti + 2] = fb;\n\t\t\t\t\t\ttb[ti + 3] = fa;\n\t\t\t\t\t}\n\t\t\t\t} else if (mode === 3) {\n\t\t\t\t\t// check if can be blended\n\t\t\t\t\tconst fa = sb[si + 3];\n\t\t\t\t\tconst fr = sb[si];\n\t\t\t\t\tconst fg = sb[si + 1];\n\t\t\t\t\tconst fb = sb[si + 2];\n\t\t\t\t\tconst ba = tb[ti + 3];\n\t\t\t\t\tconst br = tb[ti];\n\t\t\t\t\tconst bg = tb[ti + 1];\n\t\t\t\t\tconst bb = tb[ti + 2];\n\t\t\t\t\tif (fa === ba && fr === br && fg === bg && fb === bb) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (fa < 220 && ba > 20) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crc(b: Uint8Array, o: number, l: number): number {\n\t\treturn this.crcUpdate(0xffffffff, b, o, l) ^ 0xffffffff;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crcUpdate(c: number, buf: Uint8Array, off: number, len: number): number {\n\t\tlet localC = c;\n\t\tconst crcTable = this.crcTable();\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tlocalC = crcTable[(localC ^ buf[off + i]) & 0xff] ^ (localC >>> 8);\n\t\t}\n\t\treturn localC;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate crcTable(): Uint32Array {\n\t\tconst tab = new Uint32Array(256);\n\t\tfor (let n = 0; n < 256; n++) {\n\t\t\tlet c = n;\n\t\t\tfor (let k = 0; k < 8; k++) {\n\t\t\t\tif (c & 1) {\n\t\t\t\t\tc = 0xedb88320 ^ (c >>> 1);\n\t\t\t\t} else {\n\t\t\t\t\tc >>>= 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttab[n] = c;\n\t\t}\n\t\treturn tab;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantize(\n\t\tbuffers: ArrayBufferLike[],\n\t\tps: number,\n\t\troundAlpha: number\n\t): { buffers: ArrayBufferLike[]; plte: Leaf[] } {\n\t\tconst imgs: Uint8Array[] = [];\n\t\tlet total = 0;\n\t\tfor (let i = 0; i < buffers.length; i++) {\n\t\t\timgs.push(this.alphaMul(new Uint8Array(buffers[i]), roundAlpha));\n\t\t\ttotal += buffers[i].byteLength;\n\t\t}\n\n\t\tconst nImg = new Uint8Array(total);\n\t\tconst nImg32 = new Uint32Array(nImg.buffer);\n\t\tlet nOff = 0;\n\t\tfor (let i = 0; i < imgs.length; i++) {\n\t\t\tconst img = imgs[i];\n\t\t\tconst il = img.length;\n\t\t\tfor (let j = 0; j < il; j++) {\n\t\t\t\tnImg[nOff + j] = img[j];\n\t\t\t}\n\t\t\tnOff += il;\n\t\t}\n\n\t\tconst root: Leaf = {\n\t\t\ti0: 0,\n\t\t\ti1: nImg.length,\n\t\t\tbst: null,\n\t\t\test: null,\n\t\t\ttDst: 0,\n\t\t\tleft: null,\n\t\t\tright: null\n\t\t};\n\t\troot.bst = this.quantizeStats(nImg, root.i0, root.i1);\n\t\troot.est = this.quantizeEStats(root.bst);\n\t\tconst leafs: Leaf[] = [root];\n\n\t\twhile (leafs.length < ps) {\n\t\t\tlet maxL = 0;\n\t\t\tlet mi = 0;\n\t\t\tfor (let i = 0; i < leafs.length; i++) {\n\t\t\t\tconst est = leafs[i].est;\n\t\t\t\tif (est && est.L > maxL) {\n\t\t\t\t\tmaxL = est.L;\n\t\t\t\t\tmi = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (maxL < 1e-3) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst node = leafs[mi];\n\n\t\t\tconst s0 = this.quantizeSplitPixels(\n\t\t\t\tnImg,\n\t\t\t\tnImg32,\n\t\t\t\tnode.i0,\n\t\t\t\tnode.i1,\n\t\t\t\tnode.est?.e ?? [],\n\t\t\t\tnode.est?.eMq255 ?? 0\n\t\t\t);\n\n\t\t\tconst ln: Leaf = {\n\t\t\t\ti0: node.i0,\n\t\t\t\ti1: s0,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\tln.bst = this.quantizeStats(nImg, ln.i0, ln.i1);\n\t\t\tln.est = this.quantizeEStats(ln.bst);\n\t\t\tconst rn: Leaf = {\n\t\t\t\ti0: s0,\n\t\t\t\ti1: node.i1,\n\t\t\t\tbst: null,\n\t\t\t\test: null,\n\t\t\t\ttDst: 0,\n\t\t\t\tleft: null,\n\t\t\t\tright: null\n\t\t\t};\n\t\t\trn.bst = {\n\t\t\t\tR: [],\n\t\t\t\tm: [],\n\t\t\t\tN: (node.bst?.N ?? 0) - ln.bst.N\n\t\t\t};\n\t\t\tfor (let i = 0; i < 16; i++) {\n\t\t\t\trn.bst.R[i] = (node.bst?.R[i] ?? 0) - ln.bst.R[i];\n\t\t\t}\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\trn.bst.m[i] = (node.bst?.m[i] ?? 0) - ln.bst.m[i];\n\t\t\t}\n\t\t\trn.est = this.quantizeEStats(rn.bst);\n\n\t\t\tnode.left = ln;\n\t\t\tnode.right = rn;\n\t\t\tleafs[mi] = ln;\n\t\t\tleafs.push(rn);\n\t\t}\n\t\tleafs.sort((a, b) => (b.bst?.N ?? 0) - (a.bst?.N ?? 0));\n\n\t\tconst outBuffers: ArrayBufferLike[] = [];\n\t\tfor (let ii = 0; ii < imgs.length; ii++) {\n\t\t\tconst sb = new Uint8Array(imgs[ii]);\n\t\t\tconst tb: Uint32Array = new Uint32Array(imgs[ii]);\n\t\t\tconst len = sb.length;\n\n\t\t\tfor (let i = 0; i < len; i += 4) {\n\t\t\t\tconst r = sb[i] * (1 / 255);\n\t\t\t\tconst g = sb[i + 1] * (1 / 255);\n\t\t\t\tconst b = sb[i + 2] * (1 / 255);\n\t\t\t\tconst a = sb[i + 3] * (1 / 255);\n\n\t\t\t\tlet nd: Leaf | null = root;\n\t\t\t\twhile (nd?.left) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tnd = this.quantizePlaneDst(nd.est!, r, g, b, a) <= 0 ? nd.left : nd.right;\n\t\t\t\t}\n\n\t\t\t\ttb[i >> 2] = nd?.est?.rgba ?? 0;\n\t\t\t}\n\t\t\toutBuffers[ii] = tb.buffer;\n\t\t}\n\t\treturn { buffers: outBuffers, plte: leafs };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeStats(\n\t\tnImg: Uint8Array,\n\t\ti0: number,\n\t\ti1: number\n\t): { R: number[]; m: number[]; N: number } {\n\t\tconst R = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\t\tconst m = [0, 0, 0, 0];\n\t\tconst N = (i1 - i0) >> 2;\n\t\tfor (let i = i0; i < i1; i += 4) {\n\t\t\tconst r = nImg[i] * (1 / 255);\n\t\t\tconst g = nImg[i + 1] * (1 / 255);\n\t\t\tconst b = nImg[i + 2] * (1 / 255);\n\t\t\tconst a = nImg[i + 3] * (1 / 255);\n\n\t\t\tm[0] += r;\n\t\t\tm[1] += g;\n\t\t\tm[2] += b;\n\t\t\tm[3] += a;\n\n\t\t\tR[0] += r * r;\n\t\t\tR[1] += r * g;\n\t\t\tR[2] += r * b;\n\t\t\tR[3] += r * a;\n\t\t\tR[5] += g * g;\n\t\t\tR[6] += g * b;\n\t\t\tR[7] += g * a;\n\t\t\tR[10] += b * b;\n\t\t\tR[11] += b * a;\n\t\t\tR[15] += a * a;\n\t\t}\n\t\tR[4] = R[1];\n\t\tR[8] = R[2];\n\t\tR[12] = R[3];\n\t\tR[9] = R[6];\n\t\tR[13] = R[7];\n\t\tR[14] = R[11];\n\n\t\treturn { R, m, N };\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeEStats(stats: { R: number[]; m: number[]; N: number }): {\n\t\tCov: number[];\n\t\tq: number[];\n\t\te: number[];\n\t\tL: number;\n\t\teMq255: number;\n\t\teMq: number;\n\t\trgba: number;\n\t} {\n\t\tconst R = stats.R;\n\t\tconst m = stats.m;\n\t\tconst N = stats.N;\n\n\t\tconst m0 = m[0];\n\t\tconst m1 = m[1];\n\t\tconst m2 = m[2];\n\t\tconst m3 = m[3];\n\t\tconst iN = N === 0 ? 0 : 1 / N;\n\t\tconst rj = [\n\t\t\tR[0] - m0 * m0 * iN,\n\t\t\tR[1] - m0 * m1 * iN,\n\t\t\tR[2] - m0 * m2 * iN,\n\t\t\tR[3] - m0 * m3 * iN,\n\t\t\tR[4] - m1 * m0 * iN,\n\t\t\tR[5] - m1 * m1 * iN,\n\t\t\tR[6] - m1 * m2 * iN,\n\t\t\tR[7] - m1 * m3 * iN,\n\t\t\tR[8] - m2 * m0 * iN,\n\t\t\tR[9] - m2 * m1 * iN,\n\t\t\tR[10] - m2 * m2 * iN,\n\t\t\tR[11] - m2 * m3 * iN,\n\t\t\tR[12] - m3 * m0 * iN,\n\t\t\tR[13] - m3 * m1 * iN,\n\t\t\tR[14] - m3 * m2 * iN,\n\t\t\tR[15] - m3 * m3 * iN\n\t\t];\n\n\t\tconst A = rj;\n\t\tlet b = [0.5, 0.5, 0.5, 0.5];\n\t\tlet mi = 0;\n\t\tlet tmi;\n\n\t\tif (N !== 0) {\n\t\t\tfor (let i = 0; i < 10; i++) {\n\t\t\t\tb = this.m4MultiplyVec(A, b);\n\t\t\t\ttmi = Math.sqrt(this.m4Dot(b, b));\n\t\t\t\tb = this.m4Sml(1 / tmi, b);\n\t\t\t\tif (Math.abs(tmi - mi) < 1e-9) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmi = tmi;\n\t\t\t}\n\t\t}\n\t\tconst q = [m0 * iN, m1 * iN, m2 * iN, m3 * iN];\n\t\tconst eMq255 = this.m4Dot(this.m4Sml(255, q), b);\n\n\t\tconst ia = q[3] < 0.001 ? 0 : 1 / q[3];\n\n\t\treturn {\n\t\t\tCov: rj,\n\t\t\tq,\n\t\t\te: b,\n\t\t\tL: mi,\n\t\t\teMq255,\n\t\t\teMq: this.m4Dot(b, q),\n\t\t\trgba:\n\t\t\t\t((Math.round(255 * q[3]) << 24) |\n\t\t\t\t\t(Math.round(255 * q[2] * ia) << 16) |\n\t\t\t\t\t(Math.round(255 * q[1] * ia) << 8) |\n\t\t\t\t\t(Math.round(255 * q[0] * ia) << 0)) >>>\n\t\t\t\t0\n\t\t};\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizePlaneDst(\n\t\test: { e: number[]; eMq: number },\n\t\tr: number,\n\t\tg: number,\n\t\tb: number,\n\t\ta: number\n\t): number {\n\t\tconst e = est.e;\n\t\treturn e[0] * r + e[1] * g + e[2] * b + e[3] * a - est.eMq;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeSplitPixels(\n\t\tnImg: Uint8Array,\n\t\tnImg32: Uint32Array,\n\t\ti0in: number,\n\t\ti1in: number,\n\t\te: number[],\n\t\teMq: number\n\t): number {\n\t\tlet i1 = i1in - 4;\n\t\tlet i0 = i0in;\n\t\twhile (i0 < i1) {\n\t\t\twhile (this.quantizeVecDot(nImg, i0, e) <= eMq) {\n\t\t\t\ti0 += 4;\n\t\t\t}\n\t\t\twhile (this.quantizeVecDot(nImg, i1, e) > eMq) {\n\t\t\t\ti1 -= 4;\n\t\t\t}\n\t\t\tif (i0 >= i1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst t = nImg32[i0 >> 2];\n\t\t\tnImg32[i0 >> 2] = nImg32[i1 >> 2];\n\t\t\tnImg32[i1 >> 2] = t;\n\n\t\t\ti0 += 4;\n\t\t\ti1 -= 4;\n\t\t}\n\t\twhile (this.quantizeVecDot(nImg, i0, e) > eMq) {\n\t\t\ti0 -= 4;\n\t\t}\n\t\treturn i0 + 4;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate quantizeVecDot(nImg: Uint8Array, i: number, e: number[]): number {\n\t\treturn nImg[i] * e[0] + nImg[i + 1] * e[1] + nImg[i + 2] * e[2] + nImg[i + 3] * e[3];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4MultiplyVec(m: number[], v: number[]): number[] {\n\t\treturn [\n\t\t\tm[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * v[3],\n\t\t\tm[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7] * v[3],\n\t\t\tm[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11] * v[3],\n\t\t\tm[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15] * v[3]\n\t\t];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4Dot(x: number[], y: number[]): number {\n\t\treturn x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate m4Sml(a: number, y: number[]): number[] {\n\t\treturn [a * y[0], a * y[1], a * y[2], a * y[3]];\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate alphaMul(img: Uint8Array, roundA: number): Uint8Array {\n\t\tconst nImg = new Uint8Array(img.length);\n\t\tconst area = img.length >> 2;\n\t\tfor (let i = 0; i < area; i++) {\n\t\t\tconst qi = i << 2;\n\t\t\tlet ia = img[qi + 3];\n\t\t\tif (roundA) {\n\t\t\t\tia = ia < 128 ? 0 : 255;\n\t\t\t}\n\t\t\tconst a = ia * (1 / 255);\n\t\t\tnImg[qi + 0] = img[qi + 0] * a;\n\t\t\tnImg[qi + 1] = img[qi + 1] * a;\n\t\t\tnImg[qi + 2] = img[qi + 2] * a;\n\t\t\tnImg[qi + 3] = ia;\n\t\t}\n\t\treturn nImg;\n\t}\n}\n"]}
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.3-next.38](https://github.com/iotaledger/twin-framework/compare/image-v0.0.3-next.37...image-v0.0.3-next.38) (2026-05-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* typescript 6 update ([1d10f31](https://github.com/iotaledger/twin-framework/commit/1d10f31e6516ec622773f45e88af82fe749b384a))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/core bumped from 0.0.3-next.37 to 0.0.3-next.38
|
|
16
|
+
* @twin.org/nameof bumped from 0.0.3-next.37 to 0.0.3-next.38
|
|
17
|
+
* devDependencies
|
|
18
|
+
* @twin.org/nameof-transformer bumped from 0.0.3-next.37 to 0.0.3-next.38
|
|
19
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.3-next.37 to 0.0.3-next.38
|
|
20
|
+
* @twin.org/validate-locales bumped from 0.0.3-next.37 to 0.0.3-next.38
|
|
21
|
+
|
|
22
|
+
## [0.0.3-next.37](https://github.com/iotaledger/twin-framework/compare/image-v0.0.3-next.36...image-v0.0.3-next.37) (2026-05-07)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Miscellaneous Chores
|
|
26
|
+
|
|
27
|
+
* **image:** Synchronize repo versions
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Dependencies
|
|
31
|
+
|
|
32
|
+
* The following workspace dependencies were updated
|
|
33
|
+
* dependencies
|
|
34
|
+
* @twin.org/core bumped from 0.0.3-next.36 to 0.0.3-next.37
|
|
35
|
+
* @twin.org/nameof bumped from 0.0.3-next.36 to 0.0.3-next.37
|
|
36
|
+
* devDependencies
|
|
37
|
+
* @twin.org/nameof-transformer bumped from 0.0.3-next.36 to 0.0.3-next.37
|
|
38
|
+
* @twin.org/nameof-vitest-plugin bumped from 0.0.3-next.36 to 0.0.3-next.37
|
|
39
|
+
* @twin.org/validate-locales bumped from 0.0.3-next.36 to 0.0.3-next.37
|
|
40
|
+
|
|
3
41
|
## [0.0.3-next.36](https://github.com/iotaledger/twin-framework/compare/image-v0.0.3-next.35...image-v0.0.3-next.36) (2026-05-07)
|
|
4
42
|
|
|
5
43
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/image",
|
|
3
|
-
"version": "0.0.3-next.
|
|
3
|
+
"version": "0.0.3-next.38",
|
|
4
4
|
"description": "Classes for image manipulation",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"node": ">=20.0.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@twin.org/core": "0.0.3-next.
|
|
18
|
-
"@twin.org/nameof": "0.0.3-next.
|
|
17
|
+
"@twin.org/core": "0.0.3-next.38",
|
|
18
|
+
"@twin.org/nameof": "0.0.3-next.38"
|
|
19
19
|
},
|
|
20
20
|
"main": "./dist/es/index.js",
|
|
21
21
|
"types": "./dist/types/index.d.ts",
|