@liquid-js/qr-code-styling 5.1.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -1
- package/lib/border-plugin.js.map +1 -1
- package/lib/core/qr-svg.d.ts +0 -3
- package/lib/figures/dot-elements.d.ts +1 -0
- package/lib/font-faces-plugin.js +2 -0
- package/lib/font-faces-plugin.js.map +1 -0
- package/lib/plugins/border.d.ts +5 -1
- package/lib/plugins/font-faces.d.ts +19 -0
- package/lib/qr-code-styling-node.js +63 -40
- package/lib/qr-code-styling-node.js.map +1 -1
- package/lib/qr-code-styling.js +1 -1
- package/lib/qr-code-styling.js.map +1 -1
- package/lib/tools/resize.d.ts +41 -0
- package/lib/utils/options.d.ts +5 -4
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qr-code-styling.js","sources":["../node_modules/@liquid-js/qrcode-generator/lib/qrcode/BitBuffer.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/ErrorCorrectLevel.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRMath.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Polynomial.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Mode.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRData.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QR8BitByte.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRAlphaNum.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRKanji.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRNumber.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/MaskPattern.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/RSBlock.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js","../src/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/figures/dot-elements.ts","../src/figures/corner-dot.ts","../src/figures/square-elements.ts","../src/figures/corner-square.ts","../src/figures/dot-composition.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/utils/color.ts","../src/utils/random.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../node_modules/@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js","../src/utils/canvas-options.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["export class BitBuffer {\n buffer;\n length;\n constructor() {\n this.buffer = [];\n this.length = 0;\n }\n getBuffer() {\n return this.buffer;\n }\n getLengthInBits() {\n return this.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLengthInBits(); i += 1) {\n buffer += this.getBit(i) ? '1' : '0';\n }\n return buffer;\n }\n getBit(index) {\n return ((this.buffer[~~(index / 8)] >>> (7 - (index % 8))) & 1) == 1;\n }\n put(num, length) {\n for (let i = 0; i < length; i += 1) {\n this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n }\n }\n putBit(bit) {\n if (this.length == this.buffer.length * 8) {\n this.buffer.push(0);\n }\n if (bit) {\n this.buffer[~~(this.length / 8)] |= 0x80 >>> this.length % 8;\n }\n this.length += 1;\n }\n}\n//# sourceMappingURL=BitBuffer.js.map","/**\n * ErrorCorrectLevel\n *\n * @author Kazuhiko Arase\n */\nexport var ErrorCorrectLevel;\n(function (ErrorCorrectLevel) {\n /**\n * 7%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"L\"] = 1] = \"L\";\n /**\n * 15%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"M\"] = 0] = \"M\";\n /**\n * 25%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n /**\n * 30%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"H\"] = 2] = \"H\";\n})(ErrorCorrectLevel || (ErrorCorrectLevel = {}));\n//# sourceMappingURL=ErrorCorrectLevel.js.map","/**\n * QRMath\n *\n * @author Kazuhiko Arase\n */\nexport class QRMath {\n constructor() {\n throw new Error('error');\n }\n static initialize = () => {\n QRMath.EXP_TABLE = [];\n QRMath.LOG_TABLE = [];\n for (let i = 0; i < 256; i += 1) {\n QRMath.EXP_TABLE.push(i < 8\n ? 1 << i\n : QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]);\n QRMath.LOG_TABLE.push(0);\n }\n for (let i = 0; i < 255; i += 1) {\n QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n }\n };\n static EXP_TABLE;\n static LOG_TABLE;\n static glog(n) {\n if (!QRMath.LOG_TABLE)\n QRMath.initialize();\n if (n < 1) {\n throw new Error('log(' + n + ')');\n }\n return QRMath.LOG_TABLE[n];\n }\n static gexp(n) {\n if (!QRMath.EXP_TABLE)\n QRMath.initialize();\n while (n < 0) {\n n += 255;\n }\n while (n >= 256) {\n n -= 255;\n }\n return QRMath.EXP_TABLE[n];\n }\n}\n//# sourceMappingURL=QRMath.js.map","import { QRMath } from './QRMath.js';\n/**\n * Polynomial\n *\n * @author Kazuhiko Arase\n */\nexport class Polynomial {\n num;\n constructor(num, shift = 0) {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n this.num = [];\n const len = num.length - offset;\n for (let i = 0; i < len; i += 1) {\n this.num.push(num[offset + i]);\n }\n for (let i = 0; i < shift; i += 1) {\n this.num.push(0);\n }\n }\n getAt(index) {\n return this.num[index];\n }\n getLength() {\n return this.num.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += this.getAt(i);\n }\n return buffer.toString();\n }\n toLogString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += QRMath.glog(this.getAt(i));\n }\n return buffer.toString();\n }\n multiply(e) {\n const num = [];\n const len = this.getLength() + e.getLength() - 1;\n for (let i = 0; i < len; i += 1) {\n num.push(0);\n }\n for (let i = 0; i < this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(this.getAt(i)) + QRMath.glog(e.getAt(j)));\n }\n }\n return new Polynomial(num);\n }\n mod(e) {\n if (this.getLength() - e.getLength() < 0) {\n return this;\n }\n const ratio = QRMath.glog(this.getAt(0)) - QRMath.glog(e.getAt(0));\n // create copy\n const num = [];\n for (let i = 0; i < this.getLength(); i += 1) {\n num.push(this.getAt(i));\n }\n // subtract and calc rest.\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);\n }\n // call recursively\n return new Polynomial(num).mod(e);\n }\n}\n//# sourceMappingURL=Polynomial.js.map","/**\n * Mode\n *\n * @author Kazuhiko Arase\n */\nexport var Mode;\n(function (Mode) {\n /**\n * number\n */\n Mode[Mode[\"MODE_NUMBER\"] = 1] = \"MODE_NUMBER\";\n /**\n * alphabet and number\n */\n Mode[Mode[\"MODE_ALPHA_NUM\"] = 2] = \"MODE_ALPHA_NUM\";\n /**\n * 8bit byte\n */\n Mode[Mode[\"MODE_8BIT_BYTE\"] = 4] = \"MODE_8BIT_BYTE\";\n /**\n * KANJI\n */\n Mode[Mode[\"MODE_KANJI\"] = 8] = \"MODE_KANJI\";\n})(Mode || (Mode = {}));\n//# sourceMappingURL=Mode.js.map","import { Mode } from './Mode.js';\n/**\n * QRData\n *\n * @author Kazuhiko Arase\n */\nexport class QRData {\n mode;\n data;\n constructor(mode, data) {\n this.mode = mode;\n this.data = data;\n }\n getMode() {\n return this.mode;\n }\n getData() {\n return this.data;\n }\n getLengthInBits(typeNumber) {\n if (1 <= typeNumber && typeNumber < 10) {\n // 1 - 9\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 10;\n case Mode.MODE_ALPHA_NUM:\n return 9;\n case Mode.MODE_8BIT_BYTE:\n return 8;\n case Mode.MODE_KANJI:\n return 8;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 27) {\n // 10 - 26\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 12;\n case Mode.MODE_ALPHA_NUM:\n return 11;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 10;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 41) {\n // 27 - 40\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 14;\n case Mode.MODE_ALPHA_NUM:\n return 13;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 12;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else {\n throw new Error('typeNumber:' + typeNumber);\n }\n }\n}\n//# sourceMappingURL=QRData.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QR8BitByte\n *\n * @author Kazuhiko Arase\n */\nexport class QR8BitByte extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_8BIT_BYTE, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n data.forEach(val => buffer.put(val, 8));\n }\n getLength() {\n return this.stringToBytes(this.getData()).length;\n }\n}\n//# sourceMappingURL=QR8BitByte.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRAlphaNum\n *\n * @author Kazuhiko Arase\n */\nexport class QRAlphaNum extends QRData {\n constructor(data) {\n super(Mode.MODE_ALPHA_NUM, data);\n }\n write(buffer) {\n const s = this.getData();\n let i = 0;\n while (i + 1 < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)) * 45 + QRAlphaNum.getCode(s.charAt(i + 1)), 11);\n i += 2;\n }\n if (i < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)), 6);\n }\n }\n getLength() {\n return this.getData().length;\n }\n static getCode(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n }\n else {\n switch (c) {\n case ' ':\n return 36;\n case '$':\n return 37;\n case '%':\n return 38;\n case '*':\n return 39;\n case '+':\n return 40;\n case '-':\n return 41;\n case '.':\n return 42;\n case '/':\n return 43;\n case ':':\n return 44;\n default:\n throw new Error('illegal char :' + c);\n }\n }\n }\n}\n//# sourceMappingURL=QRAlphaNum.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRKanji(SJIS only)\n *\n * @author Kazuhiko Arase\n */\nexport class QRKanji extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_KANJI, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n let i = 0;\n while (i + 1 < data.length) {\n let c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);\n if (0x8140 <= c && c <= 0x9ffc) {\n c -= 0x8140;\n }\n else if (0xe040 <= c && c <= 0xebbf) {\n c -= 0xc140;\n }\n else {\n throw new Error('illegal char at ' + (i + 1) + '/' + c);\n }\n c = ((c >>> 8) & 0xff) * 0xc0 + (c & 0xff);\n buffer.put(c, 13);\n i += 2;\n }\n if (i < data.length) {\n throw new Error('illegal char at ' + (i + 1));\n }\n }\n getLength() {\n return this.stringToBytes(this.getData()).length / 2;\n }\n}\n//# sourceMappingURL=QRKanji.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRNumber\n *\n * @author Kazuhiko Arase\n */\nexport class QRNumber extends QRData {\n constructor(data) {\n super(Mode.MODE_NUMBER, data);\n }\n write(buffer) {\n const data = this.getData();\n let i = 0;\n while (i + 2 < data.length) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 3)), 10);\n i += 3;\n }\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 1)), 4);\n }\n else if (data.length - i == 2) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 2)), 7);\n }\n }\n }\n getLength() {\n return this.getData().length;\n }\n static strToNum(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + QRNumber.chatToNum(s.charAt(i));\n }\n return num;\n }\n static chatToNum(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw new Error('illegal char :' + c);\n }\n}\n//# sourceMappingURL=QRNumber.js.map","/**\n * MaskPattern\n *\n * @author Kazuhiko Arase\n */\nexport var MaskPattern;\n(function (MaskPattern) {\n /**\n * mask pattern 000\n */\n MaskPattern[MaskPattern[\"PATTERN000\"] = 0] = \"PATTERN000\";\n /**\n * mask pattern 001\n */\n MaskPattern[MaskPattern[\"PATTERN001\"] = 1] = \"PATTERN001\";\n /**\n * mask pattern 010\n */\n MaskPattern[MaskPattern[\"PATTERN010\"] = 2] = \"PATTERN010\";\n /**\n * mask pattern 011\n */\n MaskPattern[MaskPattern[\"PATTERN011\"] = 3] = \"PATTERN011\";\n /**\n * mask pattern 100\n */\n MaskPattern[MaskPattern[\"PATTERN100\"] = 4] = \"PATTERN100\";\n /**\n * mask pattern 101\n */\n MaskPattern[MaskPattern[\"PATTERN101\"] = 5] = \"PATTERN101\";\n /**\n * mask pattern 110\n */\n MaskPattern[MaskPattern[\"PATTERN110\"] = 6] = \"PATTERN110\";\n /**\n * mask pattern 111\n */\n MaskPattern[MaskPattern[\"PATTERN111\"] = 7] = \"PATTERN111\";\n})(MaskPattern || (MaskPattern = {}));\n//# sourceMappingURL=MaskPattern.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { MaskPattern } from './MaskPattern.js';\nimport { Mode } from './Mode.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QRMath } from './QRMath.js';\n/**\n * QRUtil\n *\n * @author Kazuhiko Arase\n */\nexport class QRUtil {\n constructor() {\n throw new Error('error');\n }\n static getPatternPosition(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n }\n static PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n static MAX_LENGTH = [\n [\n [41, 25, 17, 10],\n [34, 20, 14, 8],\n [27, 16, 11, 7],\n [17, 10, 7, 4]\n ],\n [\n [77, 47, 32, 20],\n [63, 38, 26, 16],\n [48, 29, 20, 12],\n [34, 20, 14, 8]\n ],\n [\n [127, 77, 53, 32],\n [101, 61, 42, 26],\n [77, 47, 32, 20],\n [58, 35, 24, 15]\n ],\n [\n [187, 114, 78, 48],\n [149, 90, 62, 38],\n [111, 67, 46, 28],\n [82, 50, 34, 21]\n ],\n [\n [255, 154, 106, 65],\n [202, 122, 84, 52],\n [144, 87, 60, 37],\n [106, 64, 44, 27]\n ],\n [\n [322, 195, 134, 82],\n [255, 154, 106, 65],\n [178, 108, 74, 45],\n [139, 84, 58, 36]\n ],\n [\n [370, 224, 154, 95],\n [293, 178, 122, 75],\n [207, 125, 86, 53],\n [154, 93, 64, 39]\n ],\n [\n [461, 279, 192, 118],\n [365, 221, 152, 93],\n [259, 157, 108, 66],\n [202, 122, 84, 52]\n ],\n [\n [552, 335, 230, 141],\n [432, 262, 180, 111],\n [312, 189, 130, 80],\n [235, 143, 98, 60]\n ],\n [\n [652, 395, 271, 167],\n [513, 311, 213, 131],\n [364, 221, 151, 93],\n [288, 174, 119, 74]\n ]\n ];\n static getMaxLength(typeNumber, mode, errorCorrectLevel) {\n const t = typeNumber - 1;\n let e = 0;\n let m = 0;\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n e = 0;\n break;\n case ErrorCorrectLevel.M:\n e = 1;\n break;\n case ErrorCorrectLevel.Q:\n e = 2;\n break;\n case ErrorCorrectLevel.H:\n e = 3;\n break;\n default:\n throw new Error('e:' + errorCorrectLevel);\n }\n switch (mode) {\n case Mode.MODE_NUMBER:\n m = 0;\n break;\n case Mode.MODE_ALPHA_NUM:\n m = 1;\n break;\n case Mode.MODE_8BIT_BYTE:\n m = 2;\n break;\n case Mode.MODE_KANJI:\n m = 3;\n break;\n default:\n throw new Error('m:' + mode);\n }\n return QRUtil.MAX_LENGTH[t][e][m];\n }\n static getErrorCorrectPolynomial(errorCorrectLength) {\n let a = new Polynomial([1]);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(new Polynomial([1, QRMath.gexp(i)]));\n }\n return a;\n }\n static getMaskFunc(maskPattern) {\n switch (maskPattern) {\n case MaskPattern.PATTERN000:\n return (i, j) => (i + j) % 2 == 0;\n case MaskPattern.PATTERN001:\n return (i, _j) => i % 2 == 0;\n case MaskPattern.PATTERN010:\n return (_i, j) => j % 3 == 0;\n case MaskPattern.PATTERN011:\n return (i, j) => (i + j) % 3 == 0;\n case MaskPattern.PATTERN100:\n return (i, j) => (~~(i / 2) + ~~(j / 3)) % 2 == 0;\n case MaskPattern.PATTERN101:\n return (i, j) => ((i * j) % 2) + ((i * j) % 3) == 0;\n case MaskPattern.PATTERN110:\n return (i, j) => (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n case MaskPattern.PATTERN111:\n return (i, j) => (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n default:\n throw new Error('mask:' + maskPattern);\n }\n }\n static getLostPoint(qrCode) {\n const moduleCount = qrCode.getModuleCount();\n let lostPoint = 0;\n // LEVEL1\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n let sameCount = 0;\n const dark = qrCode.isDark(row, col);\n for (let r = -1; r <= 1; r += 1) {\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n for (let c = -1; c <= 1; c += 1) {\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n if (r == 0 && c == 0) {\n continue;\n }\n if (dark == qrCode.isDark(row + r, col + c)) {\n sameCount += 1;\n }\n }\n }\n if (sameCount > 5) {\n lostPoint += 3 + sameCount - 5;\n }\n }\n }\n // LEVEL2\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrCode.isDark(row, col))\n count += 1;\n if (qrCode.isDark(row + 1, col))\n count += 1;\n if (qrCode.isDark(row, col + 1))\n count += 1;\n if (qrCode.isDark(row + 1, col + 1))\n count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n // LEVEL3\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row, col + 1) &&\n qrCode.isDark(row, col + 2) &&\n qrCode.isDark(row, col + 3) &&\n qrCode.isDark(row, col + 4) &&\n !qrCode.isDark(row, col + 5) &&\n qrCode.isDark(row, col + 6)) {\n lostPoint += 40;\n }\n }\n }\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row + 1, col) &&\n qrCode.isDark(row + 2, col) &&\n qrCode.isDark(row + 3, col) &&\n qrCode.isDark(row + 4, col) &&\n !qrCode.isDark(row + 5, col) &&\n qrCode.isDark(row + 6, col)) {\n lostPoint += 40;\n }\n }\n }\n // LEVEL4\n let darkCount = 0;\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrCode.isDark(row, col)) {\n darkCount += 1;\n }\n }\n }\n const ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n return lostPoint;\n }\n static getBCHTypeInfo(data) {\n let d = data << 10;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n }\n return ((data << 10) | d) ^ QRUtil.G15_MASK;\n }\n static getBCHTypeNumber(data) {\n let d = data << 12;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n }\n return (data << 12) | d;\n }\n static G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n static G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n static G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n static getBCHDigit(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n }\n}\n//# sourceMappingURL=QRUtil.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\n/**\n * RSBlock\n *\n * @author Kazuhiko Arase\n */\nexport class RSBlock {\n totalCount;\n dataCount;\n static RS_BLOCK_TABLE = [\n // L\n // M\n // Q\n // H\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n constructor(totalCount, dataCount) {\n this.totalCount = totalCount;\n this.dataCount = dataCount;\n }\n getDataCount() {\n return this.dataCount;\n }\n getTotalCount() {\n return this.totalCount;\n }\n static getRSBlocks(typeNumber, errorCorrectLevel) {\n const rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n const length = rsBlock.length / 3;\n const list = [];\n for (let i = 0; i < length; i += 1) {\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n for (let j = 0; j < count; j += 1) {\n list.push(new RSBlock(totalCount, dataCount));\n }\n }\n return list;\n }\n static getRsBlockTable(typeNumber, errorCorrectLevel) {\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case ErrorCorrectLevel.M:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case ErrorCorrectLevel.Q:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case ErrorCorrectLevel.H:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default:\n break;\n }\n throw new Error('tn:' + typeNumber + '/ecl:' + errorCorrectLevel);\n }\n}\n//# sourceMappingURL=RSBlock.js.map","import { BitBuffer } from './BitBuffer.js';\nimport { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QR8BitByte } from './QR8BitByte.js';\nimport { QRAlphaNum } from './QRAlphaNum.js';\nimport { QRData } from './QRData.js';\nimport { QRKanji } from './QRKanji.js';\nimport { QRNumber } from './QRNumber.js';\nimport { QRUtil } from './QRUtil.js';\nimport { RSBlock } from './RSBlock.js';\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i);\nexport { TypeNumber };\nexport var ErrorCorrectionLevel;\n(function (ErrorCorrectionLevel) {\n ErrorCorrectionLevel[\"L\"] = \"L\";\n ErrorCorrectionLevel[\"M\"] = \"M\";\n ErrorCorrectionLevel[\"Q\"] = \"Q\";\n ErrorCorrectionLevel[\"H\"] = \"H\";\n})(ErrorCorrectionLevel || (ErrorCorrectionLevel = {}));\nexport var Mode;\n(function (Mode) {\n Mode[\"numeric\"] = \"numeric\";\n Mode[\"alphanumeric\"] = \"alphanumeric\";\n /**\n * Default\n */\n Mode[\"byte\"] = \"byte\";\n Mode[\"kanji\"] = \"kanji\";\n Mode[\"unicode\"] = \"unicode\";\n})(Mode || (Mode = {}));\n/**\n * QRCode\n *\n * @author Kazuhiko Arase\n */\nexport class QRCodeMinimal {\n static stringToBytesFuncs = {\n default(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n static PAD0 = 0xec;\n static PAD1 = 0x11;\n typeNumber;\n errorCorrectLevel;\n qrDataList;\n modules = [];\n moduleCount = 0;\n constructor(typeNumber = 0, errorCorrectionLevel = ErrorCorrectionLevel.L) {\n this.typeNumber = typeNumber;\n this.errorCorrectLevel = ErrorCorrectLevel[errorCorrectionLevel];\n this.qrDataList = [];\n }\n getTypeNumber() {\n return this.typeNumber;\n }\n setTypeNumber(typeNumber) {\n this.typeNumber = typeNumber;\n }\n getErrorCorrectLevel() {\n return this.errorCorrectLevel;\n }\n setErrorCorrectLevel(errorCorrectLevel) {\n this.errorCorrectLevel = errorCorrectLevel;\n }\n clearData() {\n this.qrDataList = [];\n }\n addData(qrData, mode = Mode.byte) {\n if (qrData instanceof QRData) {\n this.qrDataList.push(qrData);\n }\n else if (typeof qrData === 'string') {\n switch (mode) {\n case Mode.numeric:\n this.qrDataList.push(new QRNumber(qrData));\n break;\n case Mode.alphanumeric:\n this.qrDataList.push(new QRAlphaNum(qrData));\n break;\n case Mode.byte:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs.default));\n break;\n case Mode.unicode:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs['UTF8']));\n break;\n case Mode.kanji:\n this.qrDataList.push(new QRKanji(qrData, QRCodeMinimal.stringToBytesFuncs['SJIS']));\n break;\n default:\n throw new Error('mode:' + mode);\n }\n }\n else {\n throw new Error(typeof qrData);\n }\n }\n /*private getDataCount(): number {\n return this.qrDataList.length;\n }\n\n private getData(index: number): QRData {\n return this.qrDataList[index];\n }*/\n isDark(row, col) {\n if (this.modules[row][col] != null) {\n return this.modules[row][col];\n }\n else {\n return false;\n }\n }\n getModuleCount() {\n return this.moduleCount;\n }\n make() {\n if (this.typeNumber < 1) {\n let typeNumber = 1;\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n const buffer = new BitBuffer();\n this.qrDataList.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n this.typeNumber = typeNumber;\n }\n this.makeImpl(false, this.getBestMaskPattern());\n }\n getBestMaskPattern() {\n let minLostPoint = 0;\n let pattern = 0;\n for (let i = 0; i < 8; i += 1) {\n this.makeImpl(true, i);\n const lostPoint = QRUtil.getLostPoint(this);\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n return pattern;\n }\n makeImpl(test, maskPattern) {\n // initialize modules\n this.moduleCount = this.typeNumber * 4 + 17;\n this.modules = [];\n for (let i = 0; i < this.moduleCount; i += 1) {\n this.modules.push([]);\n for (let j = 0; j < this.moduleCount; j += 1) {\n this.modules[i].push(null);\n }\n }\n this.setupPositionProbePattern(0, 0);\n this.setupPositionProbePattern(this.moduleCount - 7, 0);\n this.setupPositionProbePattern(0, this.moduleCount - 7);\n this.setupPositionAdjustPattern();\n this.setupTimingPattern();\n this.setupTypeInfo(test, maskPattern);\n if (this.typeNumber >= 7) {\n this.setupTypeNumber(test);\n }\n const data = QRCodeMinimal.createData(this.typeNumber, this.errorCorrectLevel, this.qrDataList);\n this.mapData(data, maskPattern);\n }\n mapData(data, maskPattern) {\n let inc = -1;\n let row = this.moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunc(maskPattern);\n for (let col = this.moduleCount - 1; col > 0; col -= 2) {\n if (col == 6) {\n col -= 1;\n }\n while (true) {\n for (let c = 0; c < 2; c += 1) {\n if (this.modules[row][col - c] == null) {\n let dark = false;\n if (byteIndex < data.length) {\n dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;\n }\n const mask = maskFunc(row, col - c);\n if (mask) {\n dark = !dark;\n }\n this.modules[row][col - c] = dark;\n bitIndex -= 1;\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n row += inc;\n if (row < 0 || this.moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n }\n setupPositionAdjustPattern() {\n const pos = QRUtil.getPatternPosition(this.typeNumber);\n pos.forEach(row => {\n pos.forEach(col => {\n if (this.modules[row][col] != null) {\n return;\n }\n for (let r = -2; r <= 2; r += 1) {\n for (let c = -2; c <= 2; c += 1) {\n if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n });\n });\n }\n setupPositionProbePattern(row, col) {\n for (let r = -1; r <= 7; r += 1) {\n for (let c = -1; c <= 7; c += 1) {\n if (row + r <= -1 || this.moduleCount <= row + r || col + c <= -1 || this.moduleCount <= col + c) {\n continue;\n }\n if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n (2 <= r && r <= 4 && 2 <= c && c <= 4)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n }\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r += 1) {\n if (this.modules[r][6] != null) {\n continue;\n }\n this.modules[r][6] = r % 2 == 0;\n }\n for (let c = 8; c < this.moduleCount - 8; c += 1) {\n if (this.modules[6][c] != null) {\n continue;\n }\n this.modules[6][c] = c % 2 == 0;\n }\n }\n setupTypeNumber(test) {\n const bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n for (let i = 0; i < 18; i += 1) {\n this.modules[~~(i / 3)][(i % 3) + this.moduleCount - 8 - 3] = !test && ((bits >> i) & 1) == 1;\n }\n for (let i = 0; i < 18; i += 1) {\n this.modules[(i % 3) + this.moduleCount - 8 - 3][~~(i / 3)] = !test && ((bits >> i) & 1) == 1;\n }\n }\n setupTypeInfo(test, maskPattern) {\n const data = (this.errorCorrectLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n // vertical\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 6) {\n this.modules[i][8] = mod;\n }\n else if (i < 8) {\n this.modules[i + 1][8] = mod;\n }\n else {\n this.modules[this.moduleCount - 15 + i][8] = mod;\n }\n }\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 8) {\n this.modules[8][this.moduleCount - i - 1] = mod;\n }\n else if (i < 9) {\n this.modules[8][15 - i - 1 + 1] = mod;\n }\n else {\n this.modules[8][15 - i - 1] = mod;\n }\n }\n // fixed\n this.modules[this.moduleCount - 8][8] = !test;\n }\n static createData(typeNumber, errorCorrectLevel, dataArray) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n const buffer = new BitBuffer();\n dataArray.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n // calc max data count\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw new Error('code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')');\n }\n // end\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n // padding\n while (true) {\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD0, 8);\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD1, 8);\n }\n return QRCodeMinimal.createBytes(buffer, rsBlocks);\n }\n static createBytes(buffer, rsBlocks) {\n let offset = 0;\n let maxDcCount = 0;\n let maxEcCount = 0;\n const dcdata = new Array(rsBlocks.length).map(_ => []);\n const ecdata = new Array(rsBlocks.length).map(_ => []);\n function createNumArray(len) {\n const a = [];\n for (let i = 0; i < len; i += 1) {\n a.push(0);\n }\n return a;\n }\n for (let r = 0; r < rsBlocks.length; r += 1) {\n const dcCount = rsBlocks[r].getDataCount();\n const ecCount = rsBlocks[r].getTotalCount() - dcCount;\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n dcdata[r] = createNumArray(dcCount);\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = createNumArray(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;\n }\n }\n const totalCodeCount = rsBlocks.reduce((t, v) => t + v.getTotalCount(), 0);\n const data = createNumArray(totalCodeCount);\n let index = 0;\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n return data;\n }\n}\n//# sourceMappingURL=QRCodeMinimal.js.map","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\r\n !!obj && typeof obj === 'object' && !Array.isArray(obj)\r\n\r\nexport type UnknownObject = {\r\n [key: string]: any\r\n} | undefined\r\n\r\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\r\n if (!sources.length) return target\r\n const source = sources.shift()\r\n if (source === undefined || !isObject(target) || !isObject(source)) return target\r\n target = { ...target }\r\n Object.keys(source).forEach((key: string): void => {\r\n const targetValue = target[key]\r\n const sourceValue = source[key]\r\n\r\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\r\n target[key] = sourceValue\r\n } else if (isObject(targetValue) && isObject(sourceValue)) {\r\n target[key] = mergeDeep({ ...targetValue }, sourceValue)\r\n } else {\r\n target[key] = sourceValue\r\n }\r\n })\r\n\r\n return mergeDeep(target, ...sources)\r\n}\r\n","export enum GradientType {\r\n radial = 'radial',\r\n linear = 'linear'\r\n}\r\n\r\nexport interface Gradient {\r\n /**\r\n * Type of gradient spread\r\n *\r\n * @default GradientType.linear\r\n */\r\n type: `${GradientType}`\r\n /**\r\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\r\n *\r\n * @default 0\r\n */\r\n rotation?: number\r\n /** Gradient colors. */\r\n colorStops: Array<{\r\n /** Position of color in gradient range */\r\n offset: number\r\n /** Color of stop in gradient range */\r\n color: string\r\n }>\r\n}\r\n\r\nexport function sanitizeGradient(gradient: Gradient): Gradient {\r\n const newGradient = { ...gradient }\r\n\r\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\r\n throw new Error(\"Field 'colorStops' is required in gradient\")\r\n }\r\n\r\n if (newGradient.rotation) {\r\n newGradient.rotation = Number(newGradient.rotation)\r\n } else {\r\n newGradient.rotation = 0\r\n }\r\n\r\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number, color: string }) => ({\r\n ...colorStop,\r\n offset: Number(colorStop.offset)\r\n }))\r\n\r\n return newGradient\r\n}\r\n","import { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { DrawArgs } from '../types/helper.js'\r\nimport { Gradient, sanitizeGradient } from './gradient.js'\r\n\r\nexport enum DotType {\r\n dot = 'dot',\r\n randomDot = 'random-dot',\r\n rounded = 'rounded',\r\n extraRounded = 'extra-rounded',\r\n verticalLine = 'vertical-line',\r\n horizontalLine = 'horizontal-line',\r\n classy = 'classy',\r\n classyRounded = 'classy-rounded',\r\n square = 'square',\r\n smallSquare = 'small-square',\r\n tinySquare = 'tiny-square',\r\n diamond = 'diamond',\r\n wave = 'wave',\r\n heart = 'heart',\r\n star = 'star',\r\n weave = 'weave',\r\n pentagon = 'pentagon',\r\n hexagon = 'hexagon',\r\n zebraHorizontal = 'zebra-horizontal',\r\n zebraVertical = 'zebra-vertical',\r\n blocksHorizontal = 'blocks-horizontal',\r\n blocksVertical = 'blocks-vertical'\r\n}\r\n\r\nexport enum CornerDotType {\r\n dot = 'dot',\r\n square = 'square',\r\n heart = 'heart',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n inpoint = 'inpoint',\r\n outpoint = 'outpoint',\r\n star = 'star',\r\n pentagon = 'pentagon',\r\n hexagon = 'hexagon',\r\n diamond = 'diamond'\r\n}\r\n\r\nexport enum CornerSquareType {\r\n dot = 'dot',\r\n square = 'square',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n inpoint = 'inpoint',\r\n outpoint = 'outpoint',\r\n centerCircle = 'center-circle'\r\n}\r\n\r\nexport enum ShapeType {\r\n square = 'square',\r\n circle = 'circle'\r\n}\r\n\r\nexport enum ImageMode {\r\n /**\r\n * Place image in the center of the code\r\n */\r\n center = 'center',\r\n /**\r\n * Place image over the center of the code\r\n */\r\n overlay = 'overlay',\r\n /**\r\n * Use image as background, draw dots over it\r\n */\r\n background = 'background'\r\n}\r\n\r\nexport interface Plugin {\r\n /**\r\n * Draw a single dot\r\n *\r\n * @returns Dot element; if undefined, try to use the next plugin or the default function\r\n */\r\n drawDot?: (args: DrawArgs) => SVGElement | undefined\r\n /**\r\n * Draw corner dot\r\n *\r\n * @returns Corner dot element; if undefined, try to use the next plugin or the default function\r\n */\r\n drawCornerDot?: (args: DrawArgs) => SVGElement | undefined\r\n /**\r\n * Draw corner square\r\n *\r\n * @returns Corner square element and corner mask (used with ImageMode.background); if undefined, try to use the next plugin or the default function\r\n */\r\n drawCornerSquare?: (args: DrawArgs) => readonly [SVGElement, SVGElement] | undefined\r\n /**\r\n * Alter the generated SVG, e.g. add borders\r\n */\r\n postProcess?: (svg: SVGSVGElement, options: Options) => void\r\n}\r\n\r\nexport interface Options {\r\n /** Use a custom DOM domplementation */\r\n document: Document\r\n /** Use a custom image fetching & serializaton implementation */\r\n imageTools?: typeof browserImageTools\r\n /**\r\n * @ignore\r\n * @deprecated kept for compatibility with older extensions, use options.size\r\n */\r\n width: number\r\n /**\r\n * @ignore\r\n * @deprecated kept for compatibility with older extensions, use options.size\r\n */\r\n height: number\r\n /** @ignore */\r\n size: number\r\n /** The data will be encoded in the QR code */\r\n data: string\r\n /** The image will be copied to the center of the QR code */\r\n image?: string | Buffer | Blob\r\n /**\r\n * QR code shape\r\n *\r\n * @default ShapeType.square\r\n */\r\n shape: `${ShapeType}`\r\n /** Options will be passed to `@liquid-js/qrcode-generator` lib */\r\n qrOptions: {\r\n typeNumber: TypeNumber\r\n mode?: `${Mode}`\r\n /** @default ErrorCorrectionLevel.Q */\r\n errorCorrectionLevel: `${ErrorCorrectionLevel}`\r\n }\r\n imageOptions: {\r\n /**\r\n * Image mode\r\n *\r\n * @default ImageMode.center\r\n */\r\n mode: `${ImageMode}`\r\n /**\r\n * Fill blank areas of the code with selected color\r\n */\r\n fill: {\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"rgba(255,255,255,0.75)\"\r\n */\r\n color: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n }\r\n /**\r\n * Coefficient of the image size\r\n *\r\n * @default 0.4\r\n */\r\n imageSize: number\r\n /**\r\n * Margin of the image (in blocks)\r\n *\r\n * @default 0\r\n */\r\n margin: number\r\n /**\r\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\r\n */\r\n crossOrigin?: string\r\n }\r\n dotsOptions: {\r\n /**\r\n * QR dot size (in pixels)\r\n *\r\n * @default 10\r\n */\r\n size: number\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"#000\"\r\n */\r\n color: string\r\n /** Gradient of QR dots */\r\n gradient?: Gradient\r\n /**\r\n * Style of QR dots\r\n *\r\n * @default DotType.square\r\n */\r\n type: `${DotType}`\r\n }\r\n /** Corners Square options, omitted values match dots */\r\n cornersSquareOptions?: {\r\n /** Color of Corners Square */\r\n color?: string\r\n /** Gradient of Corners Square */\r\n gradient?: Gradient\r\n /** Style of Corners Square */\r\n type?: `${CornerSquareType | DotType}`\r\n }\r\n /** Corners Dot options, omitted values match squares */\r\n cornersDotOptions?: {\r\n /** Color of Corners Dot */\r\n color?: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n /** Style of Corners Dot */\r\n type?: `${CornerDotType | DotType}`\r\n }\r\n /** QR background styling options, false to disable background */\r\n backgroundOptions?: {\r\n /** Background roundnes, from 0 (square) to 1 (circle) */\r\n round?: number\r\n /** Background color */\r\n color?: string\r\n /** Background Gradient */\r\n gradient?: Gradient\r\n /**\r\n * Margin (in blocks) between background and the QR code\r\n *\r\n * @default 0\r\n */\r\n margin?: number\r\n } | false\r\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\r\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] }\r\n plugins?: Plugin[]\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n document: undefined as never,\r\n shape: ShapeType.square,\r\n width: undefined as never,\r\n height: undefined as never,\r\n size: undefined as never,\r\n data: '',\r\n qrOptions: {\r\n typeNumber: TypeNumber[0],\r\n mode: undefined,\r\n errorCorrectionLevel: ErrorCorrectionLevel.Q\r\n },\r\n imageOptions: {\r\n mode: ImageMode.center,\r\n imageSize: 0.4,\r\n crossOrigin: undefined,\r\n margin: 0,\r\n fill: {\r\n color: 'rgba(255,255,255,1)'\r\n }\r\n },\r\n dotsOptions: {\r\n type: DotType.square,\r\n color: '#000',\r\n size: 10\r\n }\r\n}\r\n\r\nexport function sanitizeOptions(options: Options): Options {\r\n const newOptions = { ...options }\r\n\r\n newOptions.imageOptions = {\r\n ...newOptions.imageOptions,\r\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\r\n margin: Number(newOptions.imageOptions.margin),\r\n fill: {\r\n ...newOptions.imageOptions.fill\r\n }\r\n }\r\n\r\n if (newOptions.imageOptions.mode == ImageMode.overlay) newOptions.imageOptions.margin = 0\r\n if (newOptions.imageOptions.fill.gradient) {\r\n newOptions.imageOptions.fill.gradient = sanitizeGradient(newOptions.imageOptions.fill.gradient)\r\n }\r\n\r\n newOptions.dotsOptions = {\r\n ...newOptions.dotsOptions\r\n }\r\n if (newOptions.dotsOptions.gradient) {\r\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient)\r\n }\r\n // Ensure integer dot size\r\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10)\r\n\r\n if (newOptions.cornersSquareOptions) {\r\n newOptions.cornersSquareOptions = {\r\n ...newOptions.cornersSquareOptions\r\n }\r\n if (newOptions.cornersSquareOptions.gradient) {\r\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.cornersDotOptions) {\r\n newOptions.cornersDotOptions = {\r\n ...newOptions.cornersDotOptions\r\n }\r\n if (newOptions.cornersDotOptions.gradient) {\r\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.backgroundOptions) {\r\n newOptions.backgroundOptions = {\r\n ...newOptions.backgroundOptions\r\n }\r\n if (newOptions.backgroundOptions.gradient) {\r\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient)\r\n }\r\n }\r\n\r\n if (!newOptions.document) newOptions.document = document\r\n\r\n return newOptions\r\n}\r\n","import { ErrorCorrectionLevel, Mode } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\n\r\nexport const ErrorCorrectionPercents = {\r\n [ErrorCorrectionLevel.L]: 0.07,\r\n [ErrorCorrectionLevel.M]: 0.15,\r\n [ErrorCorrectionLevel.Q]: 0.25,\r\n [ErrorCorrectionLevel.H]: 0.3\r\n}\r\n\r\nexport function getMode(data: string): Mode {\r\n switch (true) {\r\n case /^[0-9]*$/.test(data):\r\n return Mode.numeric\r\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\r\n return Mode.alphanumeric\r\n\r\n case /[^\\u0000-\\u00ff]/.test(data):\r\n return Mode.unicode\r\n default:\r\n return Mode.byte\r\n }\r\n}\r\n","import { BasicFigureDrawArgs } from '../types/helper.js'\r\nimport { numToAttr, scalePath, svgPath } from '../utils/svg.js'\r\n\r\nexport const DotElements = {\r\n dot: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n element.setAttribute('cx', numToAttr(x + size / 2))\r\n element.setAttribute('cy', numToAttr(y + size / 2))\r\n element.setAttribute('r', numToAttr(size / 2))\r\n\r\n return element\r\n },\r\n square: (args: BasicFigureDrawArgs, { width = args.size, height = args.size } = {}): SVGElement => {\r\n const { x, y, size, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n element.setAttribute('x', numToAttr(x + (size - width) / 2))\r\n element.setAttribute('y', numToAttr(y + (size - height) / 2))\r\n element.setAttribute('width', numToAttr(width))\r\n element.setAttribute('height', numToAttr(height))\r\n\r\n return element\r\n },\r\n //if rotation === 0 - right side is rounded\r\n sideRounded: (args: BasicFigureDrawArgs, { height = args.size } = {}): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + (size - height) / 2}\r\n v ${height}\r\n h ${size / 2}\r\n a ${height / 2} ${height / 2} 0 0 0 0 ${-height}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - top right corner is rounded\r\n cornerRounded: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2} 0 0 0 ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - top right corner is rounded\r\n cornerExtraRounded: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n a ${size} ${size} 0 0 0 ${-size} ${-size}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - bottom left and top right corners are rounded\r\n classyDot: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size / 2}\r\n a ${size / 2} ${size / 2} 0 0 0 ${size / 2} ${size / 2}\r\n h ${size / 2}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2} 0 0 0 ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - top right corner is rounded\r\n wave: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const a1 = 5 * Math.PI / 180\r\n const a2 = 65 * Math.PI / 180\r\n const s1 = 0.95\r\n const s2 = 0.65\r\n\r\n const c23x = size * (1 - s2 * Math.sin(a1))\r\n const c23y = -size * (s1 - s2 * Math.cos(a1))\r\n\r\n const c31x = -size * Math.sin(a2) / 2\r\n const c31y = size * Math.cos(a2) / 2\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + size}\r\n c ${size * s2} 0 ${c23x} ${c23y} ${size} ${-size * s1}\r\n c ${c31x} ${c31y} ${-size / 2} ${size * (s1 - 1)} ${-size} ${size * (s1 - 1)} \r\n z`\r\n )\r\n\r\n return element\r\n },\r\n heart: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n scalePath([\r\n 'M',\r\n 1,\r\n 0.31629,\r\n 'c',\r\n -0.00086,\r\n 0.15702,\r\n -0.10534,\r\n 0.26323,\r\n -0.21876,\r\n 0.38123,\r\n 'c',\r\n -0.06736,\r\n 0.06834,\r\n -0.18938,\r\n 0.17948,\r\n -0.28124,\r\n 0.26126,\r\n 'c',\r\n -0.09188,\r\n -0.08178,\r\n -0.2139,\r\n -0.19292,\r\n -0.28124,\r\n -0.26126,\r\n 'c',\r\n -0.11344,\r\n -0.118,\r\n -0.2179,\r\n -0.22422,\r\n -0.21876,\r\n -0.38123,\r\n 'c',\r\n -0.00096,\r\n -0.27136,\r\n 0.33154,\r\n -0.36842,\r\n 0.5,\r\n -0.17,\r\n 'c',\r\n 0.16844,\r\n -0.19842,\r\n 0.50094,\r\n -0.10136,\r\n 0.5,\r\n 0.17,\r\n 'z'\r\n ], { x, y, size })\r\n )\r\n\r\n return element\r\n },\r\n rounded: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n element.setAttribute('x', numToAttr(x))\r\n element.setAttribute('y', numToAttr(y))\r\n element.setAttribute('width', numToAttr(size))\r\n element.setAttribute('height', numToAttr(size))\r\n element.setAttribute('rx', numToAttr(size / 4))\r\n element.setAttribute('ry', numToAttr(size / 4))\r\n\r\n return element\r\n },\r\n classy: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n inpoint: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + size / 2}\r\n v ${size / 4}\r\n a ${size / 4} ${size / 4} 0 0 0 ${size / 4} ${size / 4}\r\n h ${(size / 4) * 3}\r\n v ${(-size / 4) * 3}\r\n a ${size / 4} ${size / 4} 0 0 0 ${-size / 4} ${-size / 4}\r\n h ${-size / 2}\r\n a ${size / 4} ${size / 4} 0 0 0 ${-size / 4} ${size / 4}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n star: (args: BasicFigureDrawArgs, {\r\n spikes = 5,\r\n outerRadius = args.size / 2,\r\n innerRadius = args.size / 4\r\n } = {}): SVGElement => {\r\n const { size, x, y, document } = args\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n const angle = Math.PI / spikes\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n Array(2 * spikes).fill(0).map((_, i) => {\r\n const radius = i % 2 === 0 ? outerRadius : innerRadius\r\n const xPoint = cx + radius * Math.sin(i * angle)\r\n const yPoint = cy - radius * Math.cos(i * angle)\r\n return svgPath`${i === 0 ? 'M' : 'L'} ${xPoint} ${yPoint} `\r\n }).join(' ')\r\n )\r\n\r\n return element\r\n },\r\n weave: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const thickness = size * 0.6\r\n const notch = (size - thickness) / 2\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x + notch} ${y}\r\n l ${thickness} 0\r\n l 0 ${notch}\r\n l ${notch} 0\r\n l 0 ${thickness}\r\n l ${-notch} 0\r\n l 0 ${notch}\r\n l ${-thickness} 0\r\n l 0 ${-notch}\r\n l ${-notch} 0\r\n l 0 ${-thickness}\r\n l ${notch} 0\r\n z`\r\n )\r\n\r\n return element\r\n }\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { CornerDotType, Plugin } from '../utils/options.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { DotElements } from './dot-elements.js'\r\n\r\nconst qrCornerDotFigures: { [type in CornerDotType]: (args: DrawArgs) => SVGElement } = {\r\n [CornerDotType.dot]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.dot\r\n }),\r\n [CornerDotType.square]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.square\r\n }),\r\n [CornerDotType.heart]: args => DotElements.heart(args),\r\n [CornerDotType.extraRounded]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.rounded\r\n }),\r\n [CornerDotType.classy]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.classy\r\n }),\r\n [CornerDotType.inpoint]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.inpoint\r\n }),\r\n [CornerDotType.outpoint]: args => rotateFigure({\r\n ...args,\r\n rotation: (args.rotation || 0) + Math.PI,\r\n draw: DotElements.inpoint\r\n }),\r\n [CornerDotType.star]: args => DotElements.star(args),\r\n [CornerDotType.pentagon]: args => DotElements.star(args, {\r\n spikes: 2.5,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [CornerDotType.hexagon]: args => DotElements.star(args, {\r\n spikes: 3,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [CornerDotType.diamond]: args => rotateFigure({\r\n ...args,\r\n rotation: Math.PI / 4,\r\n draw: args2 => DotElements.square(args2, { width: args2.size * 0.85, height: args2.size * 0.85 })\r\n })\r\n}\r\n\r\nexport function getQrCornerDotFigure(type: `${CornerDotType}`) {\r\n return qrCornerDotFigures[type] || qrCornerDotFigures[CornerDotType.square]\r\n}\r\n\r\nexport function drawPluginCornerDot(plugins: Plugin[]) {\r\n return (args: DrawArgs) => {\r\n for (const plugin of plugins) {\r\n const el = plugin.drawCornerDot?.(args)\r\n if (el)\r\n return el\r\n }\r\n return undefined\r\n }\r\n}\r\n","import { BasicFigureDrawArgs } from '../types/helper.js'\r\nimport { svgPath } from '../utils/svg.js'\r\n\r\nexport const SquareElements = {\r\n dot: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y}\r\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\r\n z\r\n m 0 ${dotSize}\r\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\r\n Z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y - dotSize}\r\n a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n square: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size}\r\n z\r\n M ${x + dotSize} ${y + dotSize}\r\n h ${size - 2 * dotSize}\r\n v ${size - 2 * dotSize}\r\n h ${-size + 2 * dotSize}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x - dotSize} ${y - dotSize}\r\n h ${size + 2 * dotSize}\r\n v ${size + 2 * dotSize}\r\n h ${-size - 2 * dotSize}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n extraRounded: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${-dotSize * 2.5}\r\n v ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${dotSize * 1.5}\r\n h ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x - dotSize} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${dotSize * 3.5} ${dotSize * 3.5}\r\n h ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n h ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${-dotSize * 3.5} ${dotSize * 3.5}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n classy: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-3.5 * dotSize}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-5.5 * dotSize}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n inpoint: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${dotSize * 3.5} ${-dotSize * 3.5}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n centerCircle: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { x, y, size } = args\r\n\r\n const circleRadius = size / 2.5\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n h ${size}\r\n v ${size}\r\n h ${-size}\r\n z\r\n M ${cx - circleRadius} ${cy}\r\n a ${circleRadius} ${circleRadius} 0 1 0 ${circleRadius * 2} 0\r\n a ${circleRadius} ${circleRadius} 0 1 0 ${-circleRadius * 2} 0\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x - dotSize} ${y - dotSize}\r\n h ${size + 2 * dotSize}\r\n v ${size + 2 * dotSize}\r\n h ${-size - 2 * dotSize}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n }\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { CornerSquareType, Plugin } from '../utils/options.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { SquareElements } from './square-elements.js'\r\n\r\nconst qrCornerSquareFigures: { [type in CornerSquareType]: (args: DrawArgs) => readonly [SVGElement, SVGElement] } = {\r\n [CornerSquareType.dot]: args => SquareElements.dot(args),\r\n [CornerSquareType.square]: args => SquareElements.square(args),\r\n [CornerSquareType.extraRounded]: args => SquareElements.extraRounded(args),\r\n [CornerSquareType.classy]: args => rotateFigure({\r\n ...args,\r\n draw: SquareElements.classy\r\n }),\r\n [CornerSquareType.inpoint]: args => rotateFigure({\r\n ...args,\r\n draw: SquareElements.inpoint\r\n }),\r\n [CornerSquareType.outpoint]: ({ rotation, ...args }) => rotateFigure({\r\n ...args,\r\n rotation: (rotation || 0) + Math.PI,\r\n draw: SquareElements.inpoint\r\n }),\r\n [CornerSquareType.centerCircle]: args => SquareElements.centerCircle(args)\r\n}\r\n\r\nexport function getQrCornerSquareFigure(type: `${CornerSquareType}`) {\r\n return qrCornerSquareFigures[type] || qrCornerSquareFigures[CornerSquareType.square]\r\n}\r\n\r\nexport function drawPluginCornerSquare(plugins: Plugin[]) {\r\n return (args: DrawArgs) => {\r\n for (const plugin of plugins) {\r\n const el = plugin.drawCornerSquare?.(args)\r\n if (el)\r\n return el\r\n }\r\n return undefined\r\n }\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { DotElements } from './dot-elements.js'\r\n\r\n/**\r\n * Draw square lines with rounded corners and endpoints\r\n */\r\nexport function roundedCorners({ x, y, size, document, getNeighbor }: DrawArgs, { corner = DotElements.cornerRounded, end = DotElements.sideRounded } = {}) {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n return DotElements.dot({\r\n x, y, size,\r\n document\r\n })\r\n } else if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n } else if (neighborsCount === 2) {\r\n // Rounded corner\r\n let rotation = 0\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: corner\r\n })\r\n } else {\r\n // Endpoint\r\n let rotation = 0\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: end\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Draw square lines with rounded corners and half-rounded endpoints\r\n */\r\nexport function classy({ x, y, size, document, getNeighbor }: DrawArgs, { corner = DotElements.cornerRounded } = {}) {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n return rotateFigure({\r\n x, y, size, rotation: Math.PI / 2,\r\n document,\r\n draw: DotElements.classyDot\r\n })\r\n } else if (!leftNeighbor && !topNeighbor) {\r\n // Top right corner\r\n return rotateFigure({\r\n x, y, size, rotation: -Math.PI / 2,\r\n document,\r\n draw: corner\r\n })\r\n } else if (!rightNeighbor && !bottomNeighbor) {\r\n // Bottom left corner\r\n return rotateFigure({\r\n x, y, size, rotation: Math.PI / 2,\r\n document,\r\n draw: corner\r\n })\r\n }\r\n\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n}\r\n\r\n/**\r\n * Draw stripes with rounded or square endpoints\r\n */\r\nexport function stripes({ x, y, size, document, getNeighbor }: DrawArgs, { stripe = size, rotation = 0, endpoint = DotElements.sideRounded, dot = DotElements.dot } = {}) {\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n if (topNeighbor && bottomNeighbor) {\r\n // Mid-stripe\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: _ => DotElements.square({\r\n x, y, size,\r\n document\r\n }, { width: stripe })\r\n })\r\n } else if (topNeighbor && !bottomNeighbor) {\r\n // Top endpoint\r\n rotation += Math.PI / 2\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: args => endpoint(args, { height: stripe })\r\n })\r\n } else if (bottomNeighbor && !topNeighbor) {\r\n // Bottom endpoint\r\n rotation -= Math.PI / 2\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: args => endpoint(args, { height: stripe })\r\n })\r\n }\r\n\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: _ => dot({\r\n x: x + (size - stripe) / 2,\r\n y: y + (size - stripe) / 2,\r\n size: stripe,\r\n document\r\n })\r\n })\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { DotType, Plugin } from '../utils/options.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { classy, roundedCorners, stripes } from './dot-composition.js'\r\nimport { DotElements } from './dot-elements.js'\r\n\r\nconst qrDotFigures: { [type in DotType]: (args: DrawArgs) => SVGElement } = {\r\n [DotType.dot]: args => DotElements.dot(args),\r\n [DotType.randomDot]: ({ size, x, y, getPRandom, ...args }) => {\r\n const rnd = (getPRandom || Math.random)\r\n const randomFactor = rnd() * (1 - 0.75) + 0.75\r\n\r\n return DotElements.dot({\r\n ...args,\r\n size: size * randomFactor,\r\n x: x + size * rnd() * (1 - randomFactor),\r\n y: y + size * rnd() * (1 - randomFactor)\r\n })\r\n },\r\n [DotType.rounded]: args => roundedCorners(args),\r\n [DotType.extraRounded]: args => roundedCorners(args, { corner: DotElements.cornerExtraRounded }),\r\n [DotType.verticalLine]: args => stripes(args),\r\n [DotType.horizontalLine]: ({ getNeighbor, ...args }) => stripes({\r\n ...args,\r\n getNeighbor: getNeighbor ? (x, y) => getNeighbor(y, x) : undefined\r\n }, { rotation: -Math.PI / 2 }),\r\n [DotType.classy]: args => classy(args),\r\n [DotType.classyRounded]: args => classy(args, { corner: DotElements.cornerExtraRounded }),\r\n [DotType.square]: args => DotElements.square(args),\r\n [DotType.smallSquare]: ({ x, y, size, document }) => {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.7\r\n x = x + originalSize * 0.15\r\n y = y + originalSize * 0.15\r\n\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n },\r\n [DotType.tinySquare]: ({ x, y, size, document }) => {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.3\r\n x = x + originalSize * 0.35\r\n y = y + originalSize * 0.35\r\n\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n },\r\n [DotType.diamond]: args => rotateFigure({\r\n ...args,\r\n rotation: Math.PI / 4,\r\n draw: args2 => DotElements.square(args2, { width: args2.size * 0.85, height: args2.size * 0.85 })\r\n }),\r\n [DotType.wave]: args => roundedCorners(args, {\r\n corner: DotElements.cornerExtraRounded,\r\n end: DotElements.wave\r\n }),\r\n [DotType.heart]: args => DotElements.heart(args),\r\n [DotType.star]: args => DotElements.star(args),\r\n [DotType.weave]: args => DotElements.weave(args),\r\n [DotType.pentagon]: args => DotElements.star(args, {\r\n spikes: 2.5,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [DotType.hexagon]: args => DotElements.star(args, {\r\n spikes: 3,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [DotType.zebraVertical]: args => stripes(args, { stripe: args.size * 0.8 }),\r\n [DotType.zebraHorizontal]: ({ getNeighbor, ...args }) => stripes({\r\n ...args,\r\n getNeighbor: getNeighbor ? (x, y) => getNeighbor(y, x) : undefined\r\n }, { stripe: args.size * 0.8, rotation: -Math.PI / 2 }),\r\n [DotType.blocksVertical]: args => stripes(args, {\r\n stripe: args.size * 0.8,\r\n endpoint: (_args, _params) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const width = args.size * (1 - rnd() * 0.25)\r\n const x = args.x - (args.size - width) / 2\r\n return DotElements.square({ ..._args, x }, { ..._params, width })\r\n },\r\n dot: (_args) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const height = args.size * (1 - rnd() * 0.25)\r\n const y = args.y + (args.size - height) * rnd()\r\n return DotElements.square({ ..._args, y }, { height })\r\n }\r\n }),\r\n [DotType.blocksHorizontal]: ({ getNeighbor, ...args }) => stripes({\r\n ...args,\r\n getNeighbor: getNeighbor ? (x, y) => getNeighbor(y, x) : undefined\r\n }, {\r\n stripe: args.size * 0.8,\r\n rotation: -Math.PI / 2,\r\n endpoint: (_args, _params) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const width = args.size * (1 - rnd() * 0.25)\r\n const x = args.x - (args.size - width) / 2\r\n return DotElements.square({ ..._args, x }, { ..._params, width })\r\n },\r\n dot: (_args) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const height = args.size * (1 - rnd() * 0.25)\r\n const y = args.y + (args.size - height) * rnd()\r\n return DotElements.square({ ..._args, y }, { height })\r\n }\r\n })\r\n}\r\n\r\nexport function getQrDotFigure(type: `${DotType}`, plugins?: Plugin[]) {\r\n const defaultDraw = qrDotFigures[type] || qrDotFigures[DotType.square]\r\n if (!plugins?.length)\r\n return defaultDraw\r\n\r\n const drawPlugin = drawPluginDot(plugins)\r\n return (args: DrawArgs) => drawPlugin(args) || defaultDraw(args)\r\n}\r\n\r\nexport function drawPluginDot(plugins: Plugin[]) {\r\n return (args: DrawArgs) => {\r\n for (const plugin of plugins) {\r\n const el = plugin.drawDot?.(args)\r\n if (el)\r\n return el\r\n }\r\n return undefined\r\n }\r\n}\r\n","export const browserImageTools = {\r\n toDataURL: (url: string | Buffer | Blob): Promise<string> => {\r\n if (typeof url == 'string' && url.startsWith('data:')) return Promise.resolve(url)\r\n return new Promise((resolve, reject) => {\r\n if (typeof url == 'string') {\r\n const xhr = new XMLHttpRequest()\r\n xhr.onload = () => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(xhr.response)\r\n }\r\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject\r\n xhr.open('GET', url, true)\r\n xhr.responseType = 'blob'\r\n xhr.send()\r\n } else {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(url as Blob)\r\n }\r\n })\r\n },\r\n getSize: (src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number, height: number }> => new Promise((resolve, reject) => {\r\n const image = new Image()\r\n\r\n if (crossOrigin === 'string') {\r\n image.crossOrigin = crossOrigin\r\n }\r\n\r\n image.onload = (): void => {\r\n resolve({ width: image.width, height: image.height })\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n if (typeof src == 'string') image.src = src\r\n else\r\n browserImageTools\r\n .toDataURL(src)\r\n .then((url) => (image.src = url))\r\n .catch(reject)\r\n })\r\n}\r\n","export function parseColor(cstr: string) {\r\n let m: RegExpExecArray | null\r\n let parts: string[] | number[] = []\r\n let alpha = 1\r\n\r\n cstr = cstr.toLowerCase()\r\n\r\n if (cstr[0] === '#') {\r\n const base = cstr.slice(1)\r\n const size = base.length\r\n const isShort = size <= 4\r\n\r\n if (isShort) {\r\n parts = [parseInt(base[0] + base[0], 16), parseInt(base[1] + base[1], 16), parseInt(base[2] + base[2], 16)]\r\n if (size === 4) {\r\n alpha = parseInt(base[3] + base[3], 16) / 255\r\n }\r\n } else {\r\n parts = [parseInt(base[0] + base[1], 16), parseInt(base[2] + base[3], 16), parseInt(base[4] + base[5], 16)]\r\n if (size === 8) {\r\n alpha = parseInt(base[6] + base[7], 16) / 255\r\n }\r\n }\r\n\r\n if (!parts[0]) parts[0] = 0\r\n if (!parts[1]) parts[1] = 0\r\n if (!parts[2]) parts[2] = 0\r\n } else if ((m = /^((?:rgba?))\\s*\\(([^)]*)\\)/.exec(cstr))) {\r\n const dims = 3\r\n parts = m[2].trim().split(/\\s*[,/]\\s*|\\s+/)\r\n\r\n parts = parts.map((x, i) => {\r\n if (x[x.length - 1] === '%') {\r\n const v = parseFloat(x) / 100\r\n if (i === 3) return v\r\n return v * 255\r\n }\r\n\r\n if (x === 'none') return 0\r\n return parseFloat(x)\r\n })\r\n\r\n alpha = parts.length > dims ? parts.pop()! : 1\r\n } else {\r\n return {\r\n value: cstr,\r\n alpha\r\n }\r\n }\r\n\r\n const value = '#' + parts.map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, '0')).join('')\r\n return {\r\n value,\r\n alpha: Math.max(0, Math.min(1, alpha))\r\n }\r\n}\r\n","export function getRng(matrix: Array<Array<boolean | number | undefined>>, i: number, j: number, match: number | boolean = true) {\r\n let seed: number | undefined\r\n return () => {\r\n if (seed == undefined) {\r\n seed = 0\r\n let ix = 0\r\n for (let xOffset = -3; xOffset < 4; xOffset++)\r\n for (let yOffset = -3; yOffset < 4; yOffset++) {\r\n ix++\r\n seed |= Number(matrix[((i + xOffset + matrix.length) << yOffset) % matrix.length]?.[((j + yOffset + matrix.length) << xOffset) % matrix.length] === match) << ix\r\n }\r\n }\r\n let t = seed += 0x6D2B79F5\r\n t = Math.imul(t ^ t >>> 15, t | 1)\r\n t ^= t + Math.imul(t ^ t >>> 7, t | 61)\r\n return ((t ^ t >>> 14) >>> 0) / 4294967296\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { QRUtil } from '@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js'\r\nimport { drawPluginCornerDot, getQrCornerDotFigure } from '../figures/corner-dot.js'\r\nimport { drawPluginCornerSquare, getQrCornerSquareFigure } from '../figures/corner-square.js'\r\nimport { getQrDotFigure } from '../figures/dot.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { parseColor } from '../utils/color.js'\r\nimport { Gradient, GradientType } from '../utils/gradient.js'\r\nimport { calculateImageSize } from '../utils/image.js'\r\nimport { CornerDotType, CornerSquareType, DotType, ImageMode, Options, ShapeType } from '../utils/options.js'\r\nimport { numToAttr } from '../utils/svg.js'\r\nimport { DrawArgs } from '../types/helper.js'\r\nimport { getRng } from '../utils/random.js'\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n]\r\n\r\nconst cornerSquareTypes = new Set<string>(Object.values(CornerSquareType))\r\nfunction isCornerSquareType(val?: string): val is `${CornerSquareType}` {\r\n return !!(val && cornerSquareTypes.has(val))\r\n}\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n]\r\n\r\nconst cornerDotTypes = new Set<string>(Object.values(CornerDotType))\r\nfunction isCornerDotType(val?: string): val is `${CornerDotType}` {\r\n return !!(val && cornerDotTypes.has(val))\r\n}\r\n\r\nexport class QRSVG {\r\n private _element: SVGSVGElement\r\n private _fakeMatrix?: Array<Array<boolean | undefined>>\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n private defs: SVGElement\r\n\r\n private backgroundMask?: SVGElement\r\n private backgroundMaskGroup?: SVGElement\r\n\r\n private dotsMask?: SVGElement\r\n private dotsMaskGroup?: SVGElement\r\n\r\n private lightDotsMask?: SVGElement\r\n private lightDotsMaskGroup?: SVGElement\r\n\r\n private qr?: QRCodeMinimal\r\n private document: Document\r\n private imageTools: typeof browserImageTools\r\n\r\n constructor(\r\n private options: Pick<\r\n Options,\r\n | 'width'\r\n | 'height'\r\n | 'size'\r\n | 'document'\r\n | 'imageTools'\r\n | 'image'\r\n | 'imageOptions'\r\n | 'dotsOptions'\r\n | 'cornersDotOptions'\r\n | 'cornersSquareOptions'\r\n | 'backgroundOptions'\r\n | 'shape'\r\n | 'plugins'\r\n > & { errorCorrectionPercent: number }\r\n ) {\r\n this.document = options.document\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'svg')\r\n const size = numToAttr(options.size)\r\n this._element.setAttribute('width', size)\r\n this._element.setAttribute('height', size)\r\n this._element.setAttribute('viewBox', `0 0 ${size} ${size}`)\r\n this.defs = this.document.createElementNS('http://www.w3.org/2000/svg', 'defs')\r\n this._element.appendChild(this.defs)\r\n this.imageTools = options.imageTools || browserImageTools\r\n }\r\n\r\n get width(): number {\r\n return this.options.size\r\n }\r\n\r\n get height(): number {\r\n return this.options.size\r\n }\r\n\r\n async drawQR(qr: QRCodeMinimal): Promise<void> {\r\n const count = qr.getModuleCount()\r\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10)\r\n const dotSize = this.options.dotsOptions.size\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n }\r\n\r\n this.qr = qr\r\n\r\n if (this.options.image) {\r\n //We need it to get image size\r\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin)\r\n const { imageOptions, errorCorrectionPercent } = this.options\r\n\r\n if (imageOptions.mode == ImageMode.background) {\r\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n const maxSize = (this.options.size - 2 * margin * dotSize) * imageOptions.imageSize\r\n let { width, height } = size\r\n\r\n height = (height / width) * maxSize\r\n width = maxSize\r\n\r\n if (height > maxSize) {\r\n width = (width / height) * maxSize\r\n height = maxSize\r\n }\r\n\r\n drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width,\r\n height\r\n }\r\n } else {\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent\r\n const alignment = QRUtil.getPatternPosition(typeNumber)\r\n const maxHiddenDots = Math.floor(\r\n coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment.length ** 2 * 25)\r\n )\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: size.width,\r\n originalHeight: size.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize,\r\n margin: imageOptions.margin\r\n })\r\n }\r\n }\r\n\r\n this.drawBackground()\r\n\r\n if (\r\n this.options.imageOptions.mode != ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this.options.imageOptions.mode == ImageMode.center) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false\r\n }\r\n }\r\n\r\n if ((i < 8 && j < 8) || (i >= count - 8 && j < 8) || (j >= count - 8 && i < 8)) return false\r\n\r\n return true\r\n })\r\n\r\n if (\r\n this.options.imageOptions.mode == ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawCorners()\r\n }\r\n\r\n drawBackground(): void {\r\n const options = this.options\r\n\r\n if (this._element && options.backgroundOptions) {\r\n const gradientOptions = options.backgroundOptions.gradient\r\n const color = options.backgroundOptions.color\r\n\r\n this.createColor({\r\n options: gradientOptions,\r\n color,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n height: options.size,\r\n width: options.size,\r\n name: 'background-color'\r\n })\r\n\r\n const element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect');\r\n [this.backgroundMask, this.backgroundMaskGroup] = this.createMask('mask-background-color')\r\n this.defs.appendChild(this.backgroundMask)\r\n\r\n element.setAttribute('x', numToAttr(0))\r\n element.setAttribute('y', numToAttr(0))\r\n element.setAttribute('width', numToAttr(options.size))\r\n element.setAttribute('height', numToAttr(options.size))\r\n element.setAttribute('rx', numToAttr((options.size / 2) * (options.backgroundOptions.round || 0)))\r\n\r\n this.backgroundMaskGroup.appendChild(element)\r\n }\r\n }\r\n\r\n drawDots(filter?: (i: number, j: number) => boolean): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const options = this.options\r\n const count = this.qr.getModuleCount()\r\n\r\n if (count > options.size) {\r\n throw new Error('The canvas is too small')\r\n }\r\n\r\n const dotSize = this.options.dotsOptions.size\r\n if (options.imageOptions.mode == ImageMode.background) options.size -= 2 * dotSize * (options.imageOptions.margin || 0)\r\n const beginning = Math.floor((options.size - count * dotSize) / 2)\r\n let draw = getQrDotFigure(options.dotsOptions.type, options.plugins);\r\n\r\n [this.dotsMask, this.dotsMaskGroup] = this.createMask('mask-dot-color')\r\n this.defs.appendChild(this.dotsMask)\r\n\r\n if (options.imageOptions.mode == ImageMode.background) {\r\n [this.lightDotsMask, this.lightDotsMaskGroup] = this.createMask('mask-light-dot-color')\r\n this.defs.appendChild(this.lightDotsMask)\r\n }\r\n\r\n let margin = 0\r\n let additionalDots = 0\r\n let fakeCount = count\r\n\r\n if (options.shape === ShapeType.circle) {\r\n margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n additionalDots = Math.floor((options.size / dotSize - count - 2 * margin) / 2)\r\n fakeCount = count + additionalDots * 2\r\n } else if (options.imageOptions.mode == ImageMode.background) {\r\n additionalDots = 1\r\n fakeCount = count + additionalDots * 2\r\n }\r\n\r\n const fakeBeginning = beginning - additionalDots * dotSize\r\n const colorCount = count + additionalDots * 2\r\n this._fakeMatrix = new Array(fakeCount)\r\n const center = Math.floor(fakeCount / 2)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n this._fakeMatrix[i] = new Array(fakeCount)\r\n for (let j = 0; j < fakeCount; j++) {\r\n if (\r\n i > additionalDots - 1 &&\r\n i < fakeCount - additionalDots &&\r\n j > additionalDots - 1 &&\r\n j < fakeCount - additionalDots\r\n ) {\r\n const ii = i - additionalDots\r\n const jj = j - additionalDots\r\n if (filter && !filter(ii, jj)) this._fakeMatrix[i][j] = undefined\r\n else this._fakeMatrix[i][j] = !!this.qr.isDark(jj, ii)\r\n continue\r\n }\r\n\r\n if (\r\n options.shape === ShapeType.circle &&\r\n Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center\r\n ) {\r\n this._fakeMatrix[i][j] = undefined\r\n continue\r\n }\r\n\r\n if (\r\n i == additionalDots - 1 ||\r\n i == fakeCount - additionalDots ||\r\n j == additionalDots - 1 ||\r\n j == fakeCount - additionalDots\r\n ) {\r\n if (\r\n (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount - additionalDots - 9)) ||\r\n (j == fakeCount - additionalDots && i < additionalDots + 8) ||\r\n (i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount - additionalDots - 9)) ||\r\n (i == fakeCount - additionalDots && j < additionalDots + 8)\r\n )\r\n this._fakeMatrix[i][j] = undefined\r\n else this._fakeMatrix[i][j] = false\r\n continue\r\n }\r\n\r\n // Get random dots from QR code to show it outside of QR code\r\n this._fakeMatrix[i][j] = this.qr.isDark(\r\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\r\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\r\n )\r\n }\r\n }\r\n\r\n const typeNr = (count - 17) / 4\r\n const alignment = QRUtil.getPatternPosition(typeNr)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n const iAlign = alignment.find((v) => i - additionalDots > v - 3 && i - additionalDots < v + 3)\r\n for (let j = 0; j < fakeCount; j++) {\r\n const jAlign = alignment.find((v) => j - additionalDots > v - 3 && j - additionalDots < v + 3)\r\n if (this._fakeMatrix[i][j] == undefined) continue\r\n\r\n if (this.lightDotsMask) {\r\n draw =\r\n iAlign &&\r\n jAlign &&\r\n ((iAlign != alignment[0] && jAlign != alignment[0]) ||\r\n (jAlign != alignment[0] && jAlign != alignment[alignment.length - 1]) ||\r\n (iAlign != alignment[0] && iAlign != alignment[alignment.length - 1]))\r\n ? getQrDotFigure(DotType.square)\r\n : getQrDotFigure(DotType.tinySquare)\r\n }\r\n\r\n if (!this._fakeMatrix[i][j]) {\r\n if (this.lightDotsMask) {\r\n if (this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(draw({\r\n x: fakeBeginning + i * dotSize,\r\n y: fakeBeginning + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => this._fakeMatrix![i + xOffset]?.[j + yOffset] === false,\r\n getPRandom: getRng(this._fakeMatrix, i, j, false)\r\n }))\r\n }\r\n }\r\n continue\r\n }\r\n\r\n if (this.dotsMaskGroup) {\r\n this.dotsMaskGroup.appendChild(draw({\r\n x: fakeBeginning + i * dotSize,\r\n y: fakeBeginning + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => this._fakeMatrix![i + xOffset]?.[j + yOffset] === true,\r\n getPRandom: getRng(this._fakeMatrix, i, j)\r\n }))\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask) {\r\n this.createColor({\r\n options: options.imageOptions.fill.gradient,\r\n color: options.imageOptions.fill.color,\r\n additionalRotation: 0,\r\n x: fakeBeginning,\r\n y: fakeBeginning,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'light-dot-color'\r\n })\r\n }\r\n\r\n this.createColor({\r\n options: options.dotsOptions?.gradient,\r\n color: options.dotsOptions.color,\r\n additionalRotation: 0,\r\n x: fakeBeginning,\r\n y: fakeBeginning,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'dot-color'\r\n })\r\n }\r\n\r\n drawCorners(): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const element = this._element\r\n const options = this.options\r\n\r\n if (!element) {\r\n throw new Error('Element code is not defined')\r\n }\r\n\r\n const count = this.qr.getModuleCount()\r\n const dotSize = this.options.dotsOptions.size\r\n const cornersSquareSize = dotSize * 7\r\n const cornersDotSize = dotSize * 3\r\n const beginning = Math.floor((options.size - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n const x = beginning + column * dotSize * (count - 7)\r\n const y = beginning + row * dotSize * (count - 7)\r\n let cornersSquareMask = this.dotsMask\r\n let cornersSquareMaskGroup = this.dotsMaskGroup\r\n let cornersDotMask = this.dotsMask\r\n let cornersDotMaskGroup = this.dotsMaskGroup\r\n\r\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\r\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`)\r\n this.defs.appendChild(cornersSquareMask)\r\n cornersDotMask = cornersSquareMask\r\n cornersDotMaskGroup = cornersSquareMaskGroup\r\n\r\n this.createColor({\r\n options: options.cornersSquareOptions?.gradient,\r\n color: options.cornersSquareOptions?.color,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n height: cornersSquareSize,\r\n width: cornersSquareSize,\r\n name: `corners-square-color-${column}-${row}`\r\n })\r\n }\r\n\r\n const squareArgs: DrawArgs = {\r\n x,\r\n y,\r\n size: cornersSquareSize,\r\n document: this.options.document,\r\n rotation\r\n }\r\n const pluinCornerSquare = options.plugins?.length ? drawPluginCornerSquare(options.plugins)(squareArgs) : undefined\r\n\r\n if (pluinCornerSquare) {\r\n const [cornerElement, cornerFill] = pluinCornerSquare\r\n\r\n if (cornersSquareMaskGroup) {\r\n cornersSquareMaskGroup.appendChild(cornerElement)\r\n }\r\n\r\n if (this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(cornerFill)\r\n }\r\n } else if (isCornerSquareType(options.cornersSquareOptions?.type)) {\r\n const draw = getQrCornerSquareFigure(options.cornersSquareOptions.type)\r\n\r\n const [cornerElement, cornerFill] = draw(squareArgs)\r\n\r\n if (cornersSquareMaskGroup) {\r\n cornersSquareMaskGroup.appendChild(cornerElement)\r\n }\r\n\r\n if (this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(cornerFill)\r\n }\r\n } else {\r\n const draw = getQrDotFigure(options.cornersSquareOptions?.type || options.dotsOptions.type, options.plugins)\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n if (this.lightDotsMask && !dotMask[i]?.[j]) {\r\n if (this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean =>\r\n !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset],\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n continue\r\n }\r\n\r\n if (cornersSquareMaskGroup) {\r\n cornersSquareMaskGroup.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset],\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask)\r\n for (let i = -1; i < 8; i++) {\r\n for (let j = -1; j < 8; j++) {\r\n if (i == -1 || i == 7 || j == -1 || j == 7) {\r\n if (this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\r\n const ii = i + xOffset\r\n const jj = j + yOffset\r\n return ii >= -1 && ii <= 7 && jj >= -1 && jj <= 7 && (ii == -1 || ii == 7 || jj == -1 || jj == 7)\r\n },\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\r\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`)\r\n this.defs.appendChild(cornersDotMask)\r\n\r\n this.createColor({\r\n options: options.cornersDotOptions?.gradient,\r\n color: options.cornersDotOptions?.color,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n height: cornersDotSize,\r\n width: cornersDotSize,\r\n name: `corners-dot-color-${column}-${row}`\r\n })\r\n }\r\n\r\n const dotArgs: DrawArgs = {\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n size: cornersDotSize,\r\n document: this.document,\r\n rotation\r\n }\r\n const pluinCornerDot = options.plugins?.length ? drawPluginCornerDot(options.plugins)(dotArgs) : undefined\r\n\r\n if (pluinCornerDot) {\r\n if (cornersDotMaskGroup) {\r\n cornersDotMaskGroup.appendChild(pluinCornerDot)\r\n }\r\n } else if (isCornerDotType(options.cornersDotOptions?.type)) {\r\n const draw = getQrCornerDotFigure(options.cornersDotOptions.type)\r\n\r\n if (cornersDotMaskGroup) {\r\n cornersDotMaskGroup.appendChild(draw(dotArgs))\r\n }\r\n } else {\r\n const draw = getQrDotFigure(options.cornersDotOptions?.type || options.dotsOptions.type, options.plugins)\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue\r\n }\r\n\r\n if (cornersDotMaskGroup) {\r\n cornersDotMaskGroup.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset],\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n async drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number\r\n height: number\r\n count: number\r\n dotSize: number\r\n }): Promise<void> {\r\n const options = this.options\r\n const beginning = Math.floor((options.size - count * dotSize) / 2)\r\n let margin = options.imageOptions.margin * dotSize\r\n if (options.imageOptions.mode == ImageMode.background) margin = 0\r\n const dx = beginning + margin + (count * dotSize - width) / 2\r\n const dy = beginning + margin + (count * dotSize - height) / 2\r\n const dw = width - margin * 2\r\n const dh = height - margin * 2\r\n\r\n const imageUrl = await this.imageTools.toDataURL(options.image || '')\r\n let image: SVGElement = this.document.createElementNS('http://www.w3.org/2000/svg', 'image')\r\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageUrl || '')\r\n\r\n if (imageUrl.startsWith('data:image/svg+xml;')) {\r\n let data = imageUrl.substring(19)\r\n const i = data.indexOf(',')\r\n const encoding = data.substring(0, i)\r\n data = data.substring(i + 1)\r\n\r\n switch (encoding) {\r\n case 'base64':\r\n data = typeof atob == 'function' ? atob(data) : Buffer.from(data, 'base64').toString('utf8')\r\n break\r\n default:\r\n data = ''\r\n break\r\n }\r\n\r\n if (data) {\r\n const container = new DOMParser().parseFromString(data, 'text/xml')\r\n const rootEl = Array.from(container.getElementsByTagName('svg'))\r\n if (rootEl.length) {\r\n image = rootEl[0]\r\n image.setAttribute('overflow', 'visible')\r\n }\r\n }\r\n }\r\n\r\n image.setAttribute('x', numToAttr(dx))\r\n image.setAttribute('y', numToAttr(dy))\r\n image.setAttribute('width', `${numToAttr(dw)}px`)\r\n image.setAttribute('height', `${numToAttr(dh)}px`)\r\n\r\n this._element.appendChild(image)\r\n }\r\n\r\n private createColor({\r\n options,\r\n color,\r\n additionalRotation,\r\n x,\r\n y,\r\n height,\r\n width,\r\n name\r\n }: {\r\n options?: Gradient\r\n color?: string\r\n additionalRotation: number\r\n x: number\r\n y: number\r\n height: number\r\n width: number\r\n name: string\r\n }): void {\r\n const gradientSize = width > height ? width : height\r\n\r\n x -= this.options.dotsOptions.size\r\n y -= this.options.dotsOptions.size\r\n width += 2 * this.options.dotsOptions.size\r\n height += 2 * this.options.dotsOptions.size\r\n\r\n const rect = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n rect.setAttribute('x', numToAttr(x))\r\n rect.setAttribute('y', numToAttr(y))\r\n rect.setAttribute('height', numToAttr(height))\r\n rect.setAttribute('width', numToAttr(width))\r\n rect.setAttribute('style', `mask:url(#mask-${name})`)\r\n\r\n if (options) {\r\n let gradient: SVGElement\r\n if (options.type === GradientType.radial) {\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('fx', numToAttr(x + width / 2))\r\n gradient.setAttribute('fy', numToAttr(y + height / 2))\r\n gradient.setAttribute('cx', numToAttr(x + width / 2))\r\n gradient.setAttribute('cy', numToAttr(y + height / 2))\r\n gradient.setAttribute('r', numToAttr(gradientSize / 2))\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI)\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI)\r\n let x0 = x + width / 2\r\n let y0 = y + height / 2\r\n let x1 = x + width / 2\r\n let y1 = y + height / 2\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - width / 2\r\n y0 = y0 - (height / 2) * Math.tan(rotation)\r\n x1 = x1 + width / 2\r\n y1 = y1 + (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - height / 2\r\n x0 = x0 - width / 2 / Math.tan(rotation)\r\n y1 = y1 + height / 2\r\n x1 = x1 + width / 2 / Math.tan(rotation)\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + width / 2\r\n y0 = y0 + (height / 2) * Math.tan(rotation)\r\n x1 = x1 - width / 2\r\n y1 = y1 - (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + height / 2\r\n x0 = x0 + width / 2 / Math.tan(rotation)\r\n y1 = y1 - height / 2\r\n x1 = x1 - width / 2 / Math.tan(rotation)\r\n }\r\n\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('x1', numToAttr(x0))\r\n gradient.setAttribute('y1', numToAttr(y0))\r\n gradient.setAttribute('x2', numToAttr(x1))\r\n gradient.setAttribute('y2', numToAttr(y1))\r\n }\r\n\r\n options.colorStops.forEach((stopCfg: { offset: number, color: string }) => {\r\n const stop = this.document.createElementNS('http://www.w3.org/2000/svg', 'stop')\r\n stop.setAttribute('offset', `${numToAttr(100 * stopCfg.offset)}%`)\r\n\r\n const parsed = parseColor(stopCfg.color)\r\n stop.setAttribute('stop-color', parsed.value)\r\n if (parsed.alpha < 1) stop.setAttribute('stop-opacity', parsed.alpha.toFixed(7))\r\n gradient.appendChild(stop)\r\n })\r\n\r\n rect.setAttribute('fill', `url(#${name})`)\r\n this.defs.appendChild(gradient)\r\n } else if (color) {\r\n const parsed = parseColor(color)\r\n rect.setAttribute('fill', parsed.value)\r\n if (parsed.alpha < 1) rect.setAttribute('opacity', parsed.alpha.toFixed(7))\r\n }\r\n\r\n this._element.appendChild(rect)\r\n }\r\n\r\n private createMask(id: string) {\r\n const options = this.options\r\n\r\n const mask = this.document.createElementNS('http://www.w3.org/2000/svg', 'mask')\r\n mask.setAttribute('id', id)\r\n mask.setAttribute('maskUnits', 'userSpaceOnUse')\r\n mask.setAttribute('x', '0')\r\n mask.setAttribute('y', '0')\r\n mask.setAttribute('width', numToAttr(options.size))\r\n mask.setAttribute('height', numToAttr(options.size))\r\n\r\n const group = this.document.createElementNS('http://www.w3.org/2000/svg', 'g')\r\n group.setAttribute('fill', '#fff')\r\n mask.appendChild(group)\r\n\r\n return [mask, group]\r\n }\r\n}\r\n","interface ImageSizeOptions {\r\n originalHeight: number\r\n originalWidth: number\r\n maxHiddenDots: number\r\n maxHiddenAxisDots?: number\r\n dotSize: number\r\n margin: number\r\n}\r\n\r\ninterface ImageSizeResult {\r\n height: number\r\n width: number\r\n hideYDots: number\r\n hideXDots: number\r\n}\r\n\r\nexport function calculateImageSize({\r\n originalHeight,\r\n originalWidth,\r\n maxHiddenDots,\r\n maxHiddenAxisDots,\r\n dotSize,\r\n margin\r\n}: ImageSizeOptions): ImageSizeResult {\r\n const hideDots = { x: 0, y: 0 }\r\n const imageSize = { x: 0, y: 0 }\r\n\r\n if (\r\n originalHeight <= 0 ||\r\n originalWidth <= 0 ||\r\n maxHiddenDots <= 0 ||\r\n dotSize <= 0 ||\r\n 4 * margin ** 2 > maxHiddenDots\r\n ) {\r\n return {\r\n height: 0,\r\n width: 0,\r\n hideYDots: 0,\r\n hideXDots: 0\r\n }\r\n }\r\n\r\n //If set, ensure maxHiddenAxisDots is odd and at least 1\r\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1)\r\n\r\n //Determine the bigger and smaller image dimension\r\n const dimMax = Math.max(originalWidth, originalHeight)\r\n const dimMin = Math.min(originalWidth, originalHeight)\r\n\r\n //Find max image size along the bigger dimension\r\n let lower = 0\r\n let upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin\r\n do {\r\n const newSize = lower + (upper - lower) / 2\r\n let dotsMax = Math.max(1, Math.ceil(newSize + 2 * margin))\r\n if (dotsMax % 2 == 0) dotsMax++\r\n let dotsMin = Math.max(1, Math.ceil((newSize * dimMin) / dimMax + 2 * margin))\r\n if (dotsMin % 2 == 0) dotsMin++\r\n\r\n if (dotsMax * dotsMin > maxHiddenDots) upper = newSize\r\n else lower = newSize\r\n } while (Math.abs(lower - upper) > 0.001)\r\n\r\n //Calculate how many dots the given size corresponds to\r\n const size = lower\r\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin))\r\n if (hideMax % 2 == 0) hideMax++\r\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin))\r\n if (hideMin % 2 == 0) hideMin++\r\n\r\n //Set hidden dots along bigger and smaller dimension to the right axis\r\n if (originalWidth > originalHeight) {\r\n hideDots.x = hideMax\r\n hideDots.y = hideMin\r\n } else {\r\n hideDots.x = hideMin\r\n hideDots.y = hideMax\r\n }\r\n\r\n //Fit image to the hidden dots\r\n const maxW = (hideDots.x - 2 * margin) * dotSize\r\n const maxH = (hideDots.y - 2 * margin) * dotSize\r\n imageSize.x = maxW\r\n imageSize.y = (maxW * originalHeight) / originalWidth\r\n if (imageSize.y > maxH) {\r\n imageSize.y = maxH\r\n imageSize.x = (maxH * originalWidth) / originalHeight\r\n }\r\n\r\n return {\r\n height: Math.round(imageSize.y + 2 * margin * dotSize),\r\n width: Math.round(imageSize.x + 2 * margin * dotSize),\r\n hideYDots: hideDots.y,\r\n hideXDots: hideDots.x\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { stringToBytes_UTF8 } from '@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js'\r\nimport { RecursivePartial } from '../types/helper.js'\r\nimport { mergeDeep } from '../utils/merge.js'\r\nimport { ImageMode, Options, ShapeType, defaultOptions, sanitizeOptions } from '../utils/options.js'\r\nimport { ErrorCorrectionPercents, getMode } from '../utils/qrcode.js'\r\nimport { QRSVG } from './qr-svg.js'\r\n\r\nObject.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8)\r\n\r\nexport type ExtensionFunction = (svg: SVGSVGElement, options: Options) => void\r\n\r\nexport class QRCodeStyling {\r\n private options: Options\r\n private container?: HTMLElement\r\n private qr?: QRCodeMinimal\r\n private extension?: ExtensionFunction\r\n private svgDrawingPromise?: Promise<void>\r\n private qrSVG?: QRSVG\r\n\r\n get size() {\r\n if (this.qrSVG)\r\n return {\r\n width: this.qrSVG.width,\r\n height: this.qrSVG.height\r\n }\r\n return undefined\r\n }\r\n\r\n constructor(options?: RecursivePartial<Options>) {\r\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions\r\n this.update()\r\n }\r\n\r\n update(\r\n /** The same options as for initialization */\r\n options?: RecursivePartial<Options>\r\n ): void {\r\n if (this.container) this.container.innerHTML = ''\r\n\r\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options\r\n\r\n if (!this.options.data) {\r\n return\r\n }\r\n\r\n if (this.options.stringToBytesFuncs) {\r\n Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs)\r\n delete this.options.stringToBytesFuncs\r\n }\r\n\r\n this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel)\r\n const mode = this.options.qrOptions.mode || getMode(this.options.data)\r\n this.qr.addData(this.options.data, mode)\r\n this.qr.make()\r\n\r\n this.setupSvg()\r\n\r\n this.append(this.container)\r\n }\r\n\r\n append(\r\n /** This container will be used for appending of the QR code */\r\n container?: HTMLElement\r\n ): void {\r\n if (!container) {\r\n return\r\n }\r\n\r\n if (this.qrSVG?.element) {\r\n container.appendChild(this.qrSVG.element)\r\n }\r\n\r\n this.container = container\r\n }\r\n\r\n /**\r\n * @deprecated Use options.plugins with a postProcess hook\r\n * @example\r\n *\r\n * ```js\r\n * const extension = (svg, options) => {\r\n * const { width, height } = options;\r\n * const size = Math.min(width, height);\r\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n * const borderAttributes = {\r\n * fill: \"none\",\r\n * x: (width - size + 40) / 2,\r\n * y: (height - size + 40) / 2,\r\n * width: size - 40,\r\n * height: size - 40,\r\n * stroke: \"black\",\r\n * \"stroke-width\": 40,\r\n * rx: 100\r\n * };\r\n * Object.keys(borderAttributes).forEach((attribute) => {\r\n * border.setAttribute(attribute, borderAttributes[attribute]);\r\n * });\r\n * svg.appendChild(border);\r\n * };\r\n * ```\r\n */\r\n applyExtension(\r\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\r\n extension: ExtensionFunction\r\n ): void {\r\n if (!extension) {\r\n throw new Error('Extension function should be defined.')\r\n }\r\n\r\n this.extension = extension\r\n this.update()\r\n }\r\n\r\n /**\r\n * @deprecated Use options.plugins with a postProcess hook\r\n */\r\n deleteExtension(): void {\r\n this.extension = undefined\r\n this.update()\r\n }\r\n\r\n async serialize(): Promise<string | undefined> {\r\n if (!this.qr) throw new Error('QR code is empty')\r\n\r\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\r\n this.setupSvg()\r\n }\r\n await this.svgDrawingPromise\r\n\r\n if (!this.qrSVG?.element) {\r\n return\r\n }\r\n\r\n const serializer = new XMLSerializer()\r\n let source = serializer.serializeToString(this.qrSVG.element)\r\n\r\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source\r\n return source\r\n }\r\n\r\n private setupSvg(): void {\r\n if (!this.qr) {\r\n return\r\n }\r\n let moduleCount = this.qr.getModuleCount()\r\n if (this.options.imageOptions.mode == ImageMode.background && this.options.shape != ShapeType.circle)\r\n moduleCount += 2\r\n let count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount)\r\n if (count % 2 == 0) count -= 1\r\n let margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n if (this.options.imageOptions.mode == ImageMode.background) margin += this.options.imageOptions.margin || 0\r\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin))\r\n this.qrSVG = new QRSVG({\r\n ...this.options,\r\n width: size,\r\n height: size,\r\n size,\r\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\r\n })\r\n\r\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\r\n if (!this.qrSVG?.element) return\r\n this.options.plugins?.forEach(plugin => plugin.postProcess?.(this.qrSVG!.element!, {\r\n ...this.options,\r\n width: size,\r\n height: size,\r\n size\r\n }))\r\n this.extension?.(this.qrSVG.element, {\r\n ...this.options,\r\n width: size,\r\n height: size,\r\n size\r\n })\r\n })\r\n }\r\n}\r\n","/**\n * stringToBytes_UTF8\n * contributed by elhigu\n */\nexport const stringToBytes_UTF8 = {\n UTF8: (s) => {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 0x80)\n utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n else {\n // surrogate pair\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n }\n};\n//# sourceMappingURL=stringToBytes_UTF8.js.map","export interface CanvasOptions {\r\n width: number\r\n height: number\r\n margin: number\r\n}\r\n\r\nexport const defaultCanvasOptions: CanvasOptions = {\r\n width: 300,\r\n height: 300,\r\n margin: 0\r\n}\r\n\r\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\r\n const newOptions = { ...options }\r\n\r\n newOptions.width = Number(newOptions.width)\r\n newOptions.height = Number(newOptions.height)\r\n newOptions.margin = Number(newOptions.margin)\r\n\r\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\r\n newOptions.margin = Math.min(newOptions.width, newOptions.height)\r\n }\r\n\r\n return newOptions\r\n}\r\n","import { QRCodeStyling } from '../core/qr-code-styling.js'\r\nimport { RecursivePartial } from '../types/helper.js'\r\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from '../utils/canvas-options.js'\r\nimport { mergeDeep } from '../utils/merge.js'\r\n\r\nexport enum FileExtension {\r\n svg = 'svg',\r\n png = 'png',\r\n jpeg = 'jpeg',\r\n webp = 'webp'\r\n}\r\n\r\nexport function drawToCanvas(\r\n qrCode: QRCodeStyling,\r\n options?: RecursivePartial<CanvasOptions>\r\n): { canvas: HTMLCanvasElement, canvasDrawingPromise: Promise<void> | undefined } | undefined {\r\n const { width, height, margin } = options\r\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\r\n : defaultCanvasOptions\r\n\r\n const canvas = document.createElement('canvas')\r\n canvas.width = width\r\n canvas.height = height\r\n\r\n const size = Math.min(width, height) - 2 * margin\r\n\r\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\r\n if (!xml) return\r\n const svg64 = btoa(xml)\r\n const image64 = 'data:image/svg+xml;base64,' + svg64\r\n const image = new Image()\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n image.onload = (): void => {\r\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\r\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height))\r\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas\r\n try {\r\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor)\r\n } catch (_) {\r\n // Fallback to regular canvas element\r\n aaCanvas = document.createElement('canvas')\r\n aaCanvas.width = image.width * aaFactor\r\n aaCanvas.height = image.height * aaFactor\r\n }\r\n aaCanvas.getContext('2d')?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height)\r\n\r\n canvas?.getContext('2d')?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size)\r\n resolve()\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n image.src = image64\r\n })\r\n })\r\n\r\n return { canvas, canvasDrawingPromise }\r\n}\r\n\r\nexport async function download(\r\n qrCode: QRCodeStyling,\r\n downloadOptions?: { name?: string, extension: `${FileExtension}` },\r\n options?: RecursivePartial<CanvasOptions>\r\n): Promise<void> {\r\n let extension: `${FileExtension}` = FileExtension.png\r\n let name = 'qr'\r\n\r\n if (downloadOptions) {\r\n if (downloadOptions.name) {\r\n name = downloadOptions.name\r\n }\r\n if (downloadOptions.extension) {\r\n extension = downloadOptions.extension\r\n }\r\n }\r\n\r\n if (extension.toLowerCase() === 'svg') {\r\n const source = await qrCode.serialize()\r\n if (!source) return\r\n const url = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source)\r\n downloadURI(url, `${name}.svg`)\r\n } else {\r\n const res = drawToCanvas(qrCode, options)\r\n if (!res) return\r\n const { canvas, canvasDrawingPromise } = res\r\n await canvasDrawingPromise\r\n const url = canvas.toDataURL(`image/${extension}`)\r\n downloadURI(url, `${name}.${extension}`)\r\n }\r\n}\r\n\r\nexport function downloadURI(uri: string, name: string): void {\r\n const link = document.createElement('a')\r\n link.download = name\r\n link.href = uri\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n}\r\n","export { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nexport { QRCodeStyling, type ExtensionFunction } from './core/qr-code-styling.js'\r\nexport { FileExtension } from './tools/browser-utils.js'\r\nexport { type RecursivePartial } from './types/helper.js'\r\nexport { type CanvasOptions } from './utils/canvas-options.js'\r\nexport { GradientType, type Gradient } from './utils/gradient.js'\r\nexport { CornerDotType, CornerSquareType, DotType, ImageMode, ShapeType, type Options, type Plugin } from './utils/options.js'\r\nexport { ErrorCorrectionPercents } from './utils/qrcode.js'\r\nimport * as _browserUtils from './tools/browser-utils.js'\r\n\r\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils\r\n"],"names":["BitBuffer","numToAttr","rotateFigure","getBuffer","aa","buffer","length","this","toString","i","getLengthInBits","a","getBit","index","put","putBit","push","c","ErrorCorrectLevel","u","L","M","Q","H","QRMath","constructor","static","glog","n","LOG_TABLE","initialize","Error","gexp","EXP_TABLE","w","Polynomial","num","shift","offset","len","getAt","getLength","toLogString","multiply","e","j","mod","ratio","Mode","MODE_NUMBER","MODE_ALPHA_NUM","MODE_8BIT_BYTE","MODE_KANJI","QRData","mode","data","getMode","getData","typeNumber","QR8BitByte","stringToBytes","super","write","forEach","val","QRAlphaNum","s","getCode","charAt","charCodeAt","QRNumber","strToNum","substring","chatToNum","MaskPattern","D","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","QRUtil","getPatternPosition","PATTERN_POSITION_TABLE","getMaxLength","errorCorrectLevel","m","MAX_LENGTH","getErrorCorrectPolynomial","errorCorrectLength","getMaskFunc","maskPattern","_i","getLostPoint","qrCode","getModuleCount","lostPoint","row","moduleCount","col","sameCount","dark","isDark","r","count","darkCount","Math","getBCHTypeInfo","d","getBCHDigit","G15","G15_MASK","getBCHTypeNumber","G18","digit","G","RSBlock","totalCount","dataCount","getDataCount","getTotalCount","getRSBlocks","rsBlock","getRsBlockTable","list","RS_BLOCK_TABLE","TypeNumber","Array","fill","map","_","ErrorCorrectionLevel","fa","K","numeric","alphanumeric","kanji","unicode","QRCodeMinimal","qrDataList","modules","errorCorrectionLevel","getTypeNumber","setTypeNumber","getErrorCorrectLevel","setErrorCorrectLevel","clearData","addData","qrData","byte","stringToBytesFuncs","default","UTF8","QRKanji","SJIS","make","rsBlocks","totalDataCount","reduce","t","v","makeImpl","getBestMaskPattern","minLostPoint","pattern","test","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","mapData","inc","bitIndex","byteIndex","maskFunc","pos","bits","createData","dataArray","PAD0","PAD1","createBytes","createNumArray","maxDcCount","maxEcCount","dcCount","ecCount","max","dcdata","rsPoly","modPoly","ecdata","modIndex","totalCodeCount","bytes","isObject","obj","isArray","mergeDeep","target","sources","undefined","source","keys","key","targetValue","sourceValue","GradientType","ka","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","colorStop","radial","linear","DotType","N","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","wave","heart","star","weave","pentagon","hexagon","zebraHorizontal","zebraVertical","blocksHorizontal","blocksVertical","CornerDotType","P","inpoint","outpoint","CornerSquareType","R","centerCircle","ShapeType","ma","circle","ImageMode","na","center","overlay","background","defaultOptions","document","shape","width","height","size","qrOptions","imageOptions","imageSize","crossOrigin","margin","color","dotsOptions","type","sanitizeOptions","options","newOptions","min","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","DotElements","args","x","y","createElementNS","setAttribute","element","sideRounded","svgPath","cornerRounded","cornerExtraRounded","classyDot","a1","PI","a2","c23x","s2","sin","c23y","s1","cos","c31x","c31y","scalePath","dotSize","spikes","outerRadius","innerRadius","cx","cy","angle","radius","join","notch","thickness","qrCornerDotFigures","draw","args2","SquareElements","circleRadius","qrCornerSquareFigures","roundedCorners","getNeighbor","corner","end","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","stripes","stripe","endpoint","qrDotFigures","getPRandom","randomFactor","rnd","random","_args","_params","getQrDotFigure","plugins","defaultDraw","drawPluginDot","plugin","el","drawDot","drawPlugin","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","parseColor","cstr","parts","alpha","toLowerCase","base","slice","parseInt","exec","value","trim","split","parseFloat","dims","pop","padStart","getRng","matrix","match","seed","ix","xOffset","yOffset","imul","squareMask","cornerSquareTypes","Set","Object","values","dotMask","cornerDotTypes","QRSVG","_element","_fakeMatrix","defs","backgroundMask","backgroundMaskGroup","dotsMask","dotsMaskGroup","lightDotsMask","lightDotsMaskGroup","qr","imageTools","appendChild","drawQR","toFixed","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxSize","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","newSize","dotsMax","ceil","dotsMin","abs","hideMax","hideMin","maxW","maxH","floor","coverLevel","alignment","drawBackground","drawImage","drawDots","drawCorners","createColor","additionalRotation","name","createMask","filter","additionalDots","fakeCount","ii","jj","sqrt","iAlign","find","jAlign","fakeBeginning","colorCount","cornersSquareSize","cornersDotSize","column","beginning","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","drawPluginCornerSquare","drawCornerSquare","squareArgs","pluinCornerSquare","cornerFill","cornerElement","isCornerSquareType","has","drawPluginCornerDot","drawCornerDot","dotArgs","pluinCornerDot","isCornerDotType","dx","dy","imageUrl","setAttributeNS","indexOf","encoding","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","dh","gradientSize","rect","x0","y0","positiveRotation","tan","x1","y1","stopCfg","stop","parsed","id","mask","group","assign","stringToBytes_UTF8","utf8","charcode","QRCodeStyling","extension","svgDrawingPromise","qrSVG","update","innerHTML","setupSvg","append","applyExtension","deleteExtension","serialize","serializeToString","XMLSerializer","postProcess","defaultCanvasOptions","FileExtension","Oa","drawToCanvas","sanitizeCanvasOptions","canvas","createElement","xml","image64","btoa","aaFactor","aaCanvas","OffscreenCanvas","getContext","canvasDrawingPromise","downloadURI","uri","link","download","href","body","click","removeChild","svg","png","jpeg","webp","browserUtils","downloadOptions","res"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,30]}
|
|
1
|
+
{"version":3,"file":"qr-code-styling.js","sources":["../node_modules/@liquid-js/qrcode-generator/lib/qrcode/BitBuffer.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/ErrorCorrectLevel.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRMath.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Polynomial.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Mode.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRData.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QR8BitByte.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRAlphaNum.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRKanji.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRNumber.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/MaskPattern.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/RSBlock.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js","../src/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/figures/dot-elements.ts","../src/figures/corner-dot.ts","../src/figures/square-elements.ts","../src/figures/corner-square.ts","../src/figures/dot-composition.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/utils/color.ts","../src/utils/random.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../node_modules/@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js","../src/utils/canvas-options.ts","../src/tools/resize.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["export class BitBuffer {\n buffer;\n length;\n constructor() {\n this.buffer = [];\n this.length = 0;\n }\n getBuffer() {\n return this.buffer;\n }\n getLengthInBits() {\n return this.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLengthInBits(); i += 1) {\n buffer += this.getBit(i) ? '1' : '0';\n }\n return buffer;\n }\n getBit(index) {\n return ((this.buffer[~~(index / 8)] >>> (7 - (index % 8))) & 1) == 1;\n }\n put(num, length) {\n for (let i = 0; i < length; i += 1) {\n this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n }\n }\n putBit(bit) {\n if (this.length == this.buffer.length * 8) {\n this.buffer.push(0);\n }\n if (bit) {\n this.buffer[~~(this.length / 8)] |= 0x80 >>> this.length % 8;\n }\n this.length += 1;\n }\n}\n//# sourceMappingURL=BitBuffer.js.map","/**\n * ErrorCorrectLevel\n *\n * @author Kazuhiko Arase\n */\nexport var ErrorCorrectLevel;\n(function (ErrorCorrectLevel) {\n /**\n * 7%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"L\"] = 1] = \"L\";\n /**\n * 15%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"M\"] = 0] = \"M\";\n /**\n * 25%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n /**\n * 30%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"H\"] = 2] = \"H\";\n})(ErrorCorrectLevel || (ErrorCorrectLevel = {}));\n//# sourceMappingURL=ErrorCorrectLevel.js.map","/**\n * QRMath\n *\n * @author Kazuhiko Arase\n */\nexport class QRMath {\n constructor() {\n throw new Error('error');\n }\n static initialize = () => {\n QRMath.EXP_TABLE = [];\n QRMath.LOG_TABLE = [];\n for (let i = 0; i < 256; i += 1) {\n QRMath.EXP_TABLE.push(i < 8\n ? 1 << i\n : QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]);\n QRMath.LOG_TABLE.push(0);\n }\n for (let i = 0; i < 255; i += 1) {\n QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n }\n };\n static EXP_TABLE;\n static LOG_TABLE;\n static glog(n) {\n if (!QRMath.LOG_TABLE)\n QRMath.initialize();\n if (n < 1) {\n throw new Error('log(' + n + ')');\n }\n return QRMath.LOG_TABLE[n];\n }\n static gexp(n) {\n if (!QRMath.EXP_TABLE)\n QRMath.initialize();\n while (n < 0) {\n n += 255;\n }\n while (n >= 256) {\n n -= 255;\n }\n return QRMath.EXP_TABLE[n];\n }\n}\n//# sourceMappingURL=QRMath.js.map","import { QRMath } from './QRMath.js';\n/**\n * Polynomial\n *\n * @author Kazuhiko Arase\n */\nexport class Polynomial {\n num;\n constructor(num, shift = 0) {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n this.num = [];\n const len = num.length - offset;\n for (let i = 0; i < len; i += 1) {\n this.num.push(num[offset + i]);\n }\n for (let i = 0; i < shift; i += 1) {\n this.num.push(0);\n }\n }\n getAt(index) {\n return this.num[index];\n }\n getLength() {\n return this.num.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += this.getAt(i);\n }\n return buffer.toString();\n }\n toLogString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += QRMath.glog(this.getAt(i));\n }\n return buffer.toString();\n }\n multiply(e) {\n const num = [];\n const len = this.getLength() + e.getLength() - 1;\n for (let i = 0; i < len; i += 1) {\n num.push(0);\n }\n for (let i = 0; i < this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(this.getAt(i)) + QRMath.glog(e.getAt(j)));\n }\n }\n return new Polynomial(num);\n }\n mod(e) {\n if (this.getLength() - e.getLength() < 0) {\n return this;\n }\n const ratio = QRMath.glog(this.getAt(0)) - QRMath.glog(e.getAt(0));\n // create copy\n const num = [];\n for (let i = 0; i < this.getLength(); i += 1) {\n num.push(this.getAt(i));\n }\n // subtract and calc rest.\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);\n }\n // call recursively\n return new Polynomial(num).mod(e);\n }\n}\n//# sourceMappingURL=Polynomial.js.map","/**\n * Mode\n *\n * @author Kazuhiko Arase\n */\nexport var Mode;\n(function (Mode) {\n /**\n * number\n */\n Mode[Mode[\"MODE_NUMBER\"] = 1] = \"MODE_NUMBER\";\n /**\n * alphabet and number\n */\n Mode[Mode[\"MODE_ALPHA_NUM\"] = 2] = \"MODE_ALPHA_NUM\";\n /**\n * 8bit byte\n */\n Mode[Mode[\"MODE_8BIT_BYTE\"] = 4] = \"MODE_8BIT_BYTE\";\n /**\n * KANJI\n */\n Mode[Mode[\"MODE_KANJI\"] = 8] = \"MODE_KANJI\";\n})(Mode || (Mode = {}));\n//# sourceMappingURL=Mode.js.map","import { Mode } from './Mode.js';\n/**\n * QRData\n *\n * @author Kazuhiko Arase\n */\nexport class QRData {\n mode;\n data;\n constructor(mode, data) {\n this.mode = mode;\n this.data = data;\n }\n getMode() {\n return this.mode;\n }\n getData() {\n return this.data;\n }\n getLengthInBits(typeNumber) {\n if (1 <= typeNumber && typeNumber < 10) {\n // 1 - 9\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 10;\n case Mode.MODE_ALPHA_NUM:\n return 9;\n case Mode.MODE_8BIT_BYTE:\n return 8;\n case Mode.MODE_KANJI:\n return 8;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 27) {\n // 10 - 26\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 12;\n case Mode.MODE_ALPHA_NUM:\n return 11;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 10;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 41) {\n // 27 - 40\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 14;\n case Mode.MODE_ALPHA_NUM:\n return 13;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 12;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else {\n throw new Error('typeNumber:' + typeNumber);\n }\n }\n}\n//# sourceMappingURL=QRData.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QR8BitByte\n *\n * @author Kazuhiko Arase\n */\nexport class QR8BitByte extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_8BIT_BYTE, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n data.forEach(val => buffer.put(val, 8));\n }\n getLength() {\n return this.stringToBytes(this.getData()).length;\n }\n}\n//# sourceMappingURL=QR8BitByte.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRAlphaNum\n *\n * @author Kazuhiko Arase\n */\nexport class QRAlphaNum extends QRData {\n constructor(data) {\n super(Mode.MODE_ALPHA_NUM, data);\n }\n write(buffer) {\n const s = this.getData();\n let i = 0;\n while (i + 1 < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)) * 45 + QRAlphaNum.getCode(s.charAt(i + 1)), 11);\n i += 2;\n }\n if (i < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)), 6);\n }\n }\n getLength() {\n return this.getData().length;\n }\n static getCode(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n }\n else {\n switch (c) {\n case ' ':\n return 36;\n case '$':\n return 37;\n case '%':\n return 38;\n case '*':\n return 39;\n case '+':\n return 40;\n case '-':\n return 41;\n case '.':\n return 42;\n case '/':\n return 43;\n case ':':\n return 44;\n default:\n throw new Error('illegal char :' + c);\n }\n }\n }\n}\n//# sourceMappingURL=QRAlphaNum.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRKanji(SJIS only)\n *\n * @author Kazuhiko Arase\n */\nexport class QRKanji extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_KANJI, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n let i = 0;\n while (i + 1 < data.length) {\n let c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);\n if (0x8140 <= c && c <= 0x9ffc) {\n c -= 0x8140;\n }\n else if (0xe040 <= c && c <= 0xebbf) {\n c -= 0xc140;\n }\n else {\n throw new Error('illegal char at ' + (i + 1) + '/' + c);\n }\n c = ((c >>> 8) & 0xff) * 0xc0 + (c & 0xff);\n buffer.put(c, 13);\n i += 2;\n }\n if (i < data.length) {\n throw new Error('illegal char at ' + (i + 1));\n }\n }\n getLength() {\n return this.stringToBytes(this.getData()).length / 2;\n }\n}\n//# sourceMappingURL=QRKanji.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRNumber\n *\n * @author Kazuhiko Arase\n */\nexport class QRNumber extends QRData {\n constructor(data) {\n super(Mode.MODE_NUMBER, data);\n }\n write(buffer) {\n const data = this.getData();\n let i = 0;\n while (i + 2 < data.length) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 3)), 10);\n i += 3;\n }\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 1)), 4);\n }\n else if (data.length - i == 2) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 2)), 7);\n }\n }\n }\n getLength() {\n return this.getData().length;\n }\n static strToNum(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + QRNumber.chatToNum(s.charAt(i));\n }\n return num;\n }\n static chatToNum(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw new Error('illegal char :' + c);\n }\n}\n//# sourceMappingURL=QRNumber.js.map","/**\n * MaskPattern\n *\n * @author Kazuhiko Arase\n */\nexport var MaskPattern;\n(function (MaskPattern) {\n /**\n * mask pattern 000\n */\n MaskPattern[MaskPattern[\"PATTERN000\"] = 0] = \"PATTERN000\";\n /**\n * mask pattern 001\n */\n MaskPattern[MaskPattern[\"PATTERN001\"] = 1] = \"PATTERN001\";\n /**\n * mask pattern 010\n */\n MaskPattern[MaskPattern[\"PATTERN010\"] = 2] = \"PATTERN010\";\n /**\n * mask pattern 011\n */\n MaskPattern[MaskPattern[\"PATTERN011\"] = 3] = \"PATTERN011\";\n /**\n * mask pattern 100\n */\n MaskPattern[MaskPattern[\"PATTERN100\"] = 4] = \"PATTERN100\";\n /**\n * mask pattern 101\n */\n MaskPattern[MaskPattern[\"PATTERN101\"] = 5] = \"PATTERN101\";\n /**\n * mask pattern 110\n */\n MaskPattern[MaskPattern[\"PATTERN110\"] = 6] = \"PATTERN110\";\n /**\n * mask pattern 111\n */\n MaskPattern[MaskPattern[\"PATTERN111\"] = 7] = \"PATTERN111\";\n})(MaskPattern || (MaskPattern = {}));\n//# sourceMappingURL=MaskPattern.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { MaskPattern } from './MaskPattern.js';\nimport { Mode } from './Mode.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QRMath } from './QRMath.js';\n/**\n * QRUtil\n *\n * @author Kazuhiko Arase\n */\nexport class QRUtil {\n constructor() {\n throw new Error('error');\n }\n static getPatternPosition(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n }\n static PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n static MAX_LENGTH = [\n [\n [41, 25, 17, 10],\n [34, 20, 14, 8],\n [27, 16, 11, 7],\n [17, 10, 7, 4]\n ],\n [\n [77, 47, 32, 20],\n [63, 38, 26, 16],\n [48, 29, 20, 12],\n [34, 20, 14, 8]\n ],\n [\n [127, 77, 53, 32],\n [101, 61, 42, 26],\n [77, 47, 32, 20],\n [58, 35, 24, 15]\n ],\n [\n [187, 114, 78, 48],\n [149, 90, 62, 38],\n [111, 67, 46, 28],\n [82, 50, 34, 21]\n ],\n [\n [255, 154, 106, 65],\n [202, 122, 84, 52],\n [144, 87, 60, 37],\n [106, 64, 44, 27]\n ],\n [\n [322, 195, 134, 82],\n [255, 154, 106, 65],\n [178, 108, 74, 45],\n [139, 84, 58, 36]\n ],\n [\n [370, 224, 154, 95],\n [293, 178, 122, 75],\n [207, 125, 86, 53],\n [154, 93, 64, 39]\n ],\n [\n [461, 279, 192, 118],\n [365, 221, 152, 93],\n [259, 157, 108, 66],\n [202, 122, 84, 52]\n ],\n [\n [552, 335, 230, 141],\n [432, 262, 180, 111],\n [312, 189, 130, 80],\n [235, 143, 98, 60]\n ],\n [\n [652, 395, 271, 167],\n [513, 311, 213, 131],\n [364, 221, 151, 93],\n [288, 174, 119, 74]\n ]\n ];\n static getMaxLength(typeNumber, mode, errorCorrectLevel) {\n const t = typeNumber - 1;\n let e = 0;\n let m = 0;\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n e = 0;\n break;\n case ErrorCorrectLevel.M:\n e = 1;\n break;\n case ErrorCorrectLevel.Q:\n e = 2;\n break;\n case ErrorCorrectLevel.H:\n e = 3;\n break;\n default:\n throw new Error('e:' + errorCorrectLevel);\n }\n switch (mode) {\n case Mode.MODE_NUMBER:\n m = 0;\n break;\n case Mode.MODE_ALPHA_NUM:\n m = 1;\n break;\n case Mode.MODE_8BIT_BYTE:\n m = 2;\n break;\n case Mode.MODE_KANJI:\n m = 3;\n break;\n default:\n throw new Error('m:' + mode);\n }\n return QRUtil.MAX_LENGTH[t][e][m];\n }\n static getErrorCorrectPolynomial(errorCorrectLength) {\n let a = new Polynomial([1]);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(new Polynomial([1, QRMath.gexp(i)]));\n }\n return a;\n }\n static getMaskFunc(maskPattern) {\n switch (maskPattern) {\n case MaskPattern.PATTERN000:\n return (i, j) => (i + j) % 2 == 0;\n case MaskPattern.PATTERN001:\n return (i, _j) => i % 2 == 0;\n case MaskPattern.PATTERN010:\n return (_i, j) => j % 3 == 0;\n case MaskPattern.PATTERN011:\n return (i, j) => (i + j) % 3 == 0;\n case MaskPattern.PATTERN100:\n return (i, j) => (~~(i / 2) + ~~(j / 3)) % 2 == 0;\n case MaskPattern.PATTERN101:\n return (i, j) => ((i * j) % 2) + ((i * j) % 3) == 0;\n case MaskPattern.PATTERN110:\n return (i, j) => (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n case MaskPattern.PATTERN111:\n return (i, j) => (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n default:\n throw new Error('mask:' + maskPattern);\n }\n }\n static getLostPoint(qrCode) {\n const moduleCount = qrCode.getModuleCount();\n let lostPoint = 0;\n // LEVEL1\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n let sameCount = 0;\n const dark = qrCode.isDark(row, col);\n for (let r = -1; r <= 1; r += 1) {\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n for (let c = -1; c <= 1; c += 1) {\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n if (r == 0 && c == 0) {\n continue;\n }\n if (dark == qrCode.isDark(row + r, col + c)) {\n sameCount += 1;\n }\n }\n }\n if (sameCount > 5) {\n lostPoint += 3 + sameCount - 5;\n }\n }\n }\n // LEVEL2\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrCode.isDark(row, col))\n count += 1;\n if (qrCode.isDark(row + 1, col))\n count += 1;\n if (qrCode.isDark(row, col + 1))\n count += 1;\n if (qrCode.isDark(row + 1, col + 1))\n count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n // LEVEL3\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row, col + 1) &&\n qrCode.isDark(row, col + 2) &&\n qrCode.isDark(row, col + 3) &&\n qrCode.isDark(row, col + 4) &&\n !qrCode.isDark(row, col + 5) &&\n qrCode.isDark(row, col + 6)) {\n lostPoint += 40;\n }\n }\n }\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row + 1, col) &&\n qrCode.isDark(row + 2, col) &&\n qrCode.isDark(row + 3, col) &&\n qrCode.isDark(row + 4, col) &&\n !qrCode.isDark(row + 5, col) &&\n qrCode.isDark(row + 6, col)) {\n lostPoint += 40;\n }\n }\n }\n // LEVEL4\n let darkCount = 0;\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrCode.isDark(row, col)) {\n darkCount += 1;\n }\n }\n }\n const ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n return lostPoint;\n }\n static getBCHTypeInfo(data) {\n let d = data << 10;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n }\n return ((data << 10) | d) ^ QRUtil.G15_MASK;\n }\n static getBCHTypeNumber(data) {\n let d = data << 12;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n }\n return (data << 12) | d;\n }\n static G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n static G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n static G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n static getBCHDigit(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n }\n}\n//# sourceMappingURL=QRUtil.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\n/**\n * RSBlock\n *\n * @author Kazuhiko Arase\n */\nexport class RSBlock {\n totalCount;\n dataCount;\n static RS_BLOCK_TABLE = [\n // L\n // M\n // Q\n // H\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n constructor(totalCount, dataCount) {\n this.totalCount = totalCount;\n this.dataCount = dataCount;\n }\n getDataCount() {\n return this.dataCount;\n }\n getTotalCount() {\n return this.totalCount;\n }\n static getRSBlocks(typeNumber, errorCorrectLevel) {\n const rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n const length = rsBlock.length / 3;\n const list = [];\n for (let i = 0; i < length; i += 1) {\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n for (let j = 0; j < count; j += 1) {\n list.push(new RSBlock(totalCount, dataCount));\n }\n }\n return list;\n }\n static getRsBlockTable(typeNumber, errorCorrectLevel) {\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case ErrorCorrectLevel.M:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case ErrorCorrectLevel.Q:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case ErrorCorrectLevel.H:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default:\n break;\n }\n throw new Error('tn:' + typeNumber + '/ecl:' + errorCorrectLevel);\n }\n}\n//# sourceMappingURL=RSBlock.js.map","import { BitBuffer } from './BitBuffer.js';\nimport { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QR8BitByte } from './QR8BitByte.js';\nimport { QRAlphaNum } from './QRAlphaNum.js';\nimport { QRData } from './QRData.js';\nimport { QRKanji } from './QRKanji.js';\nimport { QRNumber } from './QRNumber.js';\nimport { QRUtil } from './QRUtil.js';\nimport { RSBlock } from './RSBlock.js';\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i);\nexport { TypeNumber };\nexport var ErrorCorrectionLevel;\n(function (ErrorCorrectionLevel) {\n ErrorCorrectionLevel[\"L\"] = \"L\";\n ErrorCorrectionLevel[\"M\"] = \"M\";\n ErrorCorrectionLevel[\"Q\"] = \"Q\";\n ErrorCorrectionLevel[\"H\"] = \"H\";\n})(ErrorCorrectionLevel || (ErrorCorrectionLevel = {}));\nexport var Mode;\n(function (Mode) {\n Mode[\"numeric\"] = \"numeric\";\n Mode[\"alphanumeric\"] = \"alphanumeric\";\n /**\n * Default\n */\n Mode[\"byte\"] = \"byte\";\n Mode[\"kanji\"] = \"kanji\";\n Mode[\"unicode\"] = \"unicode\";\n})(Mode || (Mode = {}));\n/**\n * QRCode\n *\n * @author Kazuhiko Arase\n */\nexport class QRCodeMinimal {\n static stringToBytesFuncs = {\n default(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n static PAD0 = 0xec;\n static PAD1 = 0x11;\n typeNumber;\n errorCorrectLevel;\n qrDataList;\n modules = [];\n moduleCount = 0;\n constructor(typeNumber = 0, errorCorrectionLevel = ErrorCorrectionLevel.L) {\n this.typeNumber = typeNumber;\n this.errorCorrectLevel = ErrorCorrectLevel[errorCorrectionLevel];\n this.qrDataList = [];\n }\n getTypeNumber() {\n return this.typeNumber;\n }\n setTypeNumber(typeNumber) {\n this.typeNumber = typeNumber;\n }\n getErrorCorrectLevel() {\n return this.errorCorrectLevel;\n }\n setErrorCorrectLevel(errorCorrectLevel) {\n this.errorCorrectLevel = errorCorrectLevel;\n }\n clearData() {\n this.qrDataList = [];\n }\n addData(qrData, mode = Mode.byte) {\n if (qrData instanceof QRData) {\n this.qrDataList.push(qrData);\n }\n else if (typeof qrData === 'string') {\n switch (mode) {\n case Mode.numeric:\n this.qrDataList.push(new QRNumber(qrData));\n break;\n case Mode.alphanumeric:\n this.qrDataList.push(new QRAlphaNum(qrData));\n break;\n case Mode.byte:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs.default));\n break;\n case Mode.unicode:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs['UTF8']));\n break;\n case Mode.kanji:\n this.qrDataList.push(new QRKanji(qrData, QRCodeMinimal.stringToBytesFuncs['SJIS']));\n break;\n default:\n throw new Error('mode:' + mode);\n }\n }\n else {\n throw new Error(typeof qrData);\n }\n }\n /*private getDataCount(): number {\n return this.qrDataList.length\n }\n\n private getData(index: number): QRData {\n return this.qrDataList[index]\n }*/\n isDark(row, col) {\n if (this.modules[row][col] != null) {\n return this.modules[row][col];\n }\n else {\n return false;\n }\n }\n getModuleCount() {\n return this.moduleCount;\n }\n make() {\n if (this.typeNumber < 1) {\n let typeNumber = 1;\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n const buffer = new BitBuffer();\n this.qrDataList.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n this.typeNumber = typeNumber;\n }\n this.makeImpl(false, this.getBestMaskPattern());\n }\n getBestMaskPattern() {\n let minLostPoint = 0;\n let pattern = 0;\n for (let i = 0; i < 8; i += 1) {\n this.makeImpl(true, i);\n const lostPoint = QRUtil.getLostPoint(this);\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n return pattern;\n }\n makeImpl(test, maskPattern) {\n // initialize modules\n this.moduleCount = this.typeNumber * 4 + 17;\n this.modules = [];\n for (let i = 0; i < this.moduleCount; i += 1) {\n this.modules.push([]);\n for (let j = 0; j < this.moduleCount; j += 1) {\n this.modules[i].push(null);\n }\n }\n this.setupPositionProbePattern(0, 0);\n this.setupPositionProbePattern(this.moduleCount - 7, 0);\n this.setupPositionProbePattern(0, this.moduleCount - 7);\n this.setupPositionAdjustPattern();\n this.setupTimingPattern();\n this.setupTypeInfo(test, maskPattern);\n if (this.typeNumber >= 7) {\n this.setupTypeNumber(test);\n }\n const data = QRCodeMinimal.createData(this.typeNumber, this.errorCorrectLevel, this.qrDataList);\n this.mapData(data, maskPattern);\n }\n mapData(data, maskPattern) {\n let inc = -1;\n let row = this.moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunc(maskPattern);\n for (let col = this.moduleCount - 1; col > 0; col -= 2) {\n if (col == 6) {\n col -= 1;\n }\n while (true) {\n for (let c = 0; c < 2; c += 1) {\n if (this.modules[row][col - c] == null) {\n let dark = false;\n if (byteIndex < data.length) {\n dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;\n }\n const mask = maskFunc(row, col - c);\n if (mask) {\n dark = !dark;\n }\n this.modules[row][col - c] = dark;\n bitIndex -= 1;\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n row += inc;\n if (row < 0 || this.moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n }\n setupPositionAdjustPattern() {\n const pos = QRUtil.getPatternPosition(this.typeNumber);\n pos.forEach(row => {\n pos.forEach(col => {\n if (this.modules[row][col] != null) {\n return;\n }\n for (let r = -2; r <= 2; r += 1) {\n for (let c = -2; c <= 2; c += 1) {\n if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n });\n });\n }\n setupPositionProbePattern(row, col) {\n for (let r = -1; r <= 7; r += 1) {\n for (let c = -1; c <= 7; c += 1) {\n if (row + r <= -1 || this.moduleCount <= row + r || col + c <= -1 || this.moduleCount <= col + c) {\n continue;\n }\n if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n (2 <= r && r <= 4 && 2 <= c && c <= 4)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n }\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r += 1) {\n if (this.modules[r][6] != null) {\n continue;\n }\n this.modules[r][6] = r % 2 == 0;\n }\n for (let c = 8; c < this.moduleCount - 8; c += 1) {\n if (this.modules[6][c] != null) {\n continue;\n }\n this.modules[6][c] = c % 2 == 0;\n }\n }\n setupTypeNumber(test) {\n const bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n for (let i = 0; i < 18; i += 1) {\n this.modules[~~(i / 3)][(i % 3) + this.moduleCount - 8 - 3] = !test && ((bits >> i) & 1) == 1;\n }\n for (let i = 0; i < 18; i += 1) {\n this.modules[(i % 3) + this.moduleCount - 8 - 3][~~(i / 3)] = !test && ((bits >> i) & 1) == 1;\n }\n }\n setupTypeInfo(test, maskPattern) {\n const data = (this.errorCorrectLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n // vertical\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 6) {\n this.modules[i][8] = mod;\n }\n else if (i < 8) {\n this.modules[i + 1][8] = mod;\n }\n else {\n this.modules[this.moduleCount - 15 + i][8] = mod;\n }\n }\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 8) {\n this.modules[8][this.moduleCount - i - 1] = mod;\n }\n else if (i < 9) {\n this.modules[8][15 - i - 1 + 1] = mod;\n }\n else {\n this.modules[8][15 - i - 1] = mod;\n }\n }\n // fixed\n this.modules[this.moduleCount - 8][8] = !test;\n }\n static createData(typeNumber, errorCorrectLevel, dataArray) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n const buffer = new BitBuffer();\n dataArray.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n // calc max data count\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw new Error('code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')');\n }\n // end\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n // padding\n while (true) {\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD0, 8);\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD1, 8);\n }\n return QRCodeMinimal.createBytes(buffer, rsBlocks);\n }\n static createBytes(buffer, rsBlocks) {\n let offset = 0;\n let maxDcCount = 0;\n let maxEcCount = 0;\n const dcdata = new Array(rsBlocks.length).map(_ => []);\n const ecdata = new Array(rsBlocks.length).map(_ => []);\n function createNumArray(len) {\n const a = [];\n for (let i = 0; i < len; i += 1) {\n a.push(0);\n }\n return a;\n }\n for (let r = 0; r < rsBlocks.length; r += 1) {\n const dcCount = rsBlocks[r].getDataCount();\n const ecCount = rsBlocks[r].getTotalCount() - dcCount;\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n dcdata[r] = createNumArray(dcCount);\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = createNumArray(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;\n }\n }\n const totalCodeCount = rsBlocks.reduce((t, v) => t + v.getTotalCount(), 0);\n const data = createNumArray(totalCodeCount);\n let index = 0;\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n return data;\n }\n}\n//# sourceMappingURL=QRCodeMinimal.js.map","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\r\n !!obj && typeof obj === 'object' && !Array.isArray(obj)\r\n\r\nexport type UnknownObject = {\r\n [key: string]: any\r\n} | undefined\r\n\r\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\r\n if (!sources.length) return target\r\n const source = sources.shift()\r\n if (source === undefined || !isObject(target) || !isObject(source)) return target\r\n target = { ...target }\r\n Object.keys(source).forEach((key: string): void => {\r\n const targetValue = target[key]\r\n const sourceValue = source[key]\r\n\r\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\r\n target[key] = sourceValue\r\n } else if (isObject(targetValue) && isObject(sourceValue)) {\r\n target[key] = mergeDeep({ ...targetValue }, sourceValue)\r\n } else {\r\n target[key] = sourceValue\r\n }\r\n })\r\n\r\n return mergeDeep(target, ...sources)\r\n}\r\n","export enum GradientType {\r\n radial = 'radial',\r\n linear = 'linear'\r\n}\r\n\r\nexport interface Gradient {\r\n /**\r\n * Type of gradient spread\r\n *\r\n * @default GradientType.linear\r\n */\r\n type: `${GradientType}`\r\n /**\r\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\r\n *\r\n * @default 0\r\n */\r\n rotation?: number\r\n /** Gradient colors. */\r\n colorStops: Array<{\r\n /** Position of color in gradient range */\r\n offset: number\r\n /** Color of stop in gradient range */\r\n color: string\r\n }>\r\n}\r\n\r\nexport function sanitizeGradient(gradient: Gradient): Gradient {\r\n const newGradient = { ...gradient }\r\n\r\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\r\n throw new Error(\"Field 'colorStops' is required in gradient\")\r\n }\r\n\r\n if (newGradient.rotation) {\r\n newGradient.rotation = Number(newGradient.rotation)\r\n } else {\r\n newGradient.rotation = 0\r\n }\r\n\r\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number, color: string }) => ({\r\n ...colorStop,\r\n offset: Number(colorStop.offset)\r\n }))\r\n\r\n return newGradient\r\n}\r\n","import { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { DrawArgs } from '../types/helper.js'\r\nimport { Gradient, sanitizeGradient } from './gradient.js'\r\n\r\nexport enum DotType {\r\n dot = 'dot',\r\n randomDot = 'random-dot',\r\n rounded = 'rounded',\r\n extraRounded = 'extra-rounded',\r\n verticalLine = 'vertical-line',\r\n horizontalLine = 'horizontal-line',\r\n classy = 'classy',\r\n classyRounded = 'classy-rounded',\r\n square = 'square',\r\n smallSquare = 'small-square',\r\n tinySquare = 'tiny-square',\r\n diamond = 'diamond',\r\n wave = 'wave',\r\n heart = 'heart',\r\n star = 'star',\r\n weave = 'weave',\r\n pentagon = 'pentagon',\r\n hexagon = 'hexagon',\r\n zebraHorizontal = 'zebra-horizontal',\r\n zebraVertical = 'zebra-vertical',\r\n blocksHorizontal = 'blocks-horizontal',\r\n blocksVertical = 'blocks-vertical',\r\n blobs = 'blobs'\r\n}\r\n\r\nexport enum CornerDotType {\r\n dot = 'dot',\r\n square = 'square',\r\n heart = 'heart',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n inpoint = 'inpoint',\r\n outpoint = 'outpoint',\r\n star = 'star',\r\n pentagon = 'pentagon',\r\n hexagon = 'hexagon',\r\n diamond = 'diamond'\r\n}\r\n\r\nexport enum CornerSquareType {\r\n dot = 'dot',\r\n square = 'square',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n inpoint = 'inpoint',\r\n outpoint = 'outpoint',\r\n centerCircle = 'center-circle'\r\n}\r\n\r\nexport enum ShapeType {\r\n square = 'square',\r\n circle = 'circle'\r\n}\r\n\r\nexport enum ImageMode {\r\n /**\r\n * Place image in the center of the code\r\n */\r\n center = 'center',\r\n /**\r\n * Place image over the center of the code\r\n */\r\n overlay = 'overlay',\r\n /**\r\n * Use image as background, draw dots over it\r\n */\r\n background = 'background'\r\n}\r\n\r\nexport interface Plugin {\r\n /**\r\n * Draw a single dot\r\n *\r\n * @returns Dot element; if undefined, try to use the next plugin or the default function\r\n */\r\n drawDot?: (args: DrawArgs) => SVGElement | undefined | void\r\n /**\r\n * Draw corner dot\r\n *\r\n * @returns Corner dot element; if undefined, try to use the next plugin or the default function\r\n */\r\n drawCornerDot?: (args: DrawArgs) => SVGElement | undefined | void\r\n /**\r\n * Draw corner square\r\n *\r\n * @returns Corner square element and corner mask (used with ImageMode.background); if undefined, try to use the next plugin or the default function\r\n */\r\n drawCornerSquare?: (args: DrawArgs) => readonly [SVGElement, SVGElement] | undefined | void\r\n /**\r\n * Alter the generated SVG, e.g. add borders\r\n */\r\n postProcess?: (svg: SVGSVGElement, options: Options) => void\r\n}\r\n\r\nexport interface Options {\r\n /** Use a custom DOM domplementation */\r\n document: Document\r\n /** Use a custom image fetching & serializaton implementation */\r\n imageTools?: typeof browserImageTools\r\n /**\r\n * @ignore\r\n * @deprecated kept for compatibility with older extensions, use options.size\r\n */\r\n width: number\r\n /**\r\n * @ignore\r\n * @deprecated kept for compatibility with older extensions, use options.size\r\n */\r\n height: number\r\n /** @ignore */\r\n size: number\r\n /** The data will be encoded in the QR code */\r\n data: string\r\n /** The image will be copied to the center of the QR code */\r\n image?: string | Buffer | Blob\r\n /**\r\n * QR code shape\r\n *\r\n * @default ShapeType.square\r\n */\r\n shape: `${ShapeType}`\r\n /** Options will be passed to `@liquid-js/qrcode-generator` lib */\r\n qrOptions: {\r\n typeNumber: TypeNumber\r\n mode?: `${Mode}`\r\n /** @default ErrorCorrectionLevel.Q */\r\n errorCorrectionLevel: `${ErrorCorrectionLevel}`\r\n }\r\n imageOptions: {\r\n /**\r\n * Image mode\r\n *\r\n * @default ImageMode.center\r\n */\r\n mode: `${ImageMode}`\r\n /**\r\n * Fill blank areas of the code with selected color\r\n */\r\n fill: {\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"rgba(255,255,255,0.75)\"\r\n */\r\n color: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n }\r\n /**\r\n * Coefficient of the image size\r\n *\r\n * @default 0.4\r\n */\r\n imageSize: number\r\n /**\r\n * Margin of the image (in blocks)\r\n *\r\n * @default 0\r\n */\r\n margin: number\r\n /**\r\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\r\n */\r\n crossOrigin?: string\r\n }\r\n dotsOptions: {\r\n /**\r\n * QR dot size (in pixels)\r\n *\r\n * @default 10\r\n */\r\n size: number\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"#000\"\r\n */\r\n color: string\r\n /** Gradient of QR dots */\r\n gradient?: Gradient\r\n /**\r\n * Style of QR dots\r\n *\r\n * @default DotType.square\r\n */\r\n type: `${DotType}`\r\n }\r\n /** Corners Square options, omitted values match dots */\r\n cornersSquareOptions?: {\r\n /** Color of Corners Square */\r\n color?: string\r\n /** Gradient of Corners Square */\r\n gradient?: Gradient\r\n /** Style of Corners Square */\r\n type?: `${CornerSquareType | DotType}`\r\n }\r\n /** Corners Dot options, omitted values match squares */\r\n cornersDotOptions?: {\r\n /** Color of Corners Dot */\r\n color?: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n /** Style of Corners Dot */\r\n type?: `${CornerDotType | DotType}`\r\n }\r\n /** QR background styling options, false to disable background */\r\n backgroundOptions?: {\r\n /** Background roundnes, from 0 (square) to 1 (circle) */\r\n round?: number\r\n /** Background color */\r\n color?: string\r\n /** Background Gradient */\r\n gradient?: Gradient\r\n /**\r\n * Margin (in blocks) between background and the QR code\r\n *\r\n * @default 0\r\n */\r\n margin?: number\r\n } | false\r\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\r\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] }\r\n plugins?: Plugin[]\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n document: undefined as never,\r\n shape: ShapeType.square,\r\n width: undefined as never,\r\n height: undefined as never,\r\n size: undefined as never,\r\n data: '',\r\n qrOptions: {\r\n typeNumber: TypeNumber[0],\r\n mode: undefined,\r\n errorCorrectionLevel: ErrorCorrectionLevel.Q\r\n },\r\n imageOptions: {\r\n mode: ImageMode.center,\r\n imageSize: 0.4,\r\n crossOrigin: undefined,\r\n margin: 0,\r\n fill: {\r\n color: 'rgba(255,255,255,1)'\r\n }\r\n },\r\n dotsOptions: {\r\n type: DotType.square,\r\n color: '#000',\r\n size: 10\r\n }\r\n}\r\n\r\nexport function sanitizeOptions(options: Options): Options {\r\n const newOptions = { ...options }\r\n\r\n newOptions.imageOptions = {\r\n ...newOptions.imageOptions,\r\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\r\n margin: Number(newOptions.imageOptions.margin),\r\n fill: {\r\n ...newOptions.imageOptions.fill\r\n }\r\n }\r\n\r\n if (newOptions.imageOptions.mode == ImageMode.overlay) newOptions.imageOptions.margin = 0\r\n if (newOptions.imageOptions.fill.gradient) {\r\n newOptions.imageOptions.fill.gradient = sanitizeGradient(newOptions.imageOptions.fill.gradient)\r\n }\r\n\r\n newOptions.dotsOptions = {\r\n ...newOptions.dotsOptions\r\n }\r\n if (newOptions.dotsOptions.gradient) {\r\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient)\r\n }\r\n // Ensure integer dot size\r\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10)\r\n\r\n if (newOptions.cornersSquareOptions) {\r\n newOptions.cornersSquareOptions = {\r\n ...newOptions.cornersSquareOptions\r\n }\r\n if (newOptions.cornersSquareOptions.gradient) {\r\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.cornersDotOptions) {\r\n newOptions.cornersDotOptions = {\r\n ...newOptions.cornersDotOptions\r\n }\r\n if (newOptions.cornersDotOptions.gradient) {\r\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.backgroundOptions) {\r\n newOptions.backgroundOptions = {\r\n ...newOptions.backgroundOptions\r\n }\r\n if (newOptions.backgroundOptions.gradient) {\r\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient)\r\n }\r\n }\r\n\r\n if (!newOptions.document) newOptions.document = document\r\n\r\n return newOptions\r\n}\r\n","import { ErrorCorrectionLevel, Mode } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\n\r\nexport const ErrorCorrectionPercents = {\r\n [ErrorCorrectionLevel.L]: 0.07,\r\n [ErrorCorrectionLevel.M]: 0.15,\r\n [ErrorCorrectionLevel.Q]: 0.25,\r\n [ErrorCorrectionLevel.H]: 0.3\r\n}\r\n\r\nexport function getMode(data: string): Mode {\r\n switch (true) {\r\n case /^[0-9]*$/.test(data):\r\n return Mode.numeric\r\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\r\n return Mode.alphanumeric\r\n\r\n case /[^\\u0000-\\u00ff]/.test(data):\r\n return Mode.unicode\r\n default:\r\n return Mode.byte\r\n }\r\n}\r\n","import { BasicFigureDrawArgs } from '../types/helper.js'\r\nimport { numToAttr, scalePath, svgPath } from '../utils/svg.js'\r\n\r\nexport const DotElements = {\r\n dot: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n element.setAttribute('cx', numToAttr(x + size / 2))\r\n element.setAttribute('cy', numToAttr(y + size / 2))\r\n element.setAttribute('r', numToAttr(size / 2))\r\n\r\n return element\r\n },\r\n square: (args: BasicFigureDrawArgs, { width = args.size, height = args.size } = {}): SVGElement => {\r\n const { x, y, size, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n element.setAttribute('x', numToAttr(x + (size - width) / 2))\r\n element.setAttribute('y', numToAttr(y + (size - height) / 2))\r\n element.setAttribute('width', numToAttr(width))\r\n element.setAttribute('height', numToAttr(height))\r\n\r\n return element\r\n },\r\n //if rotation === 0 - right side is rounded\r\n sideRounded: (args: BasicFigureDrawArgs, { height = args.size } = {}): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + (size - height) / 2}\r\n v ${height}\r\n h ${size / 2}\r\n a ${height / 2} ${height / 2} 0 0 0 0 ${-height}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - top right corner is rounded\r\n cornerRounded: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2} 0 0 0 ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - top right corner is rounded\r\n cornerExtraRounded: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n a ${size} ${size} 0 0 0 ${-size} ${-size}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - bottom left and top right corners are rounded\r\n classyDot: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size / 2}\r\n a ${size / 2} ${size / 2} 0 0 0 ${size / 2} ${size / 2}\r\n h ${size / 2}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2} 0 0 0 ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n //if rotation === 0 - top right corner is rounded\r\n wave: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const a1 = 5 * Math.PI / 180\r\n const a2 = 65 * Math.PI / 180\r\n const s1 = 0.95\r\n const s2 = 0.65\r\n\r\n const c23x = size * (1 - s2 * Math.sin(a1))\r\n const c23y = -size * (s1 - s2 * Math.cos(a1))\r\n\r\n const c31x = -size * Math.sin(a2) / 2\r\n const c31y = size * Math.cos(a2) / 2\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + size}\r\n c ${size * s2} 0 ${c23x} ${c23y} ${size} ${-size * s1}\r\n c ${c31x} ${c31y} ${-size / 2} ${size * (s1 - 1)} ${-size} ${size * (s1 - 1)} \r\n z`\r\n )\r\n\r\n return element\r\n },\r\n heart: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n scalePath([\r\n 'M',\r\n 1,\r\n 0.31629,\r\n 'c',\r\n -0.00086,\r\n 0.15702,\r\n -0.10534,\r\n 0.26323,\r\n -0.21876,\r\n 0.38123,\r\n 'c',\r\n -0.06736,\r\n 0.06834,\r\n -0.18938,\r\n 0.17948,\r\n -0.28124,\r\n 0.26126,\r\n 'c',\r\n -0.09188,\r\n -0.08178,\r\n -0.2139,\r\n -0.19292,\r\n -0.28124,\r\n -0.26126,\r\n 'c',\r\n -0.11344,\r\n -0.118,\r\n -0.2179,\r\n -0.22422,\r\n -0.21876,\r\n -0.38123,\r\n 'c',\r\n -0.00096,\r\n -0.27136,\r\n 0.33154,\r\n -0.36842,\r\n 0.5,\r\n -0.17,\r\n 'c',\r\n 0.16844,\r\n -0.19842,\r\n 0.50094,\r\n -0.10136,\r\n 0.5,\r\n 0.17,\r\n 'z'\r\n ], { x, y, size })\r\n )\r\n\r\n return element\r\n },\r\n rounded: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n element.setAttribute('x', numToAttr(x))\r\n element.setAttribute('y', numToAttr(y))\r\n element.setAttribute('width', numToAttr(size))\r\n element.setAttribute('height', numToAttr(size))\r\n element.setAttribute('rx', numToAttr(size / 4))\r\n element.setAttribute('ry', numToAttr(size / 4))\r\n\r\n return element\r\n },\r\n classy: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n inpoint: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + size / 2}\r\n v ${size / 4}\r\n a ${size / 4} ${size / 4} 0 0 0 ${size / 4} ${size / 4}\r\n h ${(size / 4) * 3}\r\n v ${(-size / 4) * 3}\r\n a ${size / 4} ${size / 4} 0 0 0 ${-size / 4} ${-size / 4}\r\n h ${-size / 2}\r\n a ${size / 4} ${size / 4} 0 0 0 ${-size / 4} ${size / 4}\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n star: (args: BasicFigureDrawArgs, {\r\n spikes = 5,\r\n outerRadius = args.size / 2,\r\n innerRadius = args.size / 4\r\n } = {}): SVGElement => {\r\n const { size, x, y, document } = args\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n const angle = Math.PI / spikes\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n Array(2 * spikes).fill(0).map((_, i) => {\r\n const radius = i % 2 === 0 ? outerRadius : innerRadius\r\n const xPoint = cx + radius * Math.sin(i * angle)\r\n const yPoint = cy - radius * Math.cos(i * angle)\r\n return svgPath`${i === 0 ? 'M' : 'L'} ${xPoint} ${yPoint} `\r\n }).join(' ')\r\n )\r\n\r\n return element\r\n },\r\n weave: (args: BasicFigureDrawArgs): SVGElement => {\r\n const { size, x, y, document } = args\r\n\r\n const thickness = size * 0.6\r\n const notch = (size - thickness) / 2\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x + notch} ${y}\r\n l ${thickness} 0\r\n l 0 ${notch}\r\n l ${notch} 0\r\n l 0 ${thickness}\r\n l ${-notch} 0\r\n l 0 ${notch}\r\n l ${-thickness} 0\r\n l 0 ${-notch}\r\n l ${-notch} 0\r\n l 0 ${-thickness}\r\n l ${notch} 0\r\n z`\r\n )\r\n\r\n return element\r\n },\r\n blob: (args: BasicFigureDrawArgs, corners: Record<'tl' | 'tr' | 'bl' | 'br', 'round' | 'out' | 'square'>): SVGElement => {\r\n const { size, x, y, document } = args\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n\r\n const parts = [\r\n svgPath`M ${x} ${y + 2.5 * dotSize}`\r\n ]\r\n\r\n let l = 2 * dotSize\r\n\r\n if (corners.bl == 'round') {\r\n parts.push(\r\n svgPath`v ${l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}`\r\n )\r\n l = 2 * dotSize\r\n } else if (corners.bl == 'out') {\r\n parts.push(\r\n svgPath`v ${5 * dotSize + l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 1 ${dotSize * 2.5} ${dotSize * -2.5}`\r\n )\r\n l = 2 * dotSize\r\n } else {\r\n parts.push(\r\n svgPath`v ${2.5 * dotSize + l}`\r\n )\r\n l = 4.5 * dotSize\r\n }\r\n\r\n if (corners.br == 'round') {\r\n parts.push(\r\n svgPath`h ${l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * -2.5}`\r\n )\r\n l = -2 * dotSize\r\n } else if (corners.br == 'out') {\r\n parts.push(\r\n svgPath`h ${5 * dotSize + l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 1 ${dotSize * -2.5} ${dotSize * -2.5}`\r\n )\r\n l = -2 * dotSize\r\n } else {\r\n parts.push(\r\n svgPath`h ${2.5 * dotSize + l}`\r\n )\r\n l = -4.5 * dotSize\r\n }\r\n\r\n if (corners.tr == 'round') {\r\n parts.push(\r\n svgPath`v ${l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * -2.5} ${dotSize * -2.5}`\r\n )\r\n l = -2 * dotSize\r\n } else if (corners.tr == 'out') {\r\n parts.push(\r\n svgPath`v ${-5 * dotSize + l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 1 ${dotSize * -2.5} ${dotSize * 2.5}`\r\n )\r\n l = -2 * dotSize\r\n } else {\r\n parts.push(\r\n svgPath`v ${-2.5 * dotSize + l}`\r\n )\r\n l = -4.5 * dotSize\r\n }\r\n\r\n if (corners.tl == 'round') {\r\n parts.push(\r\n svgPath`h ${l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * -2.5} ${dotSize * 2.5}`\r\n )\r\n } else if (corners.tl == 'out') {\r\n parts.push(\r\n svgPath`h ${-5 * dotSize + l}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 1 ${dotSize * 2.5} ${dotSize * 2.5}`\r\n )\r\n } else {\r\n parts.push(\r\n svgPath`h ${-2.5 * dotSize + l}`\r\n )\r\n }\r\n\r\n element.setAttribute(\r\n 'd',\r\n parts.join(' ') + ' z'\r\n )\r\n\r\n return element\r\n }\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { CornerDotType, Plugin } from '../utils/options.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { DotElements } from './dot-elements.js'\r\n\r\nconst qrCornerDotFigures: { [type in CornerDotType]: (args: DrawArgs) => SVGElement } = {\r\n [CornerDotType.dot]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.dot\r\n }),\r\n [CornerDotType.square]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.square\r\n }),\r\n [CornerDotType.heart]: args => DotElements.heart(args),\r\n [CornerDotType.extraRounded]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.rounded\r\n }),\r\n [CornerDotType.classy]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.classy\r\n }),\r\n [CornerDotType.inpoint]: args => rotateFigure({\r\n ...args,\r\n draw: DotElements.inpoint\r\n }),\r\n [CornerDotType.outpoint]: args => rotateFigure({\r\n ...args,\r\n rotation: (args.rotation || 0) + Math.PI,\r\n draw: DotElements.inpoint\r\n }),\r\n [CornerDotType.star]: args => DotElements.star(args),\r\n [CornerDotType.pentagon]: args => DotElements.star(args, {\r\n spikes: 2.5,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [CornerDotType.hexagon]: args => DotElements.star(args, {\r\n spikes: 3,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [CornerDotType.diamond]: args => rotateFigure({\r\n ...args,\r\n rotation: Math.PI / 4,\r\n draw: args2 => DotElements.square(args2, { width: args2.size * 0.85, height: args2.size * 0.85 })\r\n })\r\n}\r\n\r\nexport function getQrCornerDotFigure(type: `${CornerDotType}`) {\r\n return qrCornerDotFigures[type] || qrCornerDotFigures[CornerDotType.square]\r\n}\r\n\r\nexport function drawPluginCornerDot(plugins: Plugin[]) {\r\n return (args: DrawArgs) => {\r\n for (const plugin of plugins) {\r\n const el = plugin.drawCornerDot?.(args)\r\n if (el)\r\n return el\r\n }\r\n return undefined\r\n }\r\n}\r\n","import { BasicFigureDrawArgs } from '../types/helper.js'\r\nimport { svgPath } from '../utils/svg.js'\r\n\r\nexport const SquareElements = {\r\n dot: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y}\r\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\r\n z\r\n m 0 ${dotSize}\r\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\r\n Z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y - dotSize}\r\n a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n square: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size}\r\n z\r\n M ${x + dotSize} ${y + dotSize}\r\n h ${size - 2 * dotSize}\r\n v ${size - 2 * dotSize}\r\n h ${-size + 2 * dotSize}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x - dotSize} ${y - dotSize}\r\n h ${size + 2 * dotSize}\r\n v ${size + 2 * dotSize}\r\n h ${-size - 2 * dotSize}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n extraRounded: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${-dotSize * 2.5}\r\n v ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${dotSize * 1.5}\r\n h ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x - dotSize} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${dotSize * 3.5} ${dotSize * 3.5}\r\n h ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n h ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 0 ${-dotSize * 3.5} ${dotSize * 3.5}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n classy: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-3.5 * dotSize}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-5.5 * dotSize}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n inpoint: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { size, x, y, document } = args\r\n\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize} 0 0 0 ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize} 0 0 1 ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize} 0 0 1 ${dotSize * 3.5} ${-dotSize * 3.5}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n },\r\n centerCircle: (args: BasicFigureDrawArgs): [SVGElement, SVGElement] => {\r\n const { x, y, size, document } = args\r\n\r\n const circleRadius = size / 2.5\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n const dotSize = size / 7\r\n\r\n const element = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n element.setAttribute('clip-rule', 'evenodd')\r\n element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n h ${size}\r\n v ${size}\r\n h ${-size}\r\n z\r\n M ${cx - circleRadius} ${cy}\r\n a ${circleRadius} ${circleRadius} 0 1 0 ${circleRadius * 2} 0\r\n a ${circleRadius} ${circleRadius} 0 1 0 ${-circleRadius * 2} 0\r\n z`\r\n )\r\n\r\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n fill.setAttribute('clip-rule', 'evenodd')\r\n fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x - dotSize} ${y - dotSize}\r\n h ${size + 2 * dotSize}\r\n v ${size + 2 * dotSize}\r\n h ${-size - 2 * dotSize}\r\n z`\r\n )\r\n\r\n return [element, fill]\r\n }\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { CornerSquareType, Plugin } from '../utils/options.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { SquareElements } from './square-elements.js'\r\n\r\nconst qrCornerSquareFigures: { [type in CornerSquareType]: (args: DrawArgs) => readonly [SVGElement, SVGElement] } = {\r\n [CornerSquareType.dot]: args => SquareElements.dot(args),\r\n [CornerSquareType.square]: args => SquareElements.square(args),\r\n [CornerSquareType.extraRounded]: args => SquareElements.extraRounded(args),\r\n [CornerSquareType.classy]: args => rotateFigure({\r\n ...args,\r\n draw: SquareElements.classy\r\n }),\r\n [CornerSquareType.inpoint]: args => rotateFigure({\r\n ...args,\r\n draw: SquareElements.inpoint\r\n }),\r\n [CornerSquareType.outpoint]: ({ rotation, ...args }) => rotateFigure({\r\n ...args,\r\n rotation: (rotation || 0) + Math.PI,\r\n draw: SquareElements.inpoint\r\n }),\r\n [CornerSquareType.centerCircle]: args => SquareElements.centerCircle(args)\r\n}\r\n\r\nexport function getQrCornerSquareFigure(type: `${CornerSquareType}`) {\r\n return qrCornerSquareFigures[type] || qrCornerSquareFigures[CornerSquareType.square]\r\n}\r\n\r\nexport function drawPluginCornerSquare(plugins: Plugin[]) {\r\n return (args: DrawArgs) => {\r\n for (const plugin of plugins) {\r\n const el = plugin.drawCornerSquare?.(args)\r\n if (el)\r\n return el\r\n }\r\n return undefined\r\n }\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { DotElements } from './dot-elements.js'\r\n\r\n/**\r\n * Draw square lines with rounded corners and endpoints\r\n */\r\nexport function roundedCorners({ x, y, size, document, getNeighbor }: DrawArgs, { corner = DotElements.cornerRounded, end = DotElements.sideRounded } = {}) {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n return DotElements.dot({\r\n x, y, size,\r\n document\r\n })\r\n } else if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n } else if (neighborsCount === 2) {\r\n // Rounded corner\r\n let rotation = 0\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: corner\r\n })\r\n } else {\r\n // Endpoint\r\n let rotation = 0\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: end\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Draw square lines with rounded corners and half-rounded endpoints\r\n */\r\nexport function classy({ x, y, size, document, getNeighbor }: DrawArgs, { corner = DotElements.cornerRounded } = {}) {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n return rotateFigure({\r\n x, y, size, rotation: Math.PI / 2,\r\n document,\r\n draw: DotElements.classyDot\r\n })\r\n } else if (!leftNeighbor && !topNeighbor) {\r\n // Top right corner\r\n return rotateFigure({\r\n x, y, size, rotation: -Math.PI / 2,\r\n document,\r\n draw: corner\r\n })\r\n } else if (!rightNeighbor && !bottomNeighbor) {\r\n // Bottom left corner\r\n return rotateFigure({\r\n x, y, size, rotation: Math.PI / 2,\r\n document,\r\n draw: corner\r\n })\r\n }\r\n\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n}\r\n\r\n/**\r\n * Draw stripes with rounded or square endpoints\r\n */\r\nexport function stripes({ x, y, size, document, getNeighbor }: DrawArgs, { stripe = size, rotation = 0, endpoint = DotElements.sideRounded, dot = DotElements.dot } = {}) {\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n if (topNeighbor && bottomNeighbor) {\r\n // Mid-stripe\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: _ => DotElements.square({\r\n x, y, size,\r\n document\r\n }, { width: stripe })\r\n })\r\n } else if (topNeighbor && !bottomNeighbor) {\r\n // Top endpoint\r\n rotation += Math.PI / 2\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: args => endpoint(args, { height: stripe })\r\n })\r\n } else if (bottomNeighbor && !topNeighbor) {\r\n // Bottom endpoint\r\n rotation -= Math.PI / 2\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: args => endpoint(args, { height: stripe })\r\n })\r\n }\r\n\r\n return rotateFigure({\r\n x, y, size, rotation,\r\n document,\r\n draw: _ => dot({\r\n x: x + (size - stripe) / 2,\r\n y: y + (size - stripe) / 2,\r\n size: stripe,\r\n document\r\n })\r\n })\r\n}\r\n","import { DrawArgs } from '../types/helper.js'\r\nimport { DotType, Plugin } from '../utils/options.js'\r\nimport { rotateFigure } from '../utils/svg.js'\r\nimport { classy, roundedCorners, stripes } from './dot-composition.js'\r\nimport { DotElements } from './dot-elements.js'\r\n\r\nconst qrDotFigures: { [type in DotType]: (args: DrawArgs) => SVGElement } = {\r\n [DotType.dot]: args => DotElements.dot(args),\r\n [DotType.randomDot]: ({ size, x, y, getPRandom, ...args }) => {\r\n const rnd = (getPRandom || Math.random)\r\n const randomFactor = rnd() * (1 - 0.75) + 0.75\r\n\r\n return DotElements.dot({\r\n ...args,\r\n size: size * randomFactor,\r\n x: x + size * rnd() * (1 - randomFactor),\r\n y: y + size * rnd() * (1 - randomFactor)\r\n })\r\n },\r\n [DotType.rounded]: args => roundedCorners(args),\r\n [DotType.extraRounded]: args => roundedCorners(args, { corner: DotElements.cornerExtraRounded }),\r\n [DotType.verticalLine]: args => stripes(args),\r\n [DotType.horizontalLine]: ({ getNeighbor, ...args }) => stripes({\r\n ...args,\r\n getNeighbor: getNeighbor ? (x, y) => getNeighbor(y, x) : undefined\r\n }, { rotation: -Math.PI / 2 }),\r\n [DotType.classy]: args => classy(args),\r\n [DotType.classyRounded]: args => classy(args, { corner: DotElements.cornerExtraRounded }),\r\n [DotType.square]: args => DotElements.square(args),\r\n [DotType.smallSquare]: ({ x, y, size, document }) => {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.7\r\n x = x + originalSize * 0.15\r\n y = y + originalSize * 0.15\r\n\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n },\r\n [DotType.tinySquare]: ({ x, y, size, document }) => {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.3\r\n x = x + originalSize * 0.35\r\n y = y + originalSize * 0.35\r\n\r\n return DotElements.square({\r\n x, y, size,\r\n document\r\n })\r\n },\r\n [DotType.diamond]: args => rotateFigure({\r\n ...args,\r\n rotation: Math.PI / 4,\r\n draw: args2 => DotElements.square(args2, { width: args2.size * 0.85, height: args2.size * 0.85 })\r\n }),\r\n [DotType.wave]: args => roundedCorners(args, {\r\n corner: DotElements.cornerExtraRounded,\r\n end: DotElements.wave\r\n }),\r\n [DotType.heart]: args => DotElements.heart(args),\r\n [DotType.star]: args => DotElements.star(args),\r\n [DotType.weave]: args => DotElements.weave(args),\r\n [DotType.pentagon]: args => DotElements.star(args, {\r\n spikes: 2.5,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [DotType.hexagon]: args => DotElements.star(args, {\r\n spikes: 3,\r\n outerRadius: args.size / 2,\r\n innerRadius: args.size / 2\r\n }),\r\n [DotType.zebraVertical]: args => stripes(args, { stripe: args.size * 0.8 }),\r\n [DotType.zebraHorizontal]: ({ getNeighbor, ...args }) => stripes({\r\n ...args,\r\n getNeighbor: getNeighbor ? (x, y) => getNeighbor(y, x) : undefined\r\n }, { stripe: args.size * 0.8, rotation: -Math.PI / 2 }),\r\n [DotType.blocksVertical]: args => stripes(args, {\r\n stripe: args.size * 0.8,\r\n endpoint: (_args, _params) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const width = args.size * (1 - rnd() * 0.25)\r\n const x = args.x - (args.size - width) / 2\r\n return DotElements.square({ ..._args, x }, { ..._params, width })\r\n },\r\n dot: (_args) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const height = args.size * (1 - rnd() * 0.25)\r\n const y = args.y + (args.size - height) * rnd()\r\n return DotElements.square({ ..._args, y }, { height })\r\n }\r\n }),\r\n [DotType.blocksHorizontal]: ({ getNeighbor, ...args }) => stripes({\r\n ...args,\r\n getNeighbor: getNeighbor ? (x, y) => getNeighbor(y, x) : undefined\r\n }, {\r\n stripe: args.size * 0.8,\r\n rotation: -Math.PI / 2,\r\n endpoint: (_args, _params) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const width = args.size * (1 - rnd() * 0.25)\r\n const x = args.x - (args.size - width) / 2\r\n return DotElements.square({ ..._args, x }, { ..._params, width })\r\n },\r\n dot: (_args) => {\r\n const rnd = (args.getPRandom || Math.random)\r\n const height = args.size * (1 - rnd() * 0.25)\r\n const y = args.y + (args.size - height) * rnd()\r\n return DotElements.square({ ..._args, y }, { height })\r\n }\r\n }),\r\n [DotType.blobs]: ({ getNeighbor, ...args }) => {\r\n const tl = getNeighbor?.(-1, -1)\r\n const t = getNeighbor?.(0, -1)\r\n const tr = getNeighbor?.(1, -1)\r\n const r = getNeighbor?.(1, 0)\r\n const br = getNeighbor?.(1, 1)\r\n const b = getNeighbor?.(0, 1)\r\n const bl = getNeighbor?.(-1, 1)\r\n const l = getNeighbor?.(-1, 0)\r\n const corners: Record<'tl' | 'tr' | 'bl' | 'br', 'round' | 'out' | 'square'> = {\r\n tl: 'square',\r\n tr: 'square',\r\n bl: 'square',\r\n br: 'square'\r\n }\r\n\r\n if (!l && tl)\r\n corners.tl = 'out'\r\n if (!t && tr)\r\n corners.tr = 'out'\r\n if (!r && br)\r\n corners.br = 'out'\r\n if (!b && bl)\r\n corners.bl = 'out'\r\n\r\n if (!l && !tl && !t)\r\n corners.tl = 'round'\r\n if (!t && !tr && !r)\r\n corners.tr = 'round'\r\n if (!r && !br && !b)\r\n corners.br = 'round'\r\n if (!b && !bl && !l)\r\n corners.bl = 'round'\r\n\r\n return DotElements.blob(args, corners)\r\n }\r\n}\r\n\r\nexport function getQrDotFigure(type: `${DotType}`, plugins?: Plugin[]) {\r\n const defaultDraw = qrDotFigures[type] || qrDotFigures[DotType.square]\r\n if (!plugins?.length)\r\n return defaultDraw\r\n\r\n const drawPlugin = drawPluginDot(plugins)\r\n return (args: DrawArgs) => drawPlugin(args) || defaultDraw(args)\r\n}\r\n\r\nexport function drawPluginDot(plugins: Plugin[]) {\r\n return (args: DrawArgs) => {\r\n for (const plugin of plugins) {\r\n const el = plugin.drawDot?.(args)\r\n if (el)\r\n return el\r\n }\r\n return undefined\r\n }\r\n}\r\n","export const browserImageTools = {\r\n toDataURL: (url: string | Buffer | Blob): Promise<string> => {\r\n if (typeof url == 'string' && url.startsWith('data:')) return Promise.resolve(url)\r\n return new Promise((resolve, reject) => {\r\n if (typeof url == 'string') {\r\n const xhr = new XMLHttpRequest()\r\n xhr.onload = () => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(xhr.response)\r\n }\r\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject\r\n xhr.open('GET', url, true)\r\n xhr.responseType = 'blob'\r\n xhr.send()\r\n } else {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(url as Blob)\r\n }\r\n })\r\n },\r\n getSize: (src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number, height: number }> => new Promise((resolve, reject) => {\r\n const image = new Image()\r\n\r\n if (crossOrigin === 'string') {\r\n image.crossOrigin = crossOrigin\r\n }\r\n\r\n image.onload = (): void => {\r\n resolve({ width: image.width, height: image.height })\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n if (typeof src == 'string') image.src = src\r\n else\r\n browserImageTools\r\n .toDataURL(src)\r\n .then((url) => (image.src = url))\r\n .catch(reject)\r\n })\r\n}\r\n","export function parseColor(cstr: string) {\r\n let m: RegExpExecArray | null\r\n let parts: string[] | number[] = []\r\n let alpha = 1\r\n\r\n cstr = cstr.toLowerCase()\r\n\r\n if (cstr[0] === '#') {\r\n const base = cstr.slice(1)\r\n const size = base.length\r\n const isShort = size <= 4\r\n\r\n if (isShort) {\r\n parts = [parseInt(base[0] + base[0], 16), parseInt(base[1] + base[1], 16), parseInt(base[2] + base[2], 16)]\r\n if (size === 4) {\r\n alpha = parseInt(base[3] + base[3], 16) / 255\r\n }\r\n } else {\r\n parts = [parseInt(base[0] + base[1], 16), parseInt(base[2] + base[3], 16), parseInt(base[4] + base[5], 16)]\r\n if (size === 8) {\r\n alpha = parseInt(base[6] + base[7], 16) / 255\r\n }\r\n }\r\n\r\n if (!parts[0]) parts[0] = 0\r\n if (!parts[1]) parts[1] = 0\r\n if (!parts[2]) parts[2] = 0\r\n } else if ((m = /^((?:rgba?))\\s*\\(([^)]*)\\)/.exec(cstr))) {\r\n const dims = 3\r\n parts = m[2].trim().split(/\\s*[,/]\\s*|\\s+/)\r\n\r\n parts = parts.map((x, i) => {\r\n if (x[x.length - 1] === '%') {\r\n const v = parseFloat(x) / 100\r\n if (i === 3) return v\r\n return v * 255\r\n }\r\n\r\n if (x === 'none') return 0\r\n return parseFloat(x)\r\n })\r\n\r\n alpha = parts.length > dims ? parts.pop()! : 1\r\n } else {\r\n return {\r\n value: cstr,\r\n alpha\r\n }\r\n }\r\n\r\n const value = '#' + parts.map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, '0')).join('')\r\n return {\r\n value,\r\n alpha: Math.max(0, Math.min(1, alpha))\r\n }\r\n}\r\n","export function getRng(matrix: Array<Array<boolean | number | undefined>>, i: number, j: number, match: number | boolean = true) {\r\n let seed: number | undefined\r\n return () => {\r\n if (seed == undefined) {\r\n seed = 0\r\n let ix = 0\r\n for (let xOffset = -3; xOffset < 4; xOffset++)\r\n for (let yOffset = -3; yOffset < 4; yOffset++) {\r\n ix++\r\n seed |= Number(matrix[((i + xOffset + matrix.length) << yOffset) % matrix.length]?.[((j + yOffset + matrix.length) << xOffset) % matrix.length] === match) << ix\r\n }\r\n }\r\n let t = seed += 0x6D2B79F5\r\n t = Math.imul(t ^ t >>> 15, t | 1)\r\n t ^= t + Math.imul(t ^ t >>> 7, t | 61)\r\n return ((t ^ t >>> 14) >>> 0) / 4294967296\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { QRUtil } from '@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js'\r\nimport { drawPluginCornerDot, getQrCornerDotFigure } from '../figures/corner-dot.js'\r\nimport { drawPluginCornerSquare, getQrCornerSquareFigure } from '../figures/corner-square.js'\r\nimport { getQrDotFigure } from '../figures/dot.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { parseColor } from '../utils/color.js'\r\nimport { Gradient, GradientType } from '../utils/gradient.js'\r\nimport { calculateImageSize } from '../utils/image.js'\r\nimport { CornerDotType, CornerSquareType, DotType, ImageMode, Options, ShapeType } from '../utils/options.js'\r\nimport { numToAttr } from '../utils/svg.js'\r\nimport { DrawArgs } from '../types/helper.js'\r\nimport { getRng } from '../utils/random.js'\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n]\r\n\r\nconst cornerSquareTypes = new Set<string>(Object.values(CornerSquareType))\r\nfunction isCornerSquareType(val?: string): val is `${CornerSquareType}` {\r\n return !!(val && cornerSquareTypes.has(val))\r\n}\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n]\r\n\r\nconst cornerDotTypes = new Set<string>(Object.values(CornerDotType))\r\nfunction isCornerDotType(val?: string): val is `${CornerDotType}` {\r\n return !!(val && cornerDotTypes.has(val))\r\n}\r\n\r\nexport class QRSVG {\r\n private _element: SVGSVGElement\r\n private _fakeMatrix?: Array<Array<boolean | undefined>>\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n private defs: SVGElement\r\n\r\n private backgroundMask?: SVGElement\r\n private dotsMask?: SVGElement\r\n private lightDotsMask?: SVGElement\r\n\r\n private qr?: QRCodeMinimal\r\n private document: Document\r\n private imageTools: typeof browserImageTools\r\n\r\n constructor(\r\n private options: Pick<\r\n Options,\r\n | 'width'\r\n | 'height'\r\n | 'size'\r\n | 'document'\r\n | 'imageTools'\r\n | 'image'\r\n | 'imageOptions'\r\n | 'dotsOptions'\r\n | 'cornersDotOptions'\r\n | 'cornersSquareOptions'\r\n | 'backgroundOptions'\r\n | 'shape'\r\n | 'plugins'\r\n > & { errorCorrectionPercent: number }\r\n ) {\r\n this.document = options.document\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'svg')\r\n const size = numToAttr(options.size)\r\n this._element.setAttribute('width', size)\r\n this._element.setAttribute('height', size)\r\n this._element.setAttribute('viewBox', `0 0 ${size} ${size}`)\r\n this.defs = this.document.createElementNS('http://www.w3.org/2000/svg', 'defs')\r\n this._element.appendChild(this.defs)\r\n this.imageTools = options.imageTools || browserImageTools\r\n }\r\n\r\n get width(): number {\r\n return this.options.size\r\n }\r\n\r\n get height(): number {\r\n return this.options.size\r\n }\r\n\r\n async drawQR(qr: QRCodeMinimal): Promise<void> {\r\n const count = qr.getModuleCount()\r\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10)\r\n const dotSize = this.options.dotsOptions.size\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n }\r\n\r\n this.qr = qr\r\n\r\n if (this.options.image) {\r\n //We need it to get image size\r\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin)\r\n const { imageOptions, errorCorrectionPercent } = this.options\r\n\r\n if (imageOptions.mode == ImageMode.background) {\r\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n const maxSize = (this.options.size - 2 * margin * dotSize) * imageOptions.imageSize\r\n let { width, height } = size\r\n\r\n height = (height / width) * maxSize\r\n width = maxSize\r\n\r\n if (height > maxSize) {\r\n width = (width / height) * maxSize\r\n height = maxSize\r\n }\r\n\r\n drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width,\r\n height\r\n }\r\n } else {\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent\r\n const alignment = QRUtil.getPatternPosition(typeNumber)\r\n const maxHiddenDots = Math.floor(\r\n coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment.length ** 2 * 25)\r\n )\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: size.width,\r\n originalHeight: size.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize,\r\n margin: imageOptions.margin\r\n })\r\n }\r\n }\r\n\r\n this.drawBackground()\r\n\r\n if (\r\n this.options.imageOptions.mode != ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this.options.imageOptions.mode == ImageMode.center) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false\r\n }\r\n }\r\n\r\n if ((i < 8 && j < 8) || (i >= count - 8 && j < 8) || (j >= count - 8 && i < 8)) return false\r\n\r\n return true\r\n })\r\n\r\n if (\r\n this.options.imageOptions.mode == ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawCorners()\r\n }\r\n\r\n drawBackground(): void {\r\n const options = this.options\r\n\r\n if (this._element && options.backgroundOptions) {\r\n const gradientOptions = options.backgroundOptions.gradient\r\n const color = options.backgroundOptions.color\r\n\r\n this.createColor({\r\n options: gradientOptions,\r\n color,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n height: options.size,\r\n width: options.size,\r\n name: 'background-color'\r\n })\r\n\r\n const element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n this.backgroundMask = this.createMask('mask-background-color')\r\n this.defs.appendChild(this.backgroundMask)\r\n\r\n element.setAttribute('x', numToAttr(0))\r\n element.setAttribute('y', numToAttr(0))\r\n element.setAttribute('width', numToAttr(options.size))\r\n element.setAttribute('height', numToAttr(options.size))\r\n element.setAttribute('rx', numToAttr((options.size / 2) * (options.backgroundOptions.round || 0)))\r\n\r\n this.backgroundMask.appendChild(element)\r\n }\r\n }\r\n\r\n drawDots(filter?: (i: number, j: number) => boolean): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const options = this.options\r\n const count = this.qr.getModuleCount()\r\n\r\n if (count > options.size) {\r\n throw new Error('The canvas is too small')\r\n }\r\n\r\n const dotSize = this.options.dotsOptions.size\r\n let size = options.size\r\n if (options.imageOptions.mode == ImageMode.background) size -= 2 * dotSize * (options.imageOptions.margin || 0)\r\n const beginning = Math.floor((options.size - count * dotSize) / 2)\r\n let draw = getQrDotFigure(options.dotsOptions.type, options.plugins)\r\n\r\n this.dotsMask = this.createMask('mask-dot-color')\r\n this.defs.appendChild(this.dotsMask)\r\n\r\n if (options.imageOptions.mode == ImageMode.background) {\r\n this.lightDotsMask = this.createMask('mask-light-dot-color')\r\n this.defs.appendChild(this.lightDotsMask)\r\n }\r\n\r\n let margin = 0\r\n let additionalDots = 0\r\n let fakeCount = count\r\n\r\n if (options.shape === ShapeType.circle) {\r\n margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n additionalDots = Math.floor((size / dotSize - count - 2 * margin) / 2)\r\n fakeCount = count + additionalDots * 2\r\n } else if (options.imageOptions.mode == ImageMode.background) {\r\n additionalDots = 1\r\n fakeCount = count + additionalDots * 2\r\n }\r\n\r\n const fakeBeginning = beginning - additionalDots * dotSize\r\n const colorCount = count + additionalDots * 2\r\n this._fakeMatrix = new Array(fakeCount)\r\n const center = Math.floor(fakeCount / 2)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n this._fakeMatrix[i] = new Array(fakeCount)\r\n for (let j = 0; j < fakeCount; j++) {\r\n if (\r\n i > additionalDots - 1 &&\r\n i < fakeCount - additionalDots &&\r\n j > additionalDots - 1 &&\r\n j < fakeCount - additionalDots\r\n ) {\r\n const ii = i - additionalDots\r\n const jj = j - additionalDots\r\n if (filter && !filter(ii, jj)) this._fakeMatrix[i][j] = undefined\r\n else this._fakeMatrix[i][j] = !!this.qr.isDark(jj, ii)\r\n continue\r\n }\r\n\r\n if (\r\n options.shape === ShapeType.circle &&\r\n Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center\r\n ) {\r\n this._fakeMatrix[i][j] = undefined\r\n continue\r\n }\r\n\r\n if (\r\n i == additionalDots - 1 ||\r\n i == fakeCount - additionalDots ||\r\n j == additionalDots - 1 ||\r\n j == fakeCount - additionalDots\r\n ) {\r\n if (\r\n (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount - additionalDots - 9)) ||\r\n (j == fakeCount - additionalDots && i < additionalDots + 8) ||\r\n (i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount - additionalDots - 9)) ||\r\n (i == fakeCount - additionalDots && j < additionalDots + 8)\r\n )\r\n this._fakeMatrix[i][j] = undefined\r\n else this._fakeMatrix[i][j] = false\r\n continue\r\n }\r\n\r\n // Get random dots from QR code to show it outside of QR code\r\n this._fakeMatrix[i][j] = this.qr.isDark(\r\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\r\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\r\n )\r\n }\r\n }\r\n\r\n const typeNr = (count - 17) / 4\r\n const alignment = QRUtil.getPatternPosition(typeNr)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n const iAlign = alignment.find((v) => i - additionalDots > v - 3 && i - additionalDots < v + 3)\r\n for (let j = 0; j < fakeCount; j++) {\r\n const jAlign = alignment.find((v) => j - additionalDots > v - 3 && j - additionalDots < v + 3)\r\n if (this._fakeMatrix[i][j] == undefined) continue\r\n\r\n if (this.lightDotsMask) {\r\n draw =\r\n iAlign &&\r\n jAlign &&\r\n ((iAlign != alignment[0] && jAlign != alignment[0]) ||\r\n (jAlign != alignment[0] && jAlign != alignment[alignment.length - 1]) ||\r\n (iAlign != alignment[0] && iAlign != alignment[alignment.length - 1]))\r\n ? getQrDotFigure(DotType.square)\r\n : getQrDotFigure(DotType.tinySquare)\r\n }\r\n\r\n if (!this._fakeMatrix[i][j]) {\r\n if (this.lightDotsMask) {\r\n if (this.lightDotsMask) {\r\n this.lightDotsMask.appendChild(draw({\r\n x: fakeBeginning + i * dotSize,\r\n y: fakeBeginning + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => this._fakeMatrix![i + xOffset]?.[j + yOffset] === false,\r\n getPRandom: getRng(this._fakeMatrix, i, j, false)\r\n }))\r\n }\r\n }\r\n continue\r\n }\r\n\r\n if (this.dotsMask) {\r\n this.dotsMask.appendChild(draw({\r\n x: fakeBeginning + i * dotSize,\r\n y: fakeBeginning + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => this._fakeMatrix![i + xOffset]?.[j + yOffset] === true,\r\n getPRandom: getRng(this._fakeMatrix, i, j)\r\n }))\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask) {\r\n this.createColor({\r\n options: options.imageOptions.fill.gradient,\r\n color: options.imageOptions.fill.color,\r\n additionalRotation: 0,\r\n x: fakeBeginning,\r\n y: fakeBeginning,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'light-dot-color'\r\n })\r\n }\r\n\r\n this.createColor({\r\n options: options.dotsOptions?.gradient,\r\n color: options.dotsOptions.color,\r\n additionalRotation: 0,\r\n x: fakeBeginning,\r\n y: fakeBeginning,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'dot-color'\r\n })\r\n }\r\n\r\n drawCorners(): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const element = this._element\r\n const options = this.options\r\n\r\n if (!element) {\r\n throw new Error('Element code is not defined')\r\n }\r\n\r\n const count = this.qr.getModuleCount()\r\n const dotSize = this.options.dotsOptions.size\r\n const cornersSquareSize = dotSize * 7\r\n const cornersDotSize = dotSize * 3\r\n const beginning = Math.floor((options.size - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n const x = beginning + column * dotSize * (count - 7)\r\n const y = beginning + row * dotSize * (count - 7)\r\n let cornersSquareMask = this.dotsMask\r\n let cornersDotMask = this.dotsMask\r\n\r\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\r\n cornersSquareMask = this.createMask(`mask-corners-square-color-${column}-${row}`)\r\n this.defs.appendChild(cornersSquareMask)\r\n cornersDotMask = cornersSquareMask\r\n cornersDotMask = cornersSquareMask\r\n\r\n this.createColor({\r\n options: options.cornersSquareOptions?.gradient,\r\n color: options.cornersSquareOptions?.color,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n height: cornersSquareSize,\r\n width: cornersSquareSize,\r\n name: `corners-square-color-${column}-${row}`\r\n })\r\n }\r\n\r\n const squareArgs: DrawArgs = {\r\n x,\r\n y,\r\n size: cornersSquareSize,\r\n document: this.options.document,\r\n rotation\r\n }\r\n const pluinCornerSquare = options.plugins?.length ? drawPluginCornerSquare(options.plugins)(squareArgs) : undefined\r\n\r\n if (pluinCornerSquare) {\r\n const [cornerElement, cornerFill] = pluinCornerSquare\r\n\r\n if (cornersSquareMask) {\r\n cornersSquareMask.appendChild(cornerElement)\r\n }\r\n\r\n if (this.lightDotsMask) {\r\n this.lightDotsMask.appendChild(cornerFill)\r\n }\r\n } else if (isCornerSquareType(options.cornersSquareOptions?.type)) {\r\n const draw = getQrCornerSquareFigure(options.cornersSquareOptions.type)\r\n\r\n const [cornerElement, cornerFill] = draw(squareArgs)\r\n\r\n if (cornersSquareMask) {\r\n cornersSquareMask.appendChild(cornerElement)\r\n }\r\n\r\n if (this.lightDotsMask) {\r\n this.lightDotsMask.appendChild(cornerFill)\r\n }\r\n } else {\r\n const draw = getQrDotFigure(options.cornersSquareOptions?.type || options.dotsOptions.type, options.plugins)\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n if (this.lightDotsMask && !dotMask[i]?.[j]) {\r\n if (this.lightDotsMask) {\r\n this.lightDotsMask.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean =>\r\n !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset],\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n continue\r\n }\r\n\r\n if (cornersSquareMask) {\r\n cornersSquareMask.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset],\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask)\r\n for (let i = -1; i < 8; i++) {\r\n for (let j = -1; j < 8; j++) {\r\n if (i == -1 || i == 7 || j == -1 || j == 7) {\r\n if (this.lightDotsMask) {\r\n this.lightDotsMask.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\r\n const ii = i + xOffset\r\n const jj = j + yOffset\r\n return ii >= -1 && ii <= 7 && jj >= -1 && jj <= 7 && (ii == -1 || ii == 7 || jj == -1 || jj == 7)\r\n },\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\r\n cornersDotMask = this.createMask(`mask-corners-dot-color-${column}-${row}`)\r\n this.defs.appendChild(cornersDotMask)\r\n\r\n this.createColor({\r\n options: options.cornersDotOptions?.gradient,\r\n color: options.cornersDotOptions?.color,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n height: cornersDotSize,\r\n width: cornersDotSize,\r\n name: `corners-dot-color-${column}-${row}`\r\n })\r\n }\r\n\r\n const dotArgs: DrawArgs = {\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n size: cornersDotSize,\r\n document: this.document,\r\n rotation\r\n }\r\n const pluinCornerDot = options.plugins?.length ? drawPluginCornerDot(options.plugins)(dotArgs) : undefined\r\n\r\n if (pluinCornerDot) {\r\n if (cornersDotMask) {\r\n cornersDotMask.appendChild(pluinCornerDot)\r\n }\r\n } else if (isCornerDotType(options.cornersDotOptions?.type)) {\r\n const draw = getQrCornerDotFigure(options.cornersDotOptions.type)\r\n\r\n if (cornersDotMask) {\r\n cornersDotMask.appendChild(draw(dotArgs))\r\n }\r\n } else {\r\n const draw = getQrDotFigure(options.cornersDotOptions?.type || options.dotsOptions.type, options.plugins)\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue\r\n }\r\n\r\n if (cornersDotMask) {\r\n cornersDotMask.appendChild(draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n document: this.options.document,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset],\r\n getPRandom: getRng(this._fakeMatrix!, x / dotSize + i, y / dotSize + j, false)\r\n }))\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n async drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number\r\n height: number\r\n count: number\r\n dotSize: number\r\n }): Promise<void> {\r\n const options = this.options\r\n const beginning = Math.floor((options.size - count * dotSize) / 2)\r\n let margin = options.imageOptions.margin * dotSize\r\n if (options.imageOptions.mode == ImageMode.background) margin = 0\r\n const dx = beginning + margin + (count * dotSize - width) / 2\r\n const dy = beginning + margin + (count * dotSize - height) / 2\r\n const dw = width - margin * 2\r\n const dh = height - margin * 2\r\n\r\n const imageUrl = await this.imageTools.toDataURL(options.image || '')\r\n let image: SVGElement = this.document.createElementNS('http://www.w3.org/2000/svg', 'image')\r\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageUrl || '')\r\n\r\n if (imageUrl.startsWith('data:image/svg+xml;')) {\r\n let data = imageUrl.substring(19)\r\n const i = data.indexOf(',')\r\n const encoding = data.substring(0, i)\r\n data = data.substring(i + 1)\r\n\r\n switch (encoding) {\r\n case 'base64':\r\n data = typeof atob == 'function' ? atob(data) : Buffer.from(data, 'base64').toString('utf8')\r\n break\r\n default:\r\n data = ''\r\n break\r\n }\r\n\r\n if (data) {\r\n const container = new DOMParser().parseFromString(data, 'text/xml')\r\n const rootEl = Array.from(container.getElementsByTagName('svg'))\r\n if (rootEl.length) {\r\n image = rootEl[0]\r\n image.setAttribute('overflow', 'visible')\r\n }\r\n }\r\n }\r\n\r\n image.setAttribute('x', numToAttr(dx))\r\n image.setAttribute('y', numToAttr(dy))\r\n image.setAttribute('width', `${numToAttr(dw)}px`)\r\n image.setAttribute('height', `${numToAttr(dh)}px`)\r\n\r\n this._element.appendChild(image)\r\n }\r\n\r\n private createColor({\r\n options,\r\n color,\r\n additionalRotation,\r\n x,\r\n y,\r\n height,\r\n width,\r\n name\r\n }: {\r\n options?: Gradient\r\n color?: string\r\n additionalRotation: number\r\n x: number\r\n y: number\r\n height: number\r\n width: number\r\n name: string\r\n }): void {\r\n const gradientSize = width > height ? width : height\r\n\r\n x -= this.options.dotsOptions.size\r\n y -= this.options.dotsOptions.size\r\n width += 2 * this.options.dotsOptions.size\r\n height += 2 * this.options.dotsOptions.size\r\n\r\n const rect = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n rect.setAttribute('x', numToAttr(x))\r\n rect.setAttribute('y', numToAttr(y))\r\n rect.setAttribute('height', numToAttr(height))\r\n rect.setAttribute('width', numToAttr(width))\r\n rect.setAttribute('clip-path', `url(#mask-${name})`)\r\n\r\n if (options) {\r\n let gradient: SVGElement\r\n if (options.type === GradientType.radial) {\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('fx', numToAttr(x + width / 2))\r\n gradient.setAttribute('fy', numToAttr(y + height / 2))\r\n gradient.setAttribute('cx', numToAttr(x + width / 2))\r\n gradient.setAttribute('cy', numToAttr(y + height / 2))\r\n gradient.setAttribute('r', numToAttr(gradientSize / 2))\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI)\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI)\r\n let x0 = x + width / 2\r\n let y0 = y + height / 2\r\n let x1 = x + width / 2\r\n let y1 = y + height / 2\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - width / 2\r\n y0 = y0 - (height / 2) * Math.tan(rotation)\r\n x1 = x1 + width / 2\r\n y1 = y1 + (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - height / 2\r\n x0 = x0 - width / 2 / Math.tan(rotation)\r\n y1 = y1 + height / 2\r\n x1 = x1 + width / 2 / Math.tan(rotation)\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + width / 2\r\n y0 = y0 + (height / 2) * Math.tan(rotation)\r\n x1 = x1 - width / 2\r\n y1 = y1 - (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + height / 2\r\n x0 = x0 + width / 2 / Math.tan(rotation)\r\n y1 = y1 - height / 2\r\n x1 = x1 - width / 2 / Math.tan(rotation)\r\n }\r\n\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('x1', numToAttr(x0))\r\n gradient.setAttribute('y1', numToAttr(y0))\r\n gradient.setAttribute('x2', numToAttr(x1))\r\n gradient.setAttribute('y2', numToAttr(y1))\r\n }\r\n\r\n options.colorStops.forEach((stopCfg: { offset: number, color: string }) => {\r\n const stop = this.document.createElementNS('http://www.w3.org/2000/svg', 'stop')\r\n stop.setAttribute('offset', `${numToAttr(100 * stopCfg.offset)}%`)\r\n\r\n const parsed = parseColor(stopCfg.color)\r\n stop.setAttribute('stop-color', parsed.value)\r\n if (parsed.alpha < 1) stop.setAttribute('stop-opacity', parsed.alpha.toFixed(7))\r\n gradient.appendChild(stop)\r\n })\r\n\r\n rect.setAttribute('fill', `url(#${name})`)\r\n this.defs.appendChild(gradient)\r\n } else if (color) {\r\n const parsed = parseColor(color)\r\n rect.setAttribute('fill', parsed.value)\r\n if (parsed.alpha < 1) rect.setAttribute('opacity', parsed.alpha.toFixed(7))\r\n }\r\n\r\n this._element.appendChild(rect)\r\n }\r\n\r\n private createMask(id: string) {\r\n const mask = this.document.createElementNS('http://www.w3.org/2000/svg', 'clipPath')\r\n mask.setAttribute('id', id)\r\n mask.setAttribute('clipPathUnits', 'userSpaceOnUse')\r\n\r\n return mask\r\n }\r\n}\r\n","interface ImageSizeOptions {\r\n originalHeight: number\r\n originalWidth: number\r\n maxHiddenDots: number\r\n maxHiddenAxisDots?: number\r\n dotSize: number\r\n margin: number\r\n}\r\n\r\ninterface ImageSizeResult {\r\n height: number\r\n width: number\r\n hideYDots: number\r\n hideXDots: number\r\n}\r\n\r\nexport function calculateImageSize({\r\n originalHeight,\r\n originalWidth,\r\n maxHiddenDots,\r\n maxHiddenAxisDots,\r\n dotSize,\r\n margin\r\n}: ImageSizeOptions): ImageSizeResult {\r\n const hideDots = { x: 0, y: 0 }\r\n const imageSize = { x: 0, y: 0 }\r\n\r\n if (\r\n originalHeight <= 0 ||\r\n originalWidth <= 0 ||\r\n maxHiddenDots <= 0 ||\r\n dotSize <= 0 ||\r\n 4 * margin ** 2 > maxHiddenDots\r\n ) {\r\n return {\r\n height: 0,\r\n width: 0,\r\n hideYDots: 0,\r\n hideXDots: 0\r\n }\r\n }\r\n\r\n //If set, ensure maxHiddenAxisDots is odd and at least 1\r\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1)\r\n\r\n //Determine the bigger and smaller image dimension\r\n const dimMax = Math.max(originalWidth, originalHeight)\r\n const dimMin = Math.min(originalWidth, originalHeight)\r\n\r\n //Find max image size along the bigger dimension\r\n let lower = 0\r\n let upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin\r\n do {\r\n const newSize = lower + (upper - lower) / 2\r\n let dotsMax = Math.max(1, Math.ceil(newSize + 2 * margin))\r\n if (dotsMax % 2 == 0) dotsMax++\r\n let dotsMin = Math.max(1, Math.ceil((newSize * dimMin) / dimMax + 2 * margin))\r\n if (dotsMin % 2 == 0) dotsMin++\r\n\r\n if (dotsMax * dotsMin > maxHiddenDots) upper = newSize\r\n else lower = newSize\r\n } while (Math.abs(lower - upper) > 0.001)\r\n\r\n //Calculate how many dots the given size corresponds to\r\n const size = lower\r\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin))\r\n if (hideMax % 2 == 0) hideMax++\r\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin))\r\n if (hideMin % 2 == 0) hideMin++\r\n\r\n //Set hidden dots along bigger and smaller dimension to the right axis\r\n if (originalWidth > originalHeight) {\r\n hideDots.x = hideMax\r\n hideDots.y = hideMin\r\n } else {\r\n hideDots.x = hideMin\r\n hideDots.y = hideMax\r\n }\r\n\r\n //Fit image to the hidden dots\r\n const maxW = (hideDots.x - 2 * margin) * dotSize\r\n const maxH = (hideDots.y - 2 * margin) * dotSize\r\n imageSize.x = maxW\r\n imageSize.y = (maxW * originalHeight) / originalWidth\r\n if (imageSize.y > maxH) {\r\n imageSize.y = maxH\r\n imageSize.x = (maxH * originalWidth) / originalHeight\r\n }\r\n\r\n return {\r\n height: Math.round(imageSize.y + 2 * margin * dotSize),\r\n width: Math.round(imageSize.x + 2 * margin * dotSize),\r\n hideYDots: hideDots.y,\r\n hideXDots: hideDots.x\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\nimport { stringToBytes_UTF8 } from '@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js'\nimport { RecursivePartial } from '../types/helper.js'\nimport { mergeDeep } from '../utils/merge.js'\nimport { ImageMode, Options, ShapeType, defaultOptions, sanitizeOptions } from '../utils/options.js'\nimport { ErrorCorrectionPercents, getMode } from '../utils/qrcode.js'\nimport { QRSVG } from './qr-svg.js'\n\nObject.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8)\n\nexport type ExtensionFunction = (svg: SVGSVGElement, options: Options) => void\n\nexport class QRCodeStyling {\n private options: Options\n private container?: HTMLElement\n private qr?: QRCodeMinimal\n private extension?: ExtensionFunction\n private svgDrawingPromise?: Promise<void>\n private qrSVG?: QRSVG\n\n get size() {\n if (this.qrSVG)\n return {\n width: this.qrSVG.width,\n height: this.qrSVG.height\n }\n return undefined\n }\n\n constructor(options?: RecursivePartial<Options>) {\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions\n this.update()\n }\n\n update(\n /** The same options as for initialization */\n options?: RecursivePartial<Options>\n ): void {\n if (this.container) this.container.innerHTML = ''\n\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options\n\n if (!this.options.data) {\n return\n }\n\n if (this.options.stringToBytesFuncs) {\n Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs)\n delete this.options.stringToBytesFuncs\n }\n\n this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel)\n const mode = this.options.qrOptions.mode || getMode(this.options.data)\n this.qr.addData(this.options.data, mode)\n this.qr.make()\n\n this.setupSvg()\n\n this.append(this.container)\n }\n\n append(\n /** This container will be used for appending of the QR code */\n container?: HTMLElement\n ): void {\n if (!container) {\n return\n }\n\n if (this.qrSVG?.element) {\n container.appendChild(this.qrSVG.element)\n }\n\n this.container = container\n }\n\n /**\n * @deprecated Use options.plugins with a postProcess hook\n * @example\n *\n * ```js\n * const extension = (svg, options) => {\n * const { width, height } = options;\n * const size = Math.min(width, height);\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n * const borderAttributes = {\n * fill: \"none\",\n * x: (width - size + 40) / 2,\n * y: (height - size + 40) / 2,\n * width: size - 40,\n * height: size - 40,\n * stroke: \"black\",\n * \"stroke-width\": 40,\n * rx: 100\n * };\n * Object.keys(borderAttributes).forEach((attribute) => {\n * border.setAttribute(attribute, borderAttributes[attribute]);\n * });\n * svg.appendChild(border);\n * };\n * ```\n */\n applyExtension(\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\n extension: ExtensionFunction\n ): void {\n if (!extension) {\n throw new Error('Extension function should be defined.')\n }\n\n this.extension = extension\n this.update()\n }\n\n /**\n * @deprecated Use options.plugins with a postProcess hook\n */\n deleteExtension(): void {\n this.extension = undefined\n this.update()\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this.qr) throw new Error('QR code is empty')\n\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\n this.setupSvg()\n }\n await this.svgDrawingPromise\n\n if (!this.qrSVG?.element) {\n return\n }\n\n const serializer = new XMLSerializer()\n let source = serializer.serializeToString(this.qrSVG.element)\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source\n return source\n }\n\n private setupSvg(): void {\n if (!this.qr) {\n return\n }\n let moduleCount = this.qr.getModuleCount()\n if (this.options.imageOptions.mode == ImageMode.background && this.options.shape != ShapeType.circle)\n moduleCount += 2\n let count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount)\n if (count % 2 == 0) count -= 1\n let margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\n if (this.options.imageOptions.mode == ImageMode.background) margin += this.options.imageOptions.margin || 0\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin))\n this.qrSVG = new QRSVG({\n ...this.options,\n width: size,\n height: size,\n size,\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\n })\n\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\n if (!this.qrSVG?.element) return\n this.options.plugins?.forEach(plugin => plugin.postProcess?.(this.qrSVG!.element!, {\n ...this.options,\n width: size,\n height: size,\n size\n }))\n this.extension?.(this.qrSVG.element, {\n ...this.options,\n width: size,\n height: size,\n size\n })\n })\n }\n}\n","/**\n * stringToBytes_UTF8\n * contributed by elhigu\n */\nexport const stringToBytes_UTF8 = {\n UTF8: (s) => {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 0x80)\n utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n else {\n // surrogate pair\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n }\n};\n//# sourceMappingURL=stringToBytes_UTF8.js.map","export interface CanvasOptions {\r\n width: number\r\n height: number\r\n margin: number\r\n}\r\n\r\nexport const defaultCanvasOptions: CanvasOptions = {\r\n width: 300,\r\n height: 300,\r\n margin: 0\r\n}\r\n\r\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\r\n const newOptions = { ...options }\r\n\r\n newOptions.width = Number(newOptions.width)\r\n newOptions.height = Number(newOptions.height)\r\n newOptions.margin = Number(newOptions.margin)\r\n\r\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\r\n newOptions.margin = Math.min(newOptions.width, newOptions.height)\r\n }\r\n\r\n return newOptions\r\n}\r\n","/**\r\n * @license -------------------------------------------------------------------\r\n * module: Lanczos Resampling\r\n * src: http://blog.yoz.sk/2010/11/lanczos-resampling-with-actionscript/\r\n * authors: Jozef Chutka\r\n * copyright: (c) 2009-2010 Jozef Chutka\r\n * license: MIT\r\n * -------------------------------------------------------------------\r\n * Permission is hereby granted, free of charge, to any person\r\n * obtaining a copy of this software and associated documentation\r\n * files (the \"Software\"), to deal in the Software without\r\n * restriction, including without limitation the rights to use,\r\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the\r\n * Software is furnished to do so, subject to the following\r\n * conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\n * OTHER DEALINGS IN THE SOFTWARE.\r\n */\r\n\r\nexport type Kernel = (size: number, x: number) => number\r\n\r\nexport enum KernelType {\r\n Lanczos = 'lanczos',\r\n Linear = 'linear'\r\n}\r\n\r\nconst CACHE_PRECISION = 1000\r\n\r\nexport const Kernels: { [P in KernelType]: Kernel } = {\r\n [KernelType.Lanczos]: (size, x) => {\r\n if (x >= size || x <= -size) return 0\r\n if (x === 0) return 1\r\n const xpi = x * Math.PI\r\n return size * Math.sin(xpi) * Math.sin(xpi / size) / (xpi * xpi)\r\n },\r\n [KernelType.Linear]: (size, x) => {\r\n x = Math.abs(x)\r\n if (x <= 1) return (1 - x) * size\r\n return 0\r\n }\r\n}\r\n\r\nfunction createCache(kernel: Kernel, cachePrecision: number, filterSize: number) {\r\n const cache: { [key: number]: number } = {}\r\n const max = filterSize * filterSize * cachePrecision\r\n const iPrecision = 1.0 / cachePrecision\r\n for (let cacheKey = 0; cacheKey < max; cacheKey++) {\r\n const value = kernel(filterSize, Math.sqrt(cacheKey * iPrecision))\r\n cache[cacheKey] = value < 0 ? 0 : value\r\n }\r\n return cache\r\n}\r\n\r\nfunction baseLength(val: number | SVGAnimatedLength) {\r\n if (typeof val == 'object') {\r\n val.baseVal.convertToSpecifiedUnits(val.baseVal.SVG_LENGTHTYPE_PX)\r\n return val.baseVal.value\r\n }\r\n return val\r\n}\r\n\r\nexport function lanczosResize(canvas: HTMLCanvasElement | OffscreenCanvas, opt: {\r\n width: number\r\n height: number\r\n}, kernel = Kernels[KernelType.Lanczos]): ImageData {\r\n const cwidth = baseLength((canvas as any).width)\r\n const cheight = baseLength((canvas as any).height)\r\n const ctx = canvas.getContext('2d')!\r\n\r\n const { width, height } = opt\r\n\r\n const src = ctx.getImageData(0, 0, cwidth, cheight)\r\n let dst = ctx.createImageData(width, height)\r\n\r\n // No need to resize\r\n if (src.data.length == dst.data.length) {\r\n dst = src\r\n } else {\r\n const sdata = src.data\r\n const ddata = dst.data\r\n\r\n const values = []\r\n const sX = width / cwidth\r\n const sY = height / cheight\r\n\r\n let filterSize = 3\r\n if (sX > 0.01 && sY > 0.01 && sX < 1 && sY < 1) {\r\n if (sX <= 0.2 || sY <= 0.2) {\r\n filterSize = 2\r\n } else if (sX <= 0.05 || sY <= 0.05) {\r\n filterSize = 1\r\n } else {\r\n filterSize = 3\r\n }\r\n }\r\n const sw1 = cwidth - 1\r\n const sh1 = cheight - 1\r\n const isx = 1.0 / sX\r\n const isy = 1.0 / sX\r\n const cw = 1.0 / width\r\n const ch = 1.0 / height\r\n const csx = Math.min(1, sX) * Math.min(1, sX)\r\n const csy = Math.min(1, sX) * Math.min(1, sX)\r\n const cachePrecision = CACHE_PRECISION\r\n // filterSize = filterSize || FILTER_SIZE\r\n const cache = createCache(kernel, cachePrecision, filterSize)\r\n let y = height\r\n\r\n while (y--) {\r\n const sourcePixelY = (y + 0.5) * isy\r\n let y1b = sourcePixelY - filterSize\r\n if (y1b < 0) y1b = 0\r\n let y1e = sourcePixelY + filterSize\r\n const y1et = y1e\r\n if (y1e != y1et) y1e = y1et + 1\r\n if (y1e > sh1) y1e = sh1\r\n const cy = y * ch - sourcePixelY\r\n const y3 = y * width\r\n let x = width\r\n while (x--) {\r\n const sourcePixelX = (x + 0.5) * isx\r\n let x1b = sourcePixelX - filterSize\r\n if (x1b < 0) x1b = 0\r\n let x1e = sourcePixelX + filterSize\r\n const x1et = x1e\r\n if (x1e != x1et) x1e = x1et + 1\r\n if (x1e > sw1) x1e = sw1\r\n const cx = x * cw - sourcePixelX\r\n let i = 0\r\n let total = 0\r\n for (let y1 = y1b >> 0; y1 <= y1e; y1++) {\r\n const distanceY = (y1 + cy) * (y1 + cy) * csy\r\n for (let x1 = x1b >> 0; x1 <= x1e; x1++) {\r\n total += values[i++] = cache[((x1 + cx) * (x1 + cx) * csx + distanceY) * cachePrecision >> 0] || 0\r\n }\r\n }\r\n total = 1.0 / total\r\n i = 0\r\n let a = 0\r\n let r = 0\r\n let g = 0\r\n let b = 0\r\n for (let y1 = y1b >> 0; y1 <= y1e; y1++) {\r\n const y2 = y1 * cwidth\r\n for (let x1 = x1b >> 0; x1 <= x1e; x1++) {\r\n const value = values[i++] * total\r\n const idxi = ((y2 + x1) >> 0) * 4\r\n r += sdata[idxi] * value\r\n g += sdata[idxi + 1] * value\r\n b += sdata[idxi + 2] * value\r\n a += sdata[idxi + 3] * value\r\n }\r\n }\r\n const idx = ((x + y3) >> 0) * 4\r\n ddata[idx] = r\r\n ddata[idx + 1] = g\r\n ddata[idx + 2] = b\r\n ddata[idx + 3] = a\r\n }\r\n }\r\n }\r\n\r\n return dst\r\n}\r\n","import { QRCodeStyling } from '../core/qr-code-styling.js'\r\nimport { RecursivePartial } from '../types/helper.js'\r\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from '../utils/canvas-options.js'\r\nimport { mergeDeep } from '../utils/merge.js'\r\nimport { lanczosResize } from './resize.js'\r\n\r\nexport enum FileExtension {\r\n svg = 'svg',\r\n png = 'png',\r\n jpeg = 'jpeg',\r\n webp = 'webp'\r\n}\r\n\r\nexport function drawToCanvas(\r\n qrCode: QRCodeStyling,\r\n options?: RecursivePartial<CanvasOptions>\r\n): { canvas: HTMLCanvasElement, canvasDrawingPromise: Promise<void> | undefined } | undefined {\r\n const { width, height, margin } = options\r\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\r\n : defaultCanvasOptions\r\n\r\n const canvas = document.createElement('canvas')\r\n canvas.width = width\r\n canvas.height = height\r\n\r\n const size = Math.min(width, height) - 2 * margin\r\n\r\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\r\n if (!xml) return\r\n const viewBox = xml.match(/viewBox=\"([^\"]+)\"/i)![1]\r\n const svg64 = btoa(xml)\r\n const image64 = 'data:image/svg+xml;base64,' + svg64\r\n const image = new Image()\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n image.onload = (): void => {\r\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\r\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height))\r\n const [x, y, w, h] = viewBox.split(/\\s+/g).map(parseFloat).map(v => v * aaFactor)\r\n const dx = ((x % 1) + 1) % 1\r\n const dy = ((y % 1) + 1) % 1\r\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas\r\n try {\r\n aaCanvas = new OffscreenCanvas(Math.ceil(w + dx + 2), Math.ceil(h + dy + 2))\r\n } catch (_) {\r\n // Fallback to regular canvas element\r\n aaCanvas = document.createElement('canvas')\r\n aaCanvas.width = Math.ceil(w + dx + 2)\r\n aaCanvas.height = Math.ceil(h + dy + 2)\r\n }\r\n aaCanvas.getContext('2d')?.drawImage(image, dx + 1, dy + 1, w, h)\r\n const imgData = lanczosResize(aaCanvas, {\r\n width: width - 2 * margin,\r\n height: height - 2 * margin\r\n })\r\n\r\n canvas?.getContext('2d')?.putImageData(imgData, margin, margin)\r\n resolve()\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n image.src = image64\r\n })\r\n })\r\n\r\n return { canvas, canvasDrawingPromise }\r\n}\r\n\r\nexport async function download(\r\n qrCode: QRCodeStyling,\r\n downloadOptions?: { name?: string, extension: `${FileExtension}` },\r\n options?: RecursivePartial<CanvasOptions>\r\n): Promise<void> {\r\n let extension: `${FileExtension}` = FileExtension.png\r\n let name = 'qr'\r\n\r\n if (downloadOptions) {\r\n if (downloadOptions.name) {\r\n name = downloadOptions.name\r\n }\r\n if (downloadOptions.extension) {\r\n extension = downloadOptions.extension\r\n }\r\n }\r\n\r\n if (extension.toLowerCase() === 'svg') {\r\n const source = await qrCode.serialize()\r\n if (!source) return\r\n const url = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source)\r\n downloadURI(url, `${name}.svg`)\r\n } else {\r\n const res = drawToCanvas(qrCode, options)\r\n if (!res) return\r\n const { canvas, canvasDrawingPromise } = res\r\n await canvasDrawingPromise\r\n const url = canvas.toDataURL(`image/${extension}`)\r\n downloadURI(url, `${name}.${extension}`)\r\n }\r\n}\r\n\r\nexport function downloadURI(uri: string, name: string): void {\r\n const link = document.createElement('a')\r\n link.download = name\r\n link.href = uri\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n}\r\n","export { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nexport { QRCodeStyling, type ExtensionFunction } from './core/qr-code-styling.js'\r\nexport { FileExtension } from './tools/browser-utils.js'\r\nexport { type RecursivePartial } from './types/helper.js'\r\nexport { type CanvasOptions } from './utils/canvas-options.js'\r\nexport { GradientType, type Gradient } from './utils/gradient.js'\r\nexport { CornerDotType, CornerSquareType, DotType, ImageMode, ShapeType, type Options, type Plugin } from './utils/options.js'\r\nexport { ErrorCorrectionPercents } from './utils/qrcode.js'\r\nimport * as _browserUtils from './tools/browser-utils.js'\r\n\r\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils\r\n"],"names":["BitBuffer","buffer","length","constructor","this","getBuffer","getLengthInBits","toString","i","getBit","index","put","num","putBit","bit","push","ErrorCorrectLevel","v","L","M","Q","H","QRMath","static","glog","n","LOG_TABLE","initialize","Error","gexp","EXP_TABLE","w","Polynomial","shift","offset","len","getAt","getLength","toLogString","multiply","e","j","mod","ratio","Mode","MODE_NUMBER","MODE_ALPHA_NUM","MODE_8BIT_BYTE","MODE_KANJI","QRData","mode","data","getMode","getData","typeNumber","QR8BitByte","stringToBytes","super","write","forEach","val","QRAlphaNum","s","getCode","charAt","c","charCodeAt","QRNumber","strToNum","substring","chatToNum","MaskPattern","C","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","QRUtil","getPatternPosition","PATTERN_POSITION_TABLE","getMaxLength","errorCorrectLevel","m","MAX_LENGTH","getErrorCorrectPolynomial","errorCorrectLength","a","getMaskFunc","maskPattern","_i","getLostPoint","qrCode","getModuleCount","lostPoint","row","moduleCount","col","sameCount","dark","isDark","r","count","darkCount","Math","getBCHTypeInfo","d","getBCHDigit","G15","G15_MASK","getBCHTypeNumber","G18","digit","E","RSBlock","totalCount","dataCount","getDataCount","getTotalCount","getRSBlocks","rsBlock","getRsBlockTable","list","RS_BLOCK_TABLE","F","TypeNumber","Array","fill","map","_","ErrorCorrectionLevel","ka","la","numeric","alphanumeric","kanji","unicode","QRCodeMinimal","qrDataList","modules","errorCorrectionLevel","getTypeNumber","setTypeNumber","getErrorCorrectLevel","setErrorCorrectLevel","clearData","addData","qrData","byte","stringToBytesFuncs","default","UTF8","QRKanji","SJIS","make","rsBlocks","totalDataCount","reduce","t","makeImpl","getBestMaskPattern","minLostPoint","pattern","test","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","mapData","inc","bitIndex","byteIndex","maskFunc","pos","bits","createData","dataArray","PAD0","PAD1","createBytes","createNumArray","maxDcCount","maxEcCount","dcCount","ecCount","max","dcdata","rsPoly","modPoly","ecdata","modIndex","totalCodeCount","I","bytes","isObject","obj","isArray","mergeDeep","target","sources","undefined","source","keys","key","targetValue","sourceValue","GradientType","sa","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","colorStop","radial","linear","DotType","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","wave","heart","star","weave","pentagon","hexagon","zebraHorizontal","zebraVertical","blocksHorizontal","blocksVertical","blobs","CornerDotType","P","inpoint","outpoint","CornerSquareType","R","centerCircle","ShapeType","ua","circle","ImageMode","va","center","overlay","background","defaultOptions","document","shape","width","height","size","qrOptions","imageOptions","imageSize","crossOrigin","margin","color","dotsOptions","type","sanitizeOptions","options","newOptions","min","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","DotElements","args","x","y","createElementNS","setAttribute","numToAttr","element","sideRounded","svgPath","cornerRounded","cornerExtraRounded","classyDot","a1","PI","a2","c23x","s2","sin","c23y","s1","cos","c31x","c31y","scalePath","dotSize","spikes","outerRadius","innerRadius","cx","cy","angle","radius","join","notch","thickness","blob","corners","parts","l","bl","br","tr","tl","qrCornerDotFigures","rotateFigure","draw","args2","SquareElements","circleRadius","qrCornerSquareFigures","roundedCorners","getNeighbor","corner","end","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","stripes","stripe","endpoint","qrDotFigures","getPRandom","randomFactor","rnd","random","_args","_params","b","getQrDotFigure","plugins","defaultDraw","drawPluginDot","plugin","el","drawDot","drawPlugin","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","parseColor","cstr","alpha","toLowerCase","base","slice","parseInt","exec","value","trim","split","parseFloat","dims","pop","padStart","getRng","matrix","match","seed","ix","xOffset","yOffset","imul","squareMask","cornerSquareTypes","Set","Object","values","dotMask","cornerDotTypes","QRSVG","_element","_fakeMatrix","defs","backgroundMask","dotsMask","lightDotsMask","qr","imageTools","appendChild","drawQR","toFixed","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxSize","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","newSize","dotsMax","ceil","dotsMin","abs","hideMax","hideMin","maxW","maxH","floor","coverLevel","alignment","drawBackground","drawImage","drawDots","drawCorners","createColor","additionalRotation","name","createMask","filter","additionalDots","fakeCount","beginning","ii","jj","sqrt","iAlign","find","jAlign","fakeBeginning","colorCount","cornersSquareSize","cornersDotSize","column","cornersSquareMask","cornersDotMask","squareArgs","drawPluginCornerSquare","drawCornerSquare","pluinCornerSquare","cornerFill","cornerElement","isCornerSquareType","has","dotArgs","drawPluginCornerDot","drawCornerDot","pluinCornerDot","isCornerDotType","dx","dy","imageUrl","setAttributeNS","indexOf","encoding","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","dh","gradientSize","rect","x0","y0","positiveRotation","tan","x1","y1","stopCfg","stop","parsed","id","mask","assign","stringToBytes_UTF8","utf8","charcode","QRCodeStyling","extension","svgDrawingPromise","qrSVG","update","innerHTML","setupSvg","append","applyExtension","deleteExtension","serialize","serializeToString","XMLSerializer","postProcess","defaultCanvasOptions","KernelType","Za","Lanczos","Linear","Kernels","xpi","baseLength","baseVal","convertToSpecifiedUnits","SVG_LENGTHTYPE_PX","FileExtension","db","drawToCanvas","sanitizeCanvasOptions","canvas","createElement","canvasDrawingPromise","xml","viewBox","image64","btoa","aaFactor","h","aaCanvas","OffscreenCanvas","getContext","lanczosResize","opt","kernel","cwidth","cheight","ctx","getImageData","dst","createImageData","sdata","ddata","sX","sY","filterSize","sw1","isx","isy","cw","ch","cache","cacheKey","iPrecision","y1b","sourcePixelY","y1e","y1et","sh1","y3","sourcePixelX","x1b","x1e","x1et","distanceY","total","csx","g","y2","idxi","z","idx","putImageData","imgData","downloadURI","uri","link","download","href","body","click","removeChild","svg","png","jpeg","webp","browserUtils","downloadOptions","res"],"mappings":"4FAAO,MAAMA,EACTC,OACAC,OACAC,WAAAA,GACIC,KAAKH,OAAS,GACdG,KAAKF,OAAS,CAFJ,CAIdG,SAAAA,GACI,OAAOD,KAAKH,MADJ,CAGZK,eAAAA,GACI,OAAOF,KAAKF,MADE,CAGlBK,QAAAA,GACI,IAAIN,EAAS,GACb,IAAK,IAAIO,EAAI,EAAGA,EAAIJ,KAAKE,kBAAmBE,GAAK,EAC7CP,GAAUG,KAAKK,OAAOD,GAAK,IAAM,IAErC,OAAOP,CALA,CAOXQ,MAAAA,CAAOC,GACH,OAAmE,IAA1DN,KAAKH,UAAUS,EAAQ,MAAS,EAAKA,EAAQ,EAAO,EADnD,CAGdC,GAAAA,CAAIC,EAAKV,GACL,IAAK,IAAIM,EAAI,EAAGA,EAAIN,EAAQM,GAAK,EAC7BJ,KAAKS,OAA2C,IAAlCD,IAASV,EAASM,EAAI,EAAM,GAFjC,CAKjBK,MAAAA,CAAOC,GACCV,KAAKF,QAA+B,EAArBE,KAAKH,OAAOC,QAC3BE,KAAKH,OAAOc,KAAK,OAGjBX,KAAKH,UAAUG,KAAKF,OAAS,KAAO,MAASE,KAAKF,OAAS,GAE/DE,KAAKF,QAAU,CAPP,ECvBT,IAAIc,EAkBRC,EAAsBD,IAAoB,CAAA,EAbzCC,EAAkBD,EAAAE,EAAyB,GAAK,IAIhDF,EAAkBA,EAAAG,EAAyB,GAAK,IAIhDH,EAAkBA,EAAAI,EAAyB,GAAK,MAI9BJ,EAAAK,EAAyB,GAAK,ICjB7C,MAAMC,EACTnB,WAAAA,GACI,YAAgB,QADN,CAGdoB,kBAaAA,iBACAA,iBACOC,WAAAA,CAAKC,GAGR,GAFKH,EAAOI,WACRJ,EAAOK,aACPF,EAAI,EACJ,MAAUG,MAAM,OAASH,EAAI,KAEjC,OAAOH,EAAOI,UAAUD,EANb,CAQRI,WAAAA,CAAKJ,GAGR,IAFKH,EAAOQ,WACRR,EAAOK,aACJF,EAAI,GACPA,GAAK,IAET,KAAOA,GAAK,KACRA,GAAK,IAET,OAAOH,EAAOQ,UAAUL,EATb,EAvBfM,EAAAJ,WAAoB,KAChBL,EAAOQ,UAAY,GACnBR,EAAOI,UAAY,GACnB,IAAK,IAAIlB,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAC1Bc,EAAOQ,UAAUf,KAAKP,EAAI,EACpB,GAAKA,EACLc,EAAOQ,UAAUtB,EAAI,GAAKc,EAAOQ,UAAUtB,EAAI,GAAKc,EAAOQ,UAAUtB,EAAI,GAAKc,EAAOQ,UAAUtB,EAAI,IACzGc,EAAOI,UAAUX,KAAK,GAE1B,IAASP,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAC1Bc,EAAOI,UAAUJ,EAAOQ,UAAUtB,IAAMA,SCbvCwB,EACTpB,IACAT,WAAAA,CAAYS,EAAKqB,EAAQ,GACrB,IAAIC,EAAS,EACb,KAAOA,EAAStB,EAAIV,QAAyB,GAAfU,EAAIsB,IAC9BA,GAAU,OAETtB,IAAM,GACX,MAASA,WACT,IAAK,IAAIJ,EAAI,EAAGA,EAAI2B,EAAK3B,GAAK,EAC1BJ,KAAKQ,IAAIG,KAAKH,EAAIsB,EAAS1B,IAE/B,IAASA,EAAI,EAAGA,EAAIyB,EAAOzB,GAAK,EAC5BJ,KAAKQ,IAAIG,KAAK,EAXM,CAc5BqB,KAAAA,CAAM1B,GACF,OAAON,KAAKQ,IAAIF,EADP,CAGb2B,SAAAA,GACI,OAAOjC,KAAKQ,IAAIV,MADR,CAGZK,QAAAA,GACI,IAAIN,EAAS,GACb,IAAK,IAAIO,EAAI,EAAGA,EAAIJ,KAAKiC,YAAa7B,GAAK,EACnCA,EAAI,IACJP,GAAU,KAEdA,GAAUG,KAAKgC,MAAM5B,GAEzB,OAAOP,EAAOM,UARP,CAUX+B,WAAAA,GACI,IAAIrC,EAAS,GACb,IAAK,IAAIO,EAAI,EAAGA,EAAIJ,KAAKiC,YAAa7B,GAAK,EACnCA,EAAI,IACJP,GAAU,KAEdA,GAAUqB,EAAOE,KAAKpB,KAAKgC,MAAM5B,IAErC,OAAOP,EAAOM,UARJ,CAUdgC,QAAAA,CAASC,GACL,IAAA5B,EAAS,GAET,IADA,IAAAuB,EAAS/B,KAAGiC,YAAgBG,EAAGH,cACtB7B,EAAI,EAAGA,EAAI2B,EAAK3B,GAAK,EAC1BI,EAAIG,KAAK,GAEb,IAASP,EAAI,EAAGA,EAAIJ,KAAKiC,YAAa7B,GAAK,EACvC,IAASiC,EAAI,EAAGA,EAAID,EAAEH,YAAaI,GAAK,EACpC7B,EAAIJ,EAAIiC,IAAMnB,EAAOO,KAAKP,EAAOE,KAAKpB,KAAKgC,MAAM5B,IAAMc,EAAOE,KAAKgB,EAAEJ,MAAMK,KAGnF,OAAO,IAAIT,EAAWpB,EAXd,CAaZ8B,GAAAA,CAAIF,GACA,GAAIpC,KAAKiC,YAAcG,EAAEH,YAAc,EACnC,OAAOjC,KAEX,IAAAuC,EAAWrB,EAAGE,UAAYY,MAAK,IAASd,EAAGE,KAAOgB,EAAKJ,MAAE,IAEzDxB,EAAS,GACT,IAAK,IAAIJ,EAAI,EAAGA,EAAIJ,KAAKiC,YAAa7B,GAAK,EACvCI,EAAIG,KAAKX,KAAKgC,MAAM5B,IAGxB,IAASA,EAAI,EAAGA,EAAIgC,EAAEH,YAAa7B,GAAK,EACpCI,EAAIJ,IAAMc,EAAOO,KAAKP,EAAOE,KAAKgB,EAAEJ,MAAM5B,IAAMmC,GAGpD,OAA2BD,IAAhBV,EAAWpB,GAAK8B,IAAIF,EAf5B,ECxDJ,IAAII,EAkBRA,EAASA,IAAO,CAAA,EAbfA,EAAKA,EAAAC,YAAsB,GAAK,gBAI3BD,EAAAE,eAAyB,GAAK,iBAInCF,EAAKA,EAAAG,eAAyB,GAAK,iBAInCH,EAAKA,EAAAI,WAAqB,GAAK,aChBtBC,MAAAA,EACTC,KACAC,KACAhD,WAAAA,CAAY+C,EAAMC,GACd/C,KAAK8C,KAAOA,EACZ9C,KAAK+C,KAAOA,CAFQ,CAIxBC,OAAAA,GACI,OAAOhD,KAAK8C,IADN,CAGVG,OAAAA,GACI,OAAOjD,KAAK+C,IADN,CAGV7C,eAAAA,CAAgBgD,GACZ,GAAI,GAAKA,GAAcA,EAAa,GAEhC,OAAQlD,KAAK8C,MACT,KAAKN,EAAKC,YACN,OAAO,GACX,KAAKD,EAAKE,eACN,OAAO,EACX,KAAKF,EAAKG,eAEV,KAAKH,EAAKI,WACN,OAAO,UAEP,MAAUpB,MAAM,QAAUxB,KAAK8C,WAGtC,GAAII,EAAa,GAElB,OAAQlD,KAAK8C,MACT,KAAKN,EAAKC,YACN,OAAO,GACX,KAAKD,EAAKE,eACN,OAAO,GACX,KAAKF,EAAKG,eACN,OAAO,QACNH,EAAKI,WACN,OAAO,GACX,QACI,MAAUpB,MAAM,QAAUxB,KAAK8C,UAGtC,MAAII,EAAa,IAgBlB,MAAU1B,MAAM,cAAgB0B,GAdhC,OAAQlD,KAAK8C,MACT,KAAKN,EAAKC,YACN,OAAO,GACX,KAAKD,EAAKE,eACN,UACJ,KAAKF,EAAKG,eACN,OAAO,GACX,KAAKH,EAAKI,WACN,OAAO,GACX,QACI,MAAUpB,MAAM,QAAUxB,KAAK8C,MAIvC,CA/CoB,ECZzB,MAAMK,UAAmBN,EAC5BO,cACArD,WAAAA,CAAYgD,EAAMK,GACdC,MAAMb,EAAKG,eAAgBI,GAC3B/C,KAAKoD,cAAgBA,CAFQ,CAIjCE,KAAAA,CAAMzD,GACQG,KAAGoD,cAAKpD,KAAciD,WAC3BM,QAAQC,GAAO3D,EAAOU,IAAIiD,EAAK,GAF1B,CAIdvB,SAAAA,GACI,OAAOjC,KAAKoD,cAAcpD,KAAKiD,WAAWnD,MADlC,ECVT,MAAM2D,UAAmBZ,EAC5B9C,WAAAA,CAAYgD,GACRM,MAAMb,EAAKE,eAAgBK,EADb,CAGlBO,KAAAA,CAAMzD,GACF,MAAOG,KAAGiD,UACN7C,EAAI,EACR,KAAOA,EAAI,EAAIsD,EAAE5D,QACbD,EAAOU,IAAsC,GAAlCkD,EAAWE,QAAQD,EAAEE,OAAOxD,IAAWqD,EAAWE,QAAQD,EAAEE,OAAOxD,EAAI,IAAK,IACvFA,GAAK,EAELA,EAAIsD,EAAE5D,QACND,EAAOU,IAAIkD,EAAWE,QAAQD,EAAEE,OAAOxD,IAAK,EARtC,CAWd6B,SAAAA,GACI,OAAOjC,KAAKiD,UAAUnD,MADd,CAGL6D,eAAQE,GACX,GAAI,KAAOA,GAAKA,GAAK,IACjB,SAASC,WAAW,GAAK,GAExB,GAAI,KAAOD,GAAKA,GAAK,IACtB,OAAOA,EAAEC,WAAW,GAAK,GAAoB,UAGrCD,GACJ,IAAK,IACD,OAAO,GACX,IAAK,IACD,UACJ,IAAK,IACD,OAAO,OACN,IACD,OAAO,GACX,IAAK,IACD,UACJ,IAAK,IACD,OAAO,OACN,IACD,OAAO,GACX,IAAK,IACD,OAAO,GACX,IAAK,IACD,OAAO,GACX,QACI,MAAUrC,MAAM,iBAAmBqC,GA5BjC,EClBf,gBAAsBhB,EACzBO,cACArD,WAAAA,CAAYgD,EAAMK,GACdC,MAAMb,EAAKI,WAAYG,GACvB/C,KAAKoD,cAAgBA,CAFQ,CAIjCE,KAAAA,CAAMzD,GACF,IAAAkD,EAAU/C,KAAGoD,cAAKpD,KAAciD,WAC5B7C,EAAI,OACDA,EAAI,EAAI2C,EAAKjD,QAAQ,CACxB,IAAI+D,GAAM,IAAOd,EAAK3C,KAAO,EAAM,IAAO2C,EAAK3C,EAAI,MAC/C,OAAUyD,GAAKA,GAAK,MACpBA,GAAK,UAEJ,MAAI,OAAUA,GAAKA,GAAK,OAIzB,MAAUrC,MAAM,oBAAsBpB,EAAI,GAAK,IAAMyD,GAHrDA,GAAK,KAGL,CAEJA,EAAyB,KAAnBA,IAAM,EAAK,MAAoB,IAAJA,KAC1BtD,IAAIsD,EAAG,OACT,CAbmB,CAe5B,GAAIzD,EAAI2C,EAAKjD,OACT,YAAgB,oBAAsBM,EAAI,GAnBpC,CAsBd6B,SAAAA,GACI,YAAYmB,cAAcpD,KAAKiD,WAAWnD,OAAS,CAD3C,EC5BT,MAAMiE,UAAiBlB,EAC1B9C,WAAAA,CAAYgD,GACRM,MAAMb,EAAKC,YAAaM,EADV,CAGlBO,KAAAA,CAAMzD,GACF,MAAUG,KAAGiD,UACT7C,EAAI,OACDA,EAAI,EAAI2C,EAAKjD,QAChBD,EAAOU,IAAIwD,EAASC,SAASjB,EAAKkB,UAAU7D,EAAGA,EAAI,IAAK,IACxDA,GAAK,EAELA,EAAI2C,EAAKjD,SACLiD,EAAKjD,OAASM,GAAK,EACnBP,EAAOU,IAAIwD,EAASC,SAASjB,EAAKkB,UAAU7D,EAAGA,EAAI,IAAK,GAEnD2C,EAAKjD,OAASM,GAAK,GACxBP,EAAOU,IAAIwD,EAASC,SAASjB,EAAKkB,UAAU7D,EAAGA,EAAI,IAAK,GAZtD,CAgBd6B,SAAAA,GACI,OAAOjC,KAAKiD,UAAUnD,MADd,CAGLkE,eAAAA,CAASN,GACZ,IAAIlD,EAAM,MACL,IAAIJ,EAAI,EAAGA,EAAIsD,EAAE5D,OAAQM,GAAK,EAC/BI,EAAY,GAANA,EAAWuD,EAASG,UAAUR,EAAEE,OAAOxD,IAEjD,OAAOI,CALQ,CAOZ0D,iBAAUL,GACb,GAAI,KAAOA,GAAKA,GAAK,IACjB,OAAOA,EAAEC,WAAW,GAAK,GAE7B,MAAUtC,MAAM,iBAAmBqC,EAJnB,EChCjB,IAAIM,EAkCRC,EAAgBD,IAAc,CAAA,EA7B7BA,EAAYA,EAAAE,WAA4B,GAAK,eAIjCF,EAAAG,WAA4B,GAAK,aAI7CH,EAAYA,EAAAI,WAA4B,GAAK,aAI7CJ,EAAYA,EAAAK,WAA4B,GAAK,aAI7CL,EAAYA,EAAAM,WAA4B,GAAK,aAI7CN,EAAYA,EAAAO,WAA4B,GAAK,eAIjCP,EAAAQ,WAA4B,GAAK,aAI7CR,EAAYA,EAAAS,WAA4B,GAAK,aC5BpCC,MAAAA,EACT9E,WAAAA,GACI,YAAgB,QADN,CAGP+E,yBAAAA,CAAmB5B,GACtB,OAAO2B,EAAOE,uBAAuB7B,EAAa,EADhB,CAGtC/B,8BA0CAA,kBA8DO6D,mBAAAA,CAAa9B,EAAYJ,EAAMmC,GAIlC,OAAQA,GACJ,KAAKrE,EAAkBE,EACnBsB,EAAI,EACJ,WACCxB,EAAkBG,EACnBqB,EAAI,EACJ,MACJ,KAAKxB,EAAkBI,EACnBoB,EAAI,EACJ,MACJ,KAAKxB,EAAkBK,EACnBmB,EAAI,QAER,QACI,MAAUZ,MAAM,KAAOyD,GAE/B,OAAQnC,GACJ,KAAKN,EAAKC,YACNyC,EAAI,EACJ,MACJ,KAAK1C,EAAKE,eACNwC,EAAI,EACJ,MACJ,KAAK1C,EAAKG,eACNuC,EAAI,EACJ,MACJ,KAAK1C,EAAKI,WACNsC,EAAI,QAER,QACI,MAAU1D,MAAM,KAAOsB,GAE/B,OAAO+B,EAAOM,WAnCPjC,KAmCqBd,GAAG8C,EApCsB,CAsClDE,gCAAAA,CAA0BC,GAC7B,IAAIC,EAAI,IAAI1D,EAAW,CAAC,IACxB,IAAK,IAAIxB,EAAI,EAAGA,EAAIiF,EAAoBjF,GAAK,EACzCkF,EAAIA,EAAEnD,SAAS,IAAIP,EAAW,CAAC,EAAGV,EAAOO,KAAKrB,MAElD,OAAOkF,CAL0C,CAO9CC,kBAAAA,CAAYC,GACf,OAAQA,GACJ,KAAKrB,EAAYE,WACb,MAAO,CAACjE,EAAGiC,KAAOjC,EAAIiC,GAAK,GAAK,EACpC,KAAK8B,EAAYG,WACb,OAAQlE,GAAUA,EAAI,GAAK,EAC/B,KAAK+D,EAAYI,WACb,MAAO,CAACkB,EAAIpD,IAAMA,EAAI,GAAK,EAC/B,KAAK8B,EAAYK,WACb,MAAO,CAACpE,EAAGiC,KAAOjC,EAAIiC,GAAK,GAAK,EACpC,KAAK8B,EAAYM,WACb,MAAO,CAACrE,EAAGiC,QAAUjC,EAAI,MAAQiC,EAAI,IAAM,GAAK,EACpD,KAAK8B,EAAYO,WACb,MAAO,CAACtE,EAAGiC,IAAQjC,EAAIiC,EAAK,EAAOjC,EAAIiC,EAAK,GAAM,EACtD,KAAK8B,EAAYQ,WACb,MAAO,CAACvE,EAAGiC,KAASjC,EAAIiC,EAAK,EAAOjC,EAAIiC,EAAK,GAAM,GAAK,EAC5D,KAAK8B,EAAYS,WACb,MAAO,CAACxE,EAAGiC,KAASjC,EAAIiC,EAAK,GAAOjC,EAAIiC,GAAK,GAAM,GAAK,EAC5D,QACI,MAAUb,MAAM,QAAUgE,GAnBN,CAsBzBE,mBAAAA,CAAaC,GAChB,MAAiBA,EAAGC,iBAChBC,EAAY,EAEhB,IAAK,IAAIC,EAAM,EAAGA,EAAMC,EAAaD,GAAO,EACxC,IAAK,IAAIE,EAAM,EAAGA,EAAMD,EAAaC,GAAO,EAAG,CAC3C,IAAIC,EAAY,EAChB,IAAAC,EAAUP,EAAGQ,SAAiBH,GAC9B,IAAK,IAAII,GAAI,EAAIA,GAAK,EAAGA,GAAK,EAC1B,KAAIN,EAAMM,EAAI,GAAKL,GAAeD,EAAMM,GAGxC,IAAK,IAAIvC,GAAI,EAAIA,GAAK,EAAGA,GAAK,EACtBmC,EAAMnC,EAAI,GAAKkC,GAAeC,EAAMnC,IAG/B,GAALuC,GAAe,GAALvC,IAGVqC,GAAQP,EAAOQ,OAAOL,EAAMM,EAAGJ,EAAMnC,KACrCoC,GAAa,GAIrBA,EAAY,IACZJ,GAAa,EAAII,EAAY,EApBU,CAyBnD,IAASH,EAAM,EAAGA,EAAMC,EAAc,EAAGD,GAAO,EAC5C,IAASE,EAAM,EAAGA,EAAMD,EAAc,EAAGC,GAAO,EACxCK,EAAQ,EACRV,EAAOQ,OAAOL,EAAKE,KACnBK,GAAS,GACTV,EAAOQ,OAAOL,EAAM,EAAGE,KACvBK,GAAS,GACTV,EAAOQ,OAAOL,EAAKE,EAAM,KACzBK,GAAS,GACTV,EAAOQ,OAAOL,EAAM,EAAGE,EAAM,KAC7BK,GAAS,IACA,GAATA,GAAuB,GAATA,KACdR,GAAa,GAKzB,IAASC,EAAM,EAAGA,EAAMC,EAAaD,GAAO,EACxC,IAASE,EAAM,EAAGA,EAAMD,EAAc,EAAGC,GAAO,EACxCL,EAAOQ,OAAOL,EAAKE,KAClBL,EAAOQ,OAAOL,EAAKE,EAAM,IAC1BL,EAAOQ,OAAOL,EAAKE,EAAM,IACzBL,EAAOQ,OAAOL,EAAKE,EAAM,IACzBL,EAAOQ,OAAOL,EAAKE,EAAM,KACxBL,EAAOQ,OAAOL,EAAKE,EAAM,IAC1BL,EAAOQ,OAAOL,EAAKE,EAAM,KACzBH,GAAa,IAIzB,IAASG,EAAM,EAAGA,EAAMD,EAAaC,GAAO,EACxC,IAASF,EAAM,EAAGA,EAAMC,EAAc,EAAGD,GAAO,EACxCH,EAAOQ,OAAOL,EAAKE,KAClBL,EAAOQ,OAAOL,EAAM,EAAGE,IACxBL,EAAOQ,OAAOL,EAAM,EAAGE,IACvBL,EAAOQ,OAAOL,EAAM,EAAGE,IACvBL,EAAOQ,OAAOL,EAAM,EAAGE,KACtBL,EAAOQ,OAAOL,EAAM,EAAGE,IACxBL,EAAOQ,OAAOL,EAAM,EAAGE,KACvBH,GAAa,IAMzB,IADIS,EAAY,EACPN,EAAM,EAAGA,EAAMD,EAAaC,GAAO,EACxC,IAASF,EAAM,EAAGA,EAAMC,EAAaD,GAAO,EACpCH,EAAOQ,OAAOL,EAAKE,KACnBM,GAAa,GAMzB,OADAT,EADWU,SAAW,MAAiBR,EAAeA,QACjC,EAnFG,CAsFrBS,qBAAAA,CAAezD,GAClB,IAAI0D,EAAI1D,GAAQ,GAChB,KAAO8B,EAAO6B,YAAYD,GAAK5B,EAAO6B,YAAY7B,EAAO8B,MAAQ,GAC7DF,GAAK5B,EAAO8B,KAAQ9B,EAAO6B,YAAYD,GAAK5B,EAAO6B,YAAY7B,EAAO8B,KAE1E,OAAS5D,GAAQ,GAAM0D,GAAK5B,EAAO+B,QALX,CAOrBC,uBAAAA,CAAiB9D,GACpB,IAAI0D,EAAI1D,GAAQ,GAChB,KAAO8B,EAAO6B,YAAYD,GAAK5B,EAAO6B,YAAY7B,EAAOiC,MAAQ,GAC7DL,GAAK5B,EAAOiC,KAAQjC,EAAO6B,YAAYD,GAAK5B,EAAO6B,YAAY7B,EAAOiC,KAE1E,OAAQ/D,GAAQ,GAAM0D,CALI,CAO9BtF,WACAA,WACAA,gBACOuF,kBAAAA,CAAY3D,GACf,IAAIgE,EAAQ,EACZ,KAAe,GAARhE,GACHgE,GAAS,EACThE,KAAU,EAEd,QANqB,EAlRzBiE,EAAAjC,uBAAgC,CAC5B,GACA,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,GAAI,IAChB,CAAC,EAAG,GAAI,GAAI,GAAI,IAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,KACpB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,MAE9BiC,EAAA7B,WAAoB,CAChB,CACI,CAAC,GAAI,GAAI,GAAI,IACb,CAAC,GAAI,GAAI,GAAI,GACb,CAAC,GAAI,GAAI,GAAI,GACb,CAAC,GAAI,GAAI,EAAG,IAEhB,CACI,CAAC,GAAI,GAAI,GAAI,IACb,CAAC,GAAI,GAAI,GAAI,IACb,CAAC,GAAI,GAAI,GAAI,IACb,CAAC,GAAI,GAAI,GAAI,IAEjB,CACI,CAAC,IAAK,GAAI,GAAI,IACd,CAAC,IAAK,GAAI,GAAI,IACd,CAAC,GAAI,GAAI,GAAI,IACb,CAAC,GAAI,GAAI,GAAI,KAEjB,CACI,CAAC,IAAK,IAAK,GAAI,IACf,CAAC,IAAK,GAAI,GAAI,IACd,CAAC,IAAK,GAAI,GAAI,IACd,CAAC,GAAI,GAAI,GAAI,KAEjB,CACI,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,GAAI,IACf,CAAC,IAAK,GAAI,GAAI,IACd,CAAC,IAAK,GAAI,GAAI,KAElB,CACI,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,GAAI,IACf,CAAC,IAAK,GAAI,GAAI,KAElB,CACI,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,GAAI,IACf,CAAC,IAAK,GAAI,GAAI,KAElB,CACI,CAAC,IAAK,IAAK,IAAK,KAChB,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,GAAI,KAEnB,CACI,CAAC,IAAK,IAAK,IAAK,KAChB,CAAC,IAAK,IAAK,IAAK,KAChB,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,GAAI,KAEnB,CACI,CAAC,IAAK,IAAK,IAAK,KAChB,CAAC,IAAK,IAAK,IAAK,KAChB,CAAC,IAAK,IAAK,IAAK,IAChB,CAAC,IAAK,IAAK,IAAK,MA0KxB6B,EAAAL,IAAa,KACbK,EAAAF,IAAa,KACbE,EAAAJ,SAAkB,YC5RTK,EACTC,WACAC,UACAhG,sBA8MApB,WAAAA,CAAYmH,EAAYC,GACpBnH,KAAKkH,WAAaA,OACbC,UAAYA,CAFc,CAInCC,YAAAA,GACI,OAAOpH,KAAKmH,SADD,CAGfE,aAAAA,GACI,YAAYH,UADA,CAGTI,kBAAAA,CAAYpE,EAAY+B,MAC3BsC,EAAaN,EAAGO,kBAAkCvC,aAElD,IAAAwC,EAAU,GACV,IAAK,IAAIrH,EAAI,EAAGA,EAAIN,EAAQM,GAAK,EAAG,CAChC,IAAAiG,EAAWkB,EAAY,EAATnH,GACd8G,EAAgBK,EAAY,EAATnH,EAAa,GAChC+G,EAAeI,EAAY,EAATnH,EAAa,OAC1B,IAAIiC,EAAI,EAAGA,EAAIgE,EAAOhE,GAAK,EAC5BoF,EAAK9G,KAAK,IAAIsG,EAAQC,EAAYC,GALN,CAQpC,QAZ8C,CAc3CK,sBAAAA,CAAgBtE,EAAY+B,GAC/B,OAAQA,GACJ,KAAKrE,EAAkBE,EACnB,SAAe4G,eAAkC,GAAlBxE,EAAa,IAChD,KAAKtC,EAAkBG,EACnB,OAAOkG,EAAQS,eAAkC,GAAlBxE,EAAa,GAAS,GACzD,KAAKtC,EAAkBI,EACnB,OAAOiG,EAAQS,eAAkC,GAAlBxE,EAAa,GAAS,QACpDtC,EAAkBK,EACnB,OAAOgG,EAAQS,eAAkC,GAAlBxE,EAAa,GAAS,GAI7D,YAAgB,MAAQA,EAAa,QAAU+B,EAbG,EAtOtD0C,EAAAD,eAAwB,CAMpB,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAER,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAER,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAER,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAER,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAEnB,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAER,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAEnB,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAEnB,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAEnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAEnB,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAEnB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAEnB,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,IAET,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,KACV,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAEpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,SC1MxBE,EAAWC,MAAG,IACdC,KAAK,GACLC,IAAI,CAACC,EAAG5H,IAAMA,GAET,IAAC6H,EAMRC,EAAyBD,IAAuB,CAAA,IAJ/CnH,EAA4B,MAC5BC,EAA4B,MAC5BC,EAA4B,MAC5BC,EAA4B,QAErBuB,EAUR2F,EAAS3F,IAAO,CAAA,EARfA,EAAA4F,QAAkB,UAClBD,EAAAE,aAAuB,iBAIvB,KAAe,OACf7F,EAAA8F,MAAgB,UAChBC,QAAkB,UAOTC,MAAAA,EACTrH,0BAUAA,YACAA,YACA+B,WACA+B,kBACAwD,WACAC,QAAU,GACV3C,YAAc,EACdhG,WAAAA,CAAYmD,EAAa,EAAGyF,EAAuBV,EAAqBnH,GACpEd,KAAKkD,WAAaA,OACb+B,kBAAoBrE,EAAkB+H,GAC3C3I,KAAKyI,WAAa,EAHqD,CAK3EG,aAAAA,GACI,YAAY1F,UADA,CAGhB2F,aAAAA,CAAc3F,GACVlD,KAAKkD,WAAaA,CADI,CAG1B4F,oBAAAA,GACI,YAAY7D,iBADO,CAGvB8D,oBAAAA,CAAqB9D,GACjBjF,KAAKiF,kBAAoBA,CADW,CAGxC+D,SAAAA,GACIhJ,KAAKyI,WAAa,EADV,CAGZQ,OAAAA,CAAQC,EAAQpG,EAAON,EAAK2G,MACxB,GAAID,aAAkBrG,EAClB7C,KAAKyI,WAAW9H,KAAKuI,OAEpB,IAAsB,iBAAXA,EAsBZ,MAAU1H,aAAa0H,GArBvB,OAAQpG,GACJ,KAAKN,EAAK4F,QACNpI,KAAKyI,WAAW9H,KAAK,IAAIoD,EAASmF,IAEtC,MAAA,KAAK1G,EAAK6F,aACNrI,KAAKyI,WAAW9H,KAAK,IAAI8C,EAAWyF,IACpC,MACJ,KAAK1G,EAAK2G,KACNnJ,KAAKyI,WAAW9H,KAAK,IAAIwC,EAAW+F,EAAQV,EAAcY,mBAAmBC,UAC7E,WACC7G,EAAK+F,QACNvI,KAAKyI,WAAW9H,KAAK,IAAIwC,EAAW+F,EAAQV,EAAcY,mBAAdE,OAC5C,MACJ,KAAK9G,EAAK8F,MACNtI,KAAKyI,WAAW9H,KAAK,IAAI4I,EAAQL,EAAQV,EAAcY,mBAAdI,OACzC,MACJ,QACI,MAAUhI,MAAM,QAAUsB,GAIlC,CA1B0B,CAoClCqD,MAAAA,CAAOL,EAAKE,GACR,OAA8B,MAA1BhG,KAAK0I,QAAQ5C,GAAKE,IACXhG,KAAK0I,QAAQ5C,GAAKE,EAFhB,CAQjBJ,cAAAA,GACI,OAAO5F,KAAK+F,WADC,CAGjB0D,IAAAA,GACI,GAAIzJ,KAAKkD,WAAa,EAAG,CACrB,IAAIA,EAAa,EACjB,KAAOA,EAAa,GAAIA,IAAc,CAClC,IAAAwG,EAAczC,EAAGK,YAAQpE,EAAsBlD,KAAEiF,mBACjD,IAAApF,EAAY,IAAGD,UACV6I,WAAWlF,QAAQR,IACpBlD,EAAOU,IAAIwC,EAAKC,UAAW,GAC3BnD,EAAOU,IAAIwC,EAAKd,YAAac,EAAK7C,gBAAgBgD,MAC7CI,MAAMzD,KAEf8J,EAAoBD,EAAGE,OAAS,CAAMC,EAAGhJ,IAAGgJ,IAASzC,eAAgB,GACjEvH,EAAOK,mBAAsC,EAAjByJ,EAC5B,KAV8B,CAatC3J,KAAKkD,WAAaA,CAfG,CAiBzBlD,KAAK8J,UAAS,EAAO9J,KAAK+J,qBAlBvB,CAoBPA,kBAAAA,GACI,IAAIC,EAAe,EACfC,EAAU,EACd,IAAK,IAAI7J,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CAC3BJ,KAAK8J,UAAS,EAAM1J,GACpB,IAAAyF,EAAehB,EAAGa,aAAO1F,OAChB,GAALI,GAAU4J,EAAenE,KACzBmE,EAAenE,EACfoE,EAAU7J,EALa,CAQ/B,OAAO6J,CAXU,CAarBH,QAAAA,CAASI,EAAM1E,GAEXxF,KAAK+F,YAAgC,EAAlB/F,KAAKkD,WAAiB,GACzClD,KAAK0I,QAAU,GACf,IAAK,IAAItI,EAAI,EAAGA,EAAIJ,KAAK+F,YAAa3F,GAAK,EAAG,CAC1CJ,KAAK0I,QAAQ/H,KAAK,IAClB,IAAK,IAAI0B,EAAI,EAAGA,EAAIrC,KAAK+F,YAAa1D,GAAK,EACvCrC,KAAK0I,QAAQtI,GAAGO,KAAK,KAHiB,CAM9CX,KAAKmK,0BAA0B,EAAG,QAC7BA,0BAA0BnK,KAAK+F,YAAc,EAAG,GACrD/F,KAAKmK,0BAA0B,EAAGnK,KAAK+F,YAAc,GACrD/F,KAAKoK,kCACAC,qBACLrK,KAAKsK,cAAcJ,EAAM1E,GACrBxF,KAAKkD,YAAc,GACnBlD,KAAKuK,gBAAgBL,KAEf1B,aAAiBxI,KAAWkD,WAAelD,uBAAwBA,KAAEyI,YAC/EzI,KAAKwK,QAAQzH,EAAMyC,EApBK,CAsB5BgF,OAAAA,CAAQzH,EAAMyC,GACV,IAAIiF,GAAM,EACN3E,EAAM9F,KAAK+F,YAAc,EACzB2E,EAAW,EACXC,EAAY,EAChBC,EAAc/F,EAAGU,YAAOC,GACxB,IAAK,IAAIQ,EAAMhG,KAAK+F,YAAc,EAAGC,EAAM,EAAGA,GAAO,EAIjD,IAHW,GAAPA,KACAA,IAES,CACT,IAAK,IAAInC,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACxB,GAAkC,MAA9B7D,KAAK0I,QAAQ5C,GAAKE,EAAMnC,GAAY,CACpC,IAAIqC,GAAO,EACPyE,EAAY5H,EAAKjD,SACjBoG,EAA+C,IAAtCnD,EAAK4H,KAAeD,EAAY,IAEnCE,EAAG9E,EAAYE,EAAKnC,KAE1BqC,GAAQA,GAEZlG,KAAK0I,QAAQ5C,GAAKE,EAAMnC,GAAKqC,IAC7BwE,GACgB,GAAZA,IACAC,GAAa,EACbD,EAAW,EAbqB,CAkB5C,GADA5E,GAAO2E,EACH3E,EAAM,GAAK9F,KAAK+F,aAAeD,EAAK,CACpCA,GAAO2E,EACPA,GAAOA,EACP,KAHoC,CApB/B,CAVM,CAsC3BL,0BAAAA,GACI,IAAAS,EAAShG,EAAGC,wBAA0B5B,YACtC2H,EAAItH,QAAQuC,IACR+E,EAAItH,QAAQyC,IACR,GAA8B,MAA1BhG,KAAK0I,QAAQ5C,GAAKE,GAGtB,IAAK,IAAII,GAAI,EAAIA,GAAK,EAAGA,GAAK,EAC1B,IAAK,IAAIvC,GAAI,EAAIA,GAAK,EAAGA,GAAK,EAEtB7D,KAAK0I,QAAQ5C,EAAMM,GAAGJ,EAAMnC,IADvB,GAALuC,GAAgB,GAALA,IAAe,GAALvC,GAAgB,GAALA,GAAgB,GAALuC,GAAe,GAALvC,KAThD,CAoB7BsG,yBAAAA,CAA0BrE,EAAKE,GAC3B,IAAK,IAAII,GAAI,EAAIA,GAAK,EAAGA,GAAK,EAC1B,IAAK,IAAIvC,GAAI,EAAIA,GAAK,EAAGA,GAAK,EACtBiC,EAAMM,IAAK,GAAMpG,KAAK+F,aAAeD,EAAMM,GAAKJ,EAAMnC,IAAK,GAAM7D,KAAK+F,aAAeC,EAAMnC,IAM3F7D,KAAK0I,QAAQ5C,EAAMM,GAAGJ,EAAMnC,GAH3B,GAAKuC,GAAKA,GAAK,IAAW,GAALvC,GAAe,GAALA,IAC/B,GAAKA,GAAKA,GAAK,IAAW,GAALuC,GAAe,GAALA,IAC/B,GAAKA,GAAKA,GAAK,GAAK,GAAKvC,GAAKA,GAAK,EARhB,CAiBpCwG,kBAAAA,GACI,IAAK,IAAIjE,EAAI,EAAGA,EAAIpG,KAAK+F,YAAc,EAAGK,GAAK,EACjB,MAAtBpG,KAAK0I,QAAQtC,GAAG,KAGpBpG,KAAK0I,QAAQtC,GAAG,GAAKA,EAAI,GAAK,GAElC,IAASvC,EAAI,EAAGA,EAAI7D,KAAK+F,YAAc,EAAGlC,GAAK,EACjB,MAAtB7D,KAAK0I,QAAQ,GAAG7E,KAGpB7D,KAAK0I,QAAQ,GAAG7E,GAAKA,EAAI,GAAK,EAXjB,CAcrB0G,eAAAA,CAAgBL,GACZ,IAAAY,EAAUjG,EAAGgC,sBAAwB3D,YACrC,IAAK,IAAI9C,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACzBJ,KAAK0I,WAAWtI,EAAI,IAAKA,EAAI,EAAKJ,KAAK+F,YAAc,EAAI,IAAMmE,GAA6B,IAAnBY,GAAQ1K,EAAK,GAE1F,IAASA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACzBJ,KAAK0I,QAAStI,EAAI,EAAKJ,KAAK+F,YAAc,EAAI,MAAM3F,EAAI,KAAO8J,GAA6B,IAAnBY,GAAQ1K,EAAK,EANxE,CAStBkK,aAAAA,CAAcJ,EAAM1E,GAEhBsF,EAAUjG,EAAG2B,eADHxG,KAAIiF,mBAAsB,EAAKO,GAGzC,IAAK,IAAIpF,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC5B,IAAAkC,GAAS4H,OAAYY,GAAM1K,EAAK,GAC5BA,EAAI,EACJJ,KAAK0I,QAAQtI,GAAG,GAAKkC,EAEhBlC,EAAI,EACTJ,KAAK0I,QAAQtI,EAAI,GAAG,GAAKkC,EAGzBtC,KAAK0I,QAAQ1I,KAAK+F,YAAc,GAAK3F,GAAG,GAAKkC,CATrB,CAahC,IAASlC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACzBkC,GAAS4H,OAAYY,GAAM1K,EAAK,GAC5BA,EAAI,EACJJ,KAAK0I,QAAQ,GAAG1I,KAAK+F,YAAc3F,EAAI,GAAKkC,EAEvClC,EAAI,EACTJ,KAAK0I,QAAQ,GAAG,GAAKtI,EAAI,EAAI,GAAKkC,EAGlCtC,KAAK0I,QAAQ,GAAG,GAAKtI,EAAI,GAAKkC,EAItCtC,KAAK0I,QAAQ1I,KAAK+F,YAAc,GAAG,IAAMmE,CA9BZ,CAgC1Ba,kBAAW7H,EAAY+B,EAAmB+F,GAC7CtB,EAAczC,EAAGK,cAA8BrC,GAC/C,IAAApF,EAAY,IAAGD,EAQf,GAPAoL,EAAUzH,QAAQR,IACdlD,EAAOU,IAAIwC,EAAKC,UAAW,GAC3BnD,EAAOU,IAAIwC,EAAKd,YAAac,EAAK7C,gBAAgBgD,IAClDH,EAAKO,MAAMzD,KAGf8J,EAAoBD,EAAGE,OAAS,CAAMC,EAAGhJ,IAAGgJ,IAASzC,eAAgB,GACjEvH,EAAOK,kBAAqC,EAAjByJ,EAC3B,MAAUnI,MAAM,0BAA4B3B,EAAOK,kBAAoB,IAAuB,EAAjByJ,EAAqB,KAOtG,IAJI9J,EAAOK,kBAAoB,GAAsB,EAAjByJ,GAChC9J,EAAOU,IAAI,EAAG,GAGXV,EAAOK,kBAAoB,GAAK,GACnCL,EAAOY,QAAO,GAGlB,OACQZ,EAAOK,mBAAsC,EAAjByJ,KAGhC9J,EAAOU,IAAIiI,EAAcyC,KAAM,KAC3BpL,EAAOK,mBAAsC,EAAjByJ,KAGhC9J,EAAOU,IAAIiI,EAAc0C,KAAM,GAEnC,OAAO1C,EAAc2C,YAAYtL,EAAQ6J,EAhCe,CAkCrDyB,kBAAAA,CAAYtL,EAAQ6J,GAMvB0B,SAASA,EAAerJ,GACpB,IAAAuD,EAAO,GACP,IAAK,IAAIlF,EAAI,EAAGA,EAAI2B,EAAK3B,GAAK,EAC1BkF,EAAE3E,KAAK,GAEX,QALyB,CAL7B,IAAImB,EAAS,EACTuJ,EAAa,EACjB,IAAIC,EAAa,EACjB,MAAezD,MAAI6B,EAAM5J,QAAeiI,IAAE,IAAK,IAC/C,MAAeF,MAAI6B,EAAM5J,QAAeiI,IAAE,IAAK,IAQ/C,IAAK,IAAI3B,EAAI,EAAGA,EAAIsD,EAAS5J,OAAQsG,GAAK,EAAG,CACzC,IAAAmF,EAAa7B,EAAGtD,GAAUgB,eAC1BoE,EAAa9B,EAAGtD,GAAUiB,gBAAiBkE,EAC3CF,EAAa9E,KAAKkF,IAAIJ,EAAYE,GAClCD,EAAa/E,KAAKkF,IAAIH,EAAYE,GAClCE,EAAOtF,GAAKgF,EAAeG,GAC3B,IAAK,IAAInL,EAAI,EAAGA,EAAIsL,EAAOtF,GAAGtG,OAAQM,GAAK,EACvCsL,EAAOtF,GAAGhG,GAAK,IAAOP,EAAOI,YAAYG,EAAI0B,GAOjD,IALAA,GAAUyJ,EACVI,EAAY9G,EAAGO,0BAAOoG,GAEtBI,EAAgBtJ,IADAV,EAAI8J,EAAWtF,GAASuF,EAAE1J,YAAkB,GAC5CK,IAAQqJ,GACxBE,EAAOzF,GAAKgF,EAAeO,EAAO1J,YAAc,GACvC7B,EAAI,EAAGA,EAAIyL,EAAOzF,GAAGtG,OAAQM,GAAK,EACvC0L,EAAc1L,IAAO6B,cAAsBmE,GAAQtG,OACnD+L,EAAOzF,GAAGhG,GAAK0L,GAAY,EAAIF,EAAQ5J,MAAM8J,GAAY,CAhBpB,CAsB7C,MAFUV,EADVW,EAAoBrC,EAAGE,OAAS,CAAMC,EAAGhJ,IAAGgJ,IAASxC,gBAAiB,IAElE/G,EAAQ,EACHF,EAAI,EAAGA,EAAIiL,EAAYjL,GAAK,EACjC,IAASgG,EAAI,EAAGA,EAAIsD,EAAS5J,OAAQsG,GAAK,EAClChG,EAAIsL,EAAOtF,GAAGtG,SACdiD,EAAKzC,GAASoL,EAAOtF,GAAGhG,GACxBE,GAAS,GAIrB,IAASF,EAAI,EAAGA,EAAIkL,EAAYlL,GAAK,EACjC,IAASgG,EAAI,EAAGA,EAAIsD,EAAS5J,OAAQsG,GAAK,EAClChG,EAAIyL,EAAOzF,GAAGtG,SACdiD,EAAKzC,GAASuL,EAAOzF,GAAGhG,GACxBE,GAAS,GAIrB,OAAOyC,CAnD0B,EA/SrCiJ,EAAA5C,mBAA4B,CACxBC,QAAQ3F,GACJ,IAAAuI,EAAW,GACX,IAAK,IAAI7L,EAAI,EAAGA,EAAIsD,EAAE5D,OAAQM,GAAK,EAAG,CAClC,IAAAyD,EAAOH,EAAGI,WAAE1D,GACZ6L,EAAMtL,KAAS,IAAJkD,EAFuB,CAItC,OAAOoI,CANA,GASfD,EAAAf,KAAc,IACde,EAAAd,KAAc,OClDlBgB,OACIC,GAAmB,2BAAkBC,QAAMD,GAM/BE,SAAAA,EAAUC,KAA0BC,GAChD,IAAKA,EAAQzM,OAAQ,SACrB,MAAYyM,EAAG1K,QACf,YAAe2K,IAAXC,GAAyBP,EAASI,IAAYJ,EAASO,IAC3DH,EAAS,IAAKA,UACPI,KAAKD,GAAQlJ,QAASoJ,IACzB,MAAiBL,EAAGK,KACHF,EAAGE,GAEhB9E,MAAMuE,QAAQQ,IAAgB/E,MAAMuE,QAAQS,GAC5CP,EAAOK,GAAOE,EACPX,EAASU,IAAgBV,EAASW,GACzCP,EAAOK,GAAON,EAAU,IAAKO,GAAeC,GAE5CP,EAAOK,GAAOE,IAIfR,EAAUC,KAAWC,IAf+CD,CAHH,KCPhEQ,EAAAC,EAAAD,IAAY,CAAA,EA2BRE,SAAAA,EAAiBC,GAG7B,OAFiB,IAAKA,IAELC,aAAeC,EAAYD,WAAWpN,OACnD,MAAU0B,MAAM,8CAcpB,OAVI2L,EAAYC,SADZD,EAAYC,SACWC,OAAOF,EAAYC,UAEnB,EAG3BD,EAAYD,WAAaC,EAAYD,WAAWnF,IAAKuF,IAAkD,IAChGA,EACHxL,OAAQuL,OAAOC,EAAUxL,WAGtBqL,CAlBwC,CA1B/CL,EAAAS,OAAA,SACAT,EAAAU,OAAA,aCGQC,EAAA1M,EAAA0M,IAAO,CAAA,EACfA,EAAAC,IAAA,MACAD,EAAAE,UAAA,aACAF,EAAAG,QAAA,UACAH,EAAAI,aAAA,gBACAJ,EAAAK,aAAA,gBACAL,EAAAM,eAAA,kBACAN,EAAAO,OAAA,SACAP,EAAAQ,cAAA,iBACAR,EAAAS,OAAA,SACAT,EAAAU,YAAA,iBACAC,WAAA,cACAX,EAAAY,QAAA,UACAZ,EAAAa,KAAA,OACAb,EAAAc,MAAA,QACAd,EAAAe,KAAA,OACAf,EAAAgB,MAAA,QACAhB,EAAAiB,SAAA,WACAjB,EAAAkB,QAAA,UACAlB,EAAAmB,gBAAA,mBACAnB,EAAAoB,cAAA,iBACApB,EAAAqB,iBAAA,oBACArB,EAAAsB,eAAA,kBACAtB,EAAAuB,MAAA,YAGQC,EAAAC,EAAAD,IAAa,CAAA,EACrBA,EAAAvB,IAAA,MACAuB,EAAAf,OAAA,SACAe,EAAAV,MAAA,QACAU,EAAApB,aAAA,gBACAoB,EAAAjB,OAAA,SACAiB,EAAAE,QAAA,UACAF,EAAAG,SAAA,WACAH,EAAAT,KAAA,OACAS,EAAAP,SAAA,WACAQ,EAAAP,QAAA,YACAN,QAAA,cAGQgB,EAAAC,EAAAD,IAAgB,CAAA,IACxB3B,IAAA,MACA2B,EAAAnB,OAAA,SACAmB,EAAAxB,aAAA,gBACAwB,EAAArB,OAAA,WACAmB,QAAA,UACAE,EAAAD,SAAA,WACAC,EAAAE,aAAA,oBAGQC,EAAAC,EAAAD,IAAS,CAAA,EACjBA,EAAAtB,OAAA,SACAsB,EAAAE,OAAA,aAGQC,EAAAC,EAAAD,IAAS,CAAA,EAIjBA,EAAAE,OAAA,SAIAF,EAAAG,QAAA,YAIAC,WAAA,aA+JGC,IAAAA,EAAoB,CACvBC,cAAUzD,EACV0D,MAAOV,EAAUtB,OACjBiC,WAAO3D,EACP4D,cACAC,UAAM7D,EACNzJ,KAAM,GACNuN,UAAW,CACPpN,WAAY0E,EAAW,GACvB9E,UAAM0J,EACN7D,qBAAsBV,EAAqBjH,GAE/CuP,aAAc,CACVzN,KAAM6M,EAAUE,OAChBW,UAAW,GACXC,mBACAC,OAAQ,EACR5I,KAAM,CACF6I,MAAO,wBAGfC,YAAa,CACTC,KAAMpD,EAAQS,OACdyC,MAAO,OACPN,KAAM,KAIES,SAAAA,EAAgBC,GAuD5B,SAtDgB,IAAKA,IAEVR,aAAe,IACnBS,EAAWT,aACdC,UAAWjK,KAAK0K,IAAI,EAAG5D,OAAO2D,EAAWT,aAAaC,aAAe,EACrEE,OAAQrD,OAAO2D,EAAWT,aAAaG,QACvC5I,KAAM,IACCkJ,EAAWT,aAAazI,OAI/BkJ,EAAWT,aAAazN,MAAQ6M,EAAUG,UAASkB,EAAWT,aAAaG,OAAS,GACpFM,EAAWT,aAAazI,KAAKmF,WAC7B+D,EAAWT,aAAazI,KAAKmF,SAAWD,EAAiBgE,EAAWT,aAAazI,KAAKmF,WAG1F+D,EAAWJ,YAAc,IAClBI,EAAWJ,aAEdI,EAAWJ,YAAY3D,WACvB+D,EAAWJ,YAAY3D,SAAWD,EAAiBgE,EAAWJ,YAAY3D,aAGnE2D,YAAYP,KAAO9J,KAAK2K,MAAM3K,KAAKkF,IAAI,EAAGuF,EAAWJ,YAAYP,OAAS,IAEjFW,EAAWG,uBACXH,EAAWG,qBAAuB,IAC3BH,EAAWG,sBAEdH,EAAWG,qBAAqBlE,WAChC+D,EAAWG,qBAAqBlE,SAAWD,EAAiBgE,EAAWG,qBAAqBlE,YAIhG+D,EAAWI,oBACXJ,EAAWI,kBAAoB,IACxBJ,EAAWI,mBAEdJ,EAAWI,kBAAkBnE,WAC7B+D,EAAWI,kBAAkBnE,SAAWD,EAAiBgE,EAAWI,kBAAkBnE,YAI1F+D,EAAWK,oBACXL,EAAWK,kBAAoB,IACxBL,EAAWK,mBAEdL,EAAWK,kBAAkBpE,WAC7B+D,EAAWK,kBAAkBpE,SAAWD,EAAiBgE,EAAWK,kBAAkBpE,cAI9EgD,WAAUe,EAAWf,SAAWA,UAEzCe,CAvDqC,CCjQzC,IAAAM,EAA6B,CAChC,CAACrJ,EAAqBnH,GAAI,IAC1B,CAACmH,EAAqBlH,GAAI,IAC1B,CAACkH,EAAqBjH,GAAI,IAC1B,CAACiH,EAAqBhH,GAAI,ICHvB,IAAAsQ,EAAiB,CACpB7D,IAAM8D,IACF,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAOjC,SALgBvB,EAAS0B,gBAAgB,6BAA8B,WAC/DC,aAAa,KAAMC,EAAUJ,EAAIpB,EAAO,IAChDyB,EAAQF,aAAa,KAAMC,EAAUH,EAAIrB,EAAO,IAChDyB,EAAQF,aAAa,IAAKC,EAAUxB,EAAO,IAEpCyB,GAEX5D,OAAQ,CAACsD,GAA6BrB,MAAAA,EAAQqB,EAAKnB,KAAMD,OAAAA,EAASoB,EAAKnB,MAAS,CAAA,KAC5E,MAAQoB,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMJ,SAAAA,GAAauB,EAQjC,SANgBvB,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aAAa,IAAKC,EAAUJ,GAAKpB,EAAOF,GAAS,IACzD2B,EAAQF,aAAa,IAAKC,EAAUH,GAAKrB,EAAOD,GAAU,IAC1D0B,EAAQF,aAAa,QAASC,EAAU1B,MAChCyB,aAAa,SAAUC,EAAUzB,OAK7C2B,YAAa,CAACP,GAA6BpB,OAAAA,EAASoB,EAAKnB,MAAS,MAC9D,MAAQA,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAYjC,OAVMM,EAAU7B,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aACJ,IACAI,CAAA,KAAYP,KAAKC,GAAKrB,EAAOD,GAAU,OACrCA,OACAC,EAAO,OACPD,EAAS,KAAKA,EAAS,cAAcA,OAIpC0B,GAGXG,cAAgBT,IACZ,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAajC,SAXgBvB,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aACJ,IACAI,CAAA,KAAYP,KAAKC,OACfrB,OACAA,QACCA,EAAO,OACRA,EAAO,KAAKA,EAAO,YAAYA,EAAO,MAAMA,EAAO,UAO7D6B,mBAAqBV,IACjB,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAYjC,SAVgBvB,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aACJ,IACAI,CAAA,KAAYP,KAAKC,OACfrB,OACAA,OACAA,KAAQA,YAAeA,MAASA,UAO1C8B,UAAYX,IACR,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAcjC,OAZMM,EAAU7B,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aACJ,IACAI,CAAA,KAAYP,KAAKC,OACfrB,EAAO,OACPA,EAAO,KAAKA,EAAO,WAAWA,EAAO,KAAKA,EAAO,OACjDA,EAAO,QACNA,EAAO,OACRA,EAAO,KAAKA,EAAO,YAAYA,EAAO,MAAMA,EAAO,UAO7D/B,KAAOkD,IACH,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAEjC,IAAMY,EAAK,EAAI7L,KAAK8L,GAAK,IACnBC,EAAK,GAAK/L,KAAK8L,GAAK,IAIpBE,EAAOlC,GAAQ,EAFVmC,IAEmBjM,KAAKkM,IAAIL,IACjCM,GAAQrC,GAJHsC,IACAH,IAGqBjM,KAAKqM,IAAIR,IAEzC,MAAMS,GAAQxC,EAAO9J,KAAKkM,IAAIH,GAAM,IACvBjC,EAAO9J,KAAKqM,IAAIN,GAAM,QAE7BR,EAAU7B,EAAS0B,gBAAgB,6BAA8B,eACvEG,EAAQF,aACJ,IACAI,CAAA,KAAYP,KAAKC,EAAIrB,OAXdmC,IAYLnC,OAAekC,KAAQG,KAAQrC,KAb1BsC,KAamCtC,OACxCwC,KAAQC,MAASzC,EAAO,KAAKA,GAdxBsC,IAcqC,OAAOtC,KAAQA,GAdpDsC,IAciE,QAIrEb,GAEXvD,MAAQiD,IACJ,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAuDjC,OArDMM,EAAU7B,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aACJ,IACAmB,EAAU,CACN,IACA,EACA,OACA,KACA,MACA,QACA,OACA,QACA,OACA,OACA,KACA,OACA,QACA,OACA,QACA,OACA,OACA,KACA,QACA,QACA,OACA,QACA,QACA,OACA,KACA,QACA,MACA,OACA,QACA,QACA,OACA,KACA,OACA,OACA,QACA,OACA,IACA,IACA,IACA,QACA,OACA,QACA,OACA,GACA,IACA,KACD,CAAEtB,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,KAGRyB,GAEXlE,QAAU4D,IACN,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAUjC,OARMM,EAAU7B,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aAAa,IAAKC,EAAUJ,IACpCK,EAAQF,aAAa,IAAKC,EAAUH,IACpCI,EAAQF,aAAa,QAASC,EAAUxB,MAChCuB,aAAa,SAAUC,EAAUxB,IACzCyB,EAAQF,aAAa,KAAMC,EAAUxB,EAAO,IAC5CyB,EAAQF,aAAa,KAAMC,EAAUxB,EAAO,IAErCyB,GAEX9D,OAASwD,IACL,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,IACjBnB,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,QAcvE,OAbAG,EAAQF,aACJ,IACAI,CAAA,KAAYP,KAAKC,EAAI,IAAMsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,IAAMA,QACN,IAAOA,OACP,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,EAAKA,OACLvB,UAMVtC,QAAUqC,IACN,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAgBjC,OAdMM,EAAU7B,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aACJ,IACAI,CAAA,KAAYP,KAAKC,EAAIrB,EAAO,OAC1BA,EAAO,OACPA,EAAO,KAAKA,EAAO,WAAWA,EAAO,KAAKA,EAAO,OAChDA,EAAO,EAAK,QACXA,EAAO,EAAK,OACdA,EAAO,KAAKA,EAAO,YAAYA,EAAO,MAAMA,EAAO,QAClDA,EAAO,OACRA,EAAO,KAAKA,EAAO,YAAYA,EAAO,KAAKA,EAAO,OAIjDyB,GAEXtD,KAAM,CAACgD,GACHyB,OAAAA,EAAS,EACTC,YAAAA,EAAc1B,EAAKnB,KAAO,EAC1B8C,YAAAA,EAAc3B,EAAKnB,KAAO,GAC1B,MACA,MAAQA,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAC3B4B,EAAK3B,EAAIpB,EAAO,EAChBgD,EAAK3B,EAAIrB,EAAO,EAEhBiD,EAAQ/M,KAAK8L,GAAKY,EAaxB,OAXMnB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aACJ,IACA/J,MAAM,EAAIoL,GAAQnL,KAAK,GAAGC,IAAI,CAACC,EAAG5H,IAIvB4R,CAAA,GAAgB,IAAN5R,EAAU,IAAM,OAFlBgT,GADTG,EAASnT,EAAI,GAAM,EAAI8S,EAAcC,GACd5M,KAAKkM,IAAIrS,EAAIkT,MAC3BD,EAAKE,EAAShN,KAAKqM,IAAIxS,EAAIkT,MAE3CE,KAAK,MAGL1B,GAEXrD,MAAQ+C,IACJ,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAG3BiC,GAASpD,GADTqD,EAAmB,GAAPrD,IACiB,EAE7ByB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,eACvEG,EAAQF,aACJ,IACAI,CAAA,KAAYP,EAAIgC,KAAS/B,OACvBgC,WACED,OACFA,WACEC,QACDD,WACCA,QACDC,YACED,QACFA,YACEC,OACHD,SAIC3B,GAEX6B,KAAM,CAACnC,EAA2BoC,KAC9B,MAAQvD,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAC3BwB,EAAU3C,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,QAEjEkC,EAAQ,CACV7B,CAAA,KAAYP,KAAKC,EAAI,IAAMsB,SAG3Bc,EAAI,EAAId,EAgFZ,MA9EkB,SAAdY,EAAQG,IACRF,EAAMlT,KACFqR,CAAA,KAAY8B,OACV,IAAMd,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,KAE/Dc,EAAI,EAAId,GACa,OAAdY,EAAQG,IACfF,EAAMlT,KACFqR,CAAA,KAAY,EAAIgB,EAAUc,OACxB,IAAMd,KAAW,IAAMA,WAA2B,IAAVA,MAA2B,IAAVA,KAE/Dc,EAAI,EAAId,IAERa,EAAMlT,KACFqR,CAAA,KAAY,IAAMgB,EAAUc,KAEhCA,EAAI,IAAMd,GAGI,SAAdY,EAAQI,IACRH,EAAMlT,KACFqR,CAAA,KAAY8B,OACV,IAAMd,KAAW,IAAMA,WAA2B,IAAVA,MAA2B,IAAVA,KAE/Dc,GAAI,EAAKd,GACY,OAAdY,EAAQI,IACfH,EAAMlT,KACFqR,CAAA,KAAY,EAAIgB,EAAUc,OACxB,IAAMd,KAAW,IAAMA,YAA2B,IAAVA,MAA4B,IAAVA,KAEhEc,GAAI,EAAKd,IAETa,EAAMlT,KACFqR,CAAA,KAAY,IAAMgB,EAAUc,KAEhCA,GAAI,IAAOd,GAGG,SAAdY,EAAQK,IACRJ,EAAMlT,KACFqR,CAAA,KAAY8B,OACV,IAAMd,KAAW,IAAMA,YAA2B,IAAVA,MAA4B,IAAVA,KAEhEc,GAAI,EAAKd,GACY,OAAdY,EAAQK,IACfJ,EAAMlT,KACFqR,CAAA,MAAY,EAAKgB,EAAUc,OACzB,IAAMd,KAAW,IAAMA,YAA2B,IAAVA,KAA4B,IAAVA,KAEhEc,GAAI,EAAKd,IAETa,EAAMlT,KACFqR,CAAA,MAAY,IAAOgB,EAAUc,KAEjCA,GAAI,IAAOd,GAGG,SAAdY,EAAQM,GACRL,EAAMlT,KACFqR,CAAA,KAAY8B,OACV,IAAMd,KAAW,IAAMA,YAA2B,IAAVA,KAA4B,IAAVA,KAE3C,OAAdY,EAAQM,GACfL,EAAMlT,KACFqR,CAAA,MAAY,EAAKgB,EAAUc,OACzB,IAAMd,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,KAG/Da,EAAMlT,KACFqR,CAAA,MAAY,IAAOgB,EAAUc,KAIrChC,EAAQF,aACJ,IACAiC,EAAML,KAAK,KAAO,MAGf1B,IC3WfqC,EAAwB,CACpB,CAAClF,EAAcvB,KAAM8D,GAAQ4C,EAAa,IACnC5C,EACH6C,KAAM9C,EAAY7D,MAEtB,CAACuB,EAAcf,QAASsD,GAAQ4C,EAAa,IACtC5C,EACH6C,KAAM9C,EAAYrD,SAEtB,CAACe,EAAcV,OAAQiD,GAAQD,EAAYhD,MAAMiD,GACjD,CAACvC,EAAcpB,cAAe2D,GAAQ4C,EAAa,IAC5C5C,EACH6C,KAAM9C,EAAY3D,UAEtB,CAACqB,EAAcjB,QAASwD,GAAQ4C,EAAa,IACtC5C,EACH6C,KAAM9C,EAAYvD,SAEtB,CAACiB,EAAcE,SAAUqC,GAAQ4C,EAAa,IACvC5C,EACH6C,KAAM9C,EAAYpC,UAEtB,CAACF,EAAcG,UAAWoC,GAAQ4C,EAAa,IACxC5C,EACHpE,UAAWoE,EAAKpE,UAAY,GAAK7G,KAAK8L,GACtCgC,KAAM9C,EAAYpC,UAEtB,CAACF,EAAcT,MAAOgD,GAAQD,EAAY/C,KAAKgD,GAC/C,CAACvC,EAAcP,UAAW8C,GAAQD,EAAY/C,KAAKgD,EAAM,CACrDyB,OAAQ,IACRC,YAAa1B,EAAKnB,KAAO,EACzB8C,YAAa3B,EAAKnB,KAAO,IAE7B,CAACpB,EAAcN,SAAU6C,GAAQD,EAAY/C,KAAKgD,EAAM,CACpDyB,OAAQ,EACRC,YAAa1B,EAAKnB,KAAO,EACzB8C,YAAa3B,EAAKnB,KAAO,IAE7B,CAACpB,EAAcZ,SAAUmD,GAAQ4C,EAAa,IACvC5C,EACHpE,SAAU7G,KAAK8L,GAAK,EACpBgC,KAAMC,GAAS/C,EAAYrD,OAAOoG,EAAO,CAAEnE,MAAoB,IAAbmE,EAAMjE,KAAaD,OAAqB,IAAbkE,EAAMjE,UC3CpF,IAAAkE,EAAoB,CACvB7G,IAAM8D,IACF,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAE3BwB,EAAU3C,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,QACvEG,EAAQF,aAAa,YAAa,WAClCE,EAAQF,aACJ,IACAI,CAAA,KAAYP,EAAIpB,EAAO,KAAKqB,OAC1BrB,EAAO,KAAKA,EAAO,uBAEjB2C,OACF3C,EAAO,EAAI2C,KAAW3C,EAAO,EAAI2C,oBAIvC,MAAMlL,EAAOmI,EAAS0B,gBAAgB,6BAA8B,QASpE,OARA7J,EAAK8J,aAAa,YAAa,WAC/B9J,EAAK8J,aACD,IACAI,CAAA,KAAYP,EAAIpB,EAAO,KAAKqB,EAAIsB,OAC9B3C,EAAO,EAAI2C,KAAW3C,EAAO,EAAI2C,mBAIhC,CAAClB,EAAShK,IAErBoG,OAASsD,IACL,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAE3BwB,EAAU3C,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,QACvEG,EAAQF,aAAa,YAAa,WAClCE,EAAQF,aACJ,IACAI,CAAA,KAAYP,KAAKC,OACfrB,OACAA,QACCA,SAEDoB,EAAIuB,KAAWtB,EAAIsB,OACnB3C,EAAO,EAAI2C,OACX3C,EAAO,EAAI2C,OACH,EAAIA,EAAX3C,OAIP,MAAMvI,EAAOmI,EAAS0B,gBAAgB,6BAA8B,eACpE7J,EAAK8J,aAAa,YAAa,WAC/B9J,EAAK8J,aACD,IACAI,CAAA,KAAYP,EAAIuB,KAAWtB,EAAIsB,OAC7B3C,EAAO,EAAI2C,OACX3C,EAAO,EAAI2C,QACV3C,EAAO,EAAI2C,OAIX,CAAClB,EAAShK,IAErB+F,aAAe2D,IACX,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAE3BwB,EAAU3C,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,QACvEG,EAAQF,aAAa,YAAa,WAClCE,EAAQF,aACJ,IACAI,CAAA,KAAYP,KAAKC,EAAI,IAAMsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA4B,KAAVA,QAC1D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA2B,IAAVA,SAE1DvB,EAAI,IAAMuB,KAAWtB,EAAIsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA2B,IAAVA,QAC1D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA4B,KAAVA,OAIhE,MAAMlL,EAAOmI,EAAS0B,gBAAgB,6BAA8B,QAiBpE,SAhBKC,aAAa,YAAa,aAC1BA,aACD,IACAI,CAAA,KACEP,EAAIuB,KAAWtB,EAAI,IAAMsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA4B,KAAVA,QAC1D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,UACtDA,OACL,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA2B,IAAVA,OAIzD,CAAClB,EAAShK,IAErBkG,OAASwD,IACL,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAE3BwB,EAAU3C,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,UAC/DC,aAAa,YAAa,aAC1BA,aACJ,IACAI,CAAA,KAAYP,KAAKC,EAAI,IAAMsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,IAAMA,QACN,IAAOA,OACP,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,UACtDA,OACLvB,SAEAA,EAAI,IAAMuB,KAAWtB,EAAIsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,IAAMA,YACCA,OACP,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,IAAOA,OAIb,MAAMlL,EAAOmI,EAAS0B,gBAAgB,6BAA8B,eACpE7J,EAAK8J,aAAa,YAAa,WAC/B9J,EAAK8J,aACD,IACAI,CAAA,KACEP,EAAI,GAAMuB,KAAWtB,EAAIsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,IAAMA,QACN,IAAOA,OACP,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,IAAOA,OAIN,CAAClB,EAAShK,IAErBqH,QAAUqC,IACN,MAAQnB,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAGzB,SAAAA,GAAauB,EAE3BwB,EAAU3C,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,UAC/DC,aAAa,YAAa,WAClCE,EAAQF,aACJ,IACAI,CAAA,KAAYP,KAAKC,EAAI,IAAMsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,IAAMA,QACN,IAAOA,OACP,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA2B,IAAVA,SAE1DvB,EAAI,IAAMuB,KAAWtB,EAAIsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,IAAMA,QACN,IAAOA,OACP,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA4B,KAAVA,OAIhE,MAAMlL,EAAOmI,EAAS0B,gBAAgB,6BAA8B,iBAC/DC,aAAa,YAAa,aAC1BA,aACD,IACAI,CAAA,KACEP,EAAI,GAAMuB,KAAWtB,EAAIsB,OACzB,EAAIA,OACJ,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA2B,IAAVA,OACzD,IAAMA,QACN,IAAOA,OACP,IAAMA,KAAW,IAAMA,WAA4B,KAAVA,KAA4B,KAAVA,QAC3D,EAAKA,OACL,IAAMA,KAAW,IAAMA,WAA2B,IAAVA,KAA4B,KAAVA,OAIzD,CAAClB,EAAShK,IAErByH,aAAeiC,IACX,MAAQC,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMJ,SAAAA,GAAauB,EAEjC,IAAMgD,EAAenE,EAAO,IAC5B,MAAM+C,EAAK3B,EAAIpB,EAAO,EAChBgD,EAAK3B,EAAIrB,EAAO,EAChB2C,EAAU3C,EAAO,EAEvB,MAAMyB,EAAU7B,EAAS0B,gBAAgB,6BAA8B,QA0BvE,SAzBQC,aAAa,YAAa,aAC1BA,aACJ,IACAI,CAAA,KAAYP,KAAKC,OACfrB,OACAA,QACCA,SAED+C,EAAKoB,KAAgBnB,OACrBmB,KAAgBA,WAAqC,EAAfA,SACtCA,KAAgBA,WAAsC,GAAfA,UAIvC1M,EAAOmI,EAAS0B,gBAAgB,6BAA8B,SAC/DC,aAAa,YAAa,WAC/B9J,EAAK8J,aACD,IACAI,CAAA,KAAYP,EAAIuB,KAAWtB,EAAIsB,OAC7B3C,EAAO,EAAI2C,OACX3C,EAAO,EAAI2C,QACV3C,EAAO,EAAI2C,OAIX,CAAClB,EAAShK,KC7OzB2M,EAA2B,CACvB,CAACpF,EAAiB3B,KAAM8D,GAAQ+C,EAAe7G,IAAI8D,GACnD,CAACnC,EAAiBnB,QAASsD,GAAQ+C,EAAerG,OAAOsD,GACzD,CAACnC,EAAiBxB,cAAe2D,GAAQ+C,EAAe1G,aAAa2D,GACrE,CAACnC,EAAiBrB,QAASwD,GAAQ4C,EAAa,IACzC5C,EACH6C,KAAME,EAAevG,SAEzB,CAACqB,EAAiBF,SAAUqC,GAAQ4C,EAAa,IAC1C5C,EACH6C,KAAME,EAAepF,UAEzB,CAACE,EAAiBD,UAAW,EAAGhC,SAAAA,KAAaoE,KAAW4C,EAAa,IAC9D5C,EACHpE,UAAWA,GAAY,GAAK7G,KAAK8L,GACjCgC,KAAME,EAAepF,UAEzB,CAACE,EAAiBE,cAAeiC,GAAQ+C,EAAehF,aAAaiC,ICfnEkD,SAAUA,GAAiBjD,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMJ,SAAAA,EAAU0E,YAAAA,IAA2BC,OAAAA,EAASrD,EAAYU,cAAe4C,IAAAA,EAAMtD,EAAYQ,aAAgB,CAAA,GACpJ,IAAA+C,EAAkBH,GAAcA,GAAe,EAAG,KAClDI,EAAmBJ,GAAcA,EAAI,EAAa,KAClDK,EAAiBL,GAAcA,EAAI,GAAa,KAGhDM,EAAoBH,IAA+BE,GAFnDE,EAAoBP,GAAcA,EAAI,EAAa,MAInD,OAAuB,IAAnBM,EACO1D,EAAY7D,IAAI,CACnB+D,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EACNJ,SAAAA,IAEGgF,EAAiB,GAAMH,GAAgBC,GAAmBC,GAAeE,EACzE3D,EAAYrD,OAAO,CACtBuD,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EACNJ,SAAAA,IAEsB,IAAnBgF,GAEH7H,EAAW,EAEX0H,GAAgBE,EAChB5H,EAAW7G,KAAK8L,GAAK,EACd2C,GAAeD,EACtB3H,EAAW7G,KAAK8L,GACT0C,GAAiBG,IACxB9H,GAAY7G,KAAK8L,GAAK,GAGnB+B,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAAA,EACZ6C,SAAAA,EACAoE,KAAMO,MAINxH,EAAW,EAEX4H,EACA5H,EAAW7G,KAAK8L,GAAK,EACd0C,EACP3H,EAAW7G,KAAK8L,GACT6C,IACP9H,GAAY7G,KAAK8L,GAAK,GAGnB+B,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAAA,EACZ6C,SAAAA,EACAoE,KAAMQ,IAlDwI,CA0DpJ7G,SAAUA,GAASyD,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMJ,SAAAA,EAAU0E,YAAAA,IAA2BC,OAAAA,EAASrD,EAAYU,eAAkB,CAAA,GAC7G,IAAA6C,EAAkBH,GAAcA,GAAe,EAAG,KAClDI,EAAmBJ,GAAcA,EAAI,EAAa,KAClDK,EAAiBL,GAAcA,EAAI,GAAa,KAKhD,OAFoBG,IAA+BE,KAF/BL,GAAcA,EAAI,EAAa,QAI5B,EACZP,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAU7G,KAAK8L,GAAK,EAChCpC,SAAAA,EACAoE,KAAM9C,EAAYY,YAEd2C,GAAiBE,EAOjBD,GAAkBG,EASvB3D,EAAYrD,OAAO,CACtBuD,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EACNJ,SAAAA,IATOmE,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAU7G,KAAK8L,GAAK,EAChCpC,SAAAA,EACAoE,KAAMO,IAVHR,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,UAAW7G,KAAK8L,GAAK,EACjCpC,SAAAA,EACAoE,KAAMO,GAnBiG,UAuCnGO,GAAU1D,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMJ,SAAAA,EAAU0E,YAAAA,IAA2BS,OAAAA,EAAS/E,EAAMjD,SAAAA,EAAW,EAAGiI,SAAAA,EAAW9D,EAAYQ,YAAarE,IAAAA,EAAM6D,EAAY7D,KAAQ,CAAA,GAClK,IAAAsH,EAAiBL,GAAcA,EAAI,GAAa,KAGhD,OAFAO,EAAoBP,GAAcA,EAAI,EAAa,KAE/CK,GAAeE,EAERd,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAAA,EACZ6C,SAAAA,EACAoE,KAAM,IAAK9C,EAAYrD,OAAO,CAC1BuD,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EACNJ,SAAAA,GACD,CAAEE,MAAOiF,MAETJ,IAAgBE,GAEvB9H,GAAY7G,KAAK8L,GAAK,EACf+B,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAAA,EACZ6C,SAAAA,EACAoE,KAAM7C,GAAQ6D,EAAS7D,EAAM,CAAEpB,OAAQgF,OAEpCF,IAAmBF,GAE1B5H,GAAY7G,KAAK8L,GAAK,EACf+B,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAAA,EACZ6C,SAAAA,EACAoE,KAAM7C,GAAQ6D,EAAS7D,EAAM,CAAEpB,OAAQgF,OAIxChB,EAAa,CAChB3C,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMjD,SAAAA,EACZ6C,SAAAA,EACAoE,KAAM,IAAK3G,EAAI,CACX+D,EAAGA,GAAKpB,EAAO+E,GAAU,EACzB1D,EAAGA,GAAKrB,EAAO+E,GAAU,EACzB/E,KAAM+E,EACNnF,SAAAA,KAvC4J,CClGxK,IAAAqF,EAAkB,CACd,CAAC7H,EAAQC,KAAM8D,GAAQD,EAAY7D,IAAI8D,GACvC,CAAC/D,EAAQE,WAAY,EAAG0C,KAAAA,EAAMoB,EAAAA,EAAGC,EAAAA,EAAG6D,WAAAA,KAAe/D,MAE/C,MAAMgE,EAAwB,KADxBC,EAAOF,GAAchP,KAAKmP,UACU,IAE1C,OAAOnE,EAAY7D,IAAI,IAChB8D,EACHnB,KAAMA,EAAOmF,EACb/D,EAAGA,EAAIpB,EAAOoF,KAAS,EAAID,GAC3B9D,EAAGA,EAAIrB,EAAOoF,KAAS,EAAID,MAGnC,CAAC/H,EAAQG,SAAU4D,GAAQkD,EAAelD,GAC1C,CAAC/D,EAAQI,cAAe2D,GAAQkD,EAAelD,EAAM,CAAEoD,OAAQrD,EAAYW,qBAC3E,CAACzE,EAAQK,cAAe0D,GAAQ2D,EAAQ3D,GACxC,CAAC/D,EAAQM,gBAAiB,EAAG4G,YAAAA,KAAgBnD,KAAW2D,EAAQ,IACzD3D,EACHmD,YAAaA,EAAc,CAAClD,EAAGC,IAAMiD,EAAYjD,EAAGD,QAAKjF,GAC1D,CAAEY,UAAW7G,KAAK8L,GAAK,IAC1B,CAAC5E,EAAQO,QAASwD,GAAQxD,EAAOwD,GACjC,CAAC/D,EAAQQ,eAAgBuD,GAAQxD,EAAOwD,EAAM,CAAEoD,OAAQrD,EAAYW,qBACpE,CAACzE,EAAQS,QAASsD,GAAQD,EAAYrD,OAAOsD,GAC7C,CAAC/D,EAAQU,aAAc,EAAGsD,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMJ,SAAAA,KAO3BsB,EAAYrD,OAAO,CACtBuD,EAJAA,GAAmB,IAHFpB,EAOdqB,EAHHA,GAAmB,IAJFrB,EAOXA,KALVA,EAAsB,GAFDA,EAQjBJ,SAAAA,IAGR,CAACxC,EAAQW,YAAa,EAAGqD,EAAAA,EAAGC,EAAAA,EAAGrB,KAAAA,EAAMJ,SAAAA,KAO1BsB,EAAYrD,OAAO,CACtBuD,EAJAA,GAAmB,IAHFpB,EAOdqB,EAHHA,GAAmB,IAJFrB,EAOXA,KALVA,EAAsB,GAFDA,EAQjBJ,SAAAA,IAGR,CAACxC,EAAQY,SAAUmD,GAAQ4C,EAAa,IACjC5C,EACHpE,SAAU7G,KAAK8L,GAAK,EACpBgC,KAAMC,GAAS/C,EAAYrD,OAAOoG,EAAO,CAAEnE,MAAoB,IAAbmE,EAAMjE,KAAaD,OAAqB,IAAbkE,EAAMjE,SAEvF,CAAC5C,EAAQa,MAAOkD,GAAQkD,EAAelD,EAAM,CACzCoD,OAAQrD,EAAYW,mBACpB2C,IAAKtD,EAAYjD,OAErB,CAACb,EAAQc,OAAQiD,GAAQD,EAAYhD,MAAMiD,GAC3C,CAAC/D,EAAQe,MAAOgD,GAAQD,EAAY/C,KAAKgD,GACzC,CAAC/D,EAAQgB,OAAQ+C,GAAQD,EAAY9C,MAAM+C,GAC3C,CAAC/D,EAAQiB,UAAW8C,GAAQD,EAAY/C,KAAKgD,EAAM,CAC/CyB,OAAQ,IACRC,YAAa1B,EAAKnB,KAAO,EACzB8C,YAAa3B,EAAKnB,KAAO,IAE7B,CAAC5C,EAAQkB,SAAU6C,GAAQD,EAAY/C,KAAKgD,EAAM,CAC9CyB,OAAQ,EACRC,YAAa1B,EAAKnB,KAAO,EACzB8C,YAAa3B,EAAKnB,KAAO,IAE7B,CAAC5C,EAAQoB,eAAgB2C,GAAQ2D,EAAQ3D,EAAM,CAAE4D,OAAoB,GAAZ5D,EAAKnB,OAC9D,CAAC5C,EAAQmB,iBAAkB,EAAG+F,YAAAA,KAAgBnD,KAAW2D,EAAQ,IAC1D3D,EACHmD,YAAaA,EAAc,CAAClD,EAAGC,IAAMiD,EAAYjD,EAAGD,QAAKjF,GAC1D,CAAE4I,OAAoB,GAAZ5D,EAAKnB,KAAYjD,UAAW7G,KAAK8L,GAAK,IACnD,CAAC5E,EAAQsB,gBAAiByC,GAAQ2D,EAAQ3D,EAAM,CAC5C4D,OAAoB,GAAZ5D,EAAKnB,KACbgF,SAAU,CAACM,EAAOC,KAEd,MAAMzF,EAAQqB,EAAKnB,MAAQ,EAAY,KAD1BmB,EAAK+D,YAAchP,KAAKmP,WAGrC,SAAmBxH,OAAO,IAAKyH,EAAOlE,EAD5BD,EAAKC,GAAKD,EAAKnB,KAAOF,GAAS,GACE,IAAKyF,EAASzF,MAAAA,KAE7DzC,IAAMiI,IACF,IAAMF,EAAOjE,EAAK+D,YAAchP,KAAKmP,OACrC,MAAMtF,EAASoB,EAAKnB,MAAQ,EAAY,IAARoF,KAEhC,OADM/D,EAAIF,EAAKE,GAAKF,EAAKnB,KAAOD,GAAUqF,IACnClE,EAAYrD,OAAO,IAAKyH,EAAOjE,EAAAA,GAAK,CAAEtB,OAAAA,OAGrD,CAAC3C,EAAQqB,kBAAmB,EAAG6F,YAAAA,KAAgBnD,KAAW2D,EAAQ,IAC3D3D,EACHmD,YAAaA,EAAc,CAAClD,EAAGC,IAAMiD,EAAYjD,EAAGD,QAAKjF,GAC1D,CACC4I,OAAoB,GAAZ5D,EAAKnB,KACbjD,UAAW7G,KAAK8L,GAAK,EACrBgD,SAAU,CAACM,EAAOC,KAEd,MAAMzF,EAAQqB,EAAKnB,MAAQ,EAAY,KAD1BmB,EAAK+D,YAAchP,KAAKmP,WAGrC,OAAOnE,EAAYrD,OAAO,IAAKyH,EAAOlE,EAD5BD,EAAKC,GAAKD,EAAKnB,KAAOF,GAAS,GACE,IAAKyF,EAASzF,MAAAA,KAE7DzC,IAAMiI,IACF,IAAMF,EAAOjE,EAAK+D,YAAchP,KAAKmP,OACrC,MAAMtF,EAASoB,EAAKnB,MAAQ,EAAY,IAARoF,KAEhC,SADUjE,EAAKE,GAAKF,EAAKnB,KAAOD,GAAUqF,MACvBvH,OAAO,IAAKyH,EAAOjE,EAAAA,GAAK,CAAEtB,OAAAA,OAGrD,CAAC3C,EAAQuB,OAAQ,EAAG2F,YAAAA,KAAgBnD,MAChC,MAAM0C,EAAKS,KAAc,MACnB9K,EAAI8K,IAAc,MAClBV,EAAKU,IAAc,MACnBvO,EAAIuO,IAAc,EAAG,GACrBX,EAAKW,IAAc,EAAG,GACtBkB,EAAIlB,IAAc,EAAG,GACrBZ,EAAKY,KAAc,EAAI,GACvBb,EAAIa,KAAc,EAAI,GAC5B,MAAMf,EAAyE,CAC3EM,GAAI,SACJD,GAAI,SACJF,GAAI,SACJC,GAAI,UAqBR,OAlBKF,GAAKI,IACNN,EAAQM,GAAK,QACZrK,GAAKoK,IACNL,EAAQK,GAAK,QACZ7N,GAAK4N,IACNJ,EAAQI,GAAK,QACZ6B,GAAK9B,IACNH,EAAQG,GAAK,UAENG,GAAOrK,IACd+J,EAAQM,GAAK,SACZrK,GAAMoK,GAAO7N,IACdwN,EAAQK,GAAK,SACZ7N,GAAM4N,GAAO6B,IACdjC,EAAQI,GAAK,SACZ6B,GAAM9B,GAAOD,IACdF,EAAQG,GAAK,SAEVxC,EAAYoC,KAAKnC,EAAMoC,KAIhCkC,SAAUA,EAAejF,EAAoBkF,GAC/C,IAAAC,EAAiBV,EAAGzE,IAAkByE,EAAI7H,EAAaS,QACvD,IAAK6H,GAASjW,OACV,OAAOkW,EAEX,MAIEC,SAAwBF,GAC1B,OAAQvE,IACJ,IAAK,IAAA0E,KAAYH,EAAW,CACxB,IAAAI,EAAQD,EAAGE,UAAc5E,GACzB,GAAI2E,EACA,OAAOA,CAHa,EAFW,CAJ3BF,CAAGF,GACnB,OAAQvE,GAAmB6E,EAAW7E,IAASwE,EAAYxE,EANM,CCxJ9D,IAAA8E,EAAuB,CAC1BC,UAAYC,GACU,oBAAYA,EAAIC,WAAW,SAAiBC,QAAQC,QAAQH,GACvE,IAAIE,QAAQ,CAACC,EAASC,KACzB,GAAkB,iBAAPJ,EAAiB,CACxB,MAAMK,EAAM,IAAIC,iBACZC,OAAS,KACT,MAAMC,EAAS,IAAIC,aACZC,UAAY,KACfP,EAAQK,EAAOG,WAEZC,cAAcP,EAAIQ,aAEzBC,QAAUT,EAAIU,QAAUV,EAAIW,UAAYZ,EAC5CC,EAAIY,KAAK,MAAOjB,GAAK,GACrBK,EAAIa,aAAe,OACnBb,EAAIc,MAZoB,KAarB,CACH,MAAMX,EAAS,IAAIC,WACnBD,EAAOE,UAAY,KACfP,EAAQK,EAAOG,SAEnBH,EAAOI,cAAcZ,EALlB,IASfoB,QAAS,CAACC,EAA6BpH,IAAqE,IAAIiG,QAAQ,CAACC,EAASC,KAC9H,MAAMkB,EAAQ,IAAIC,MAEE,WAAhBtH,IACAqH,EAAMrH,YAAcA,GAGxBqH,EAAMf,OAAS,KACXJ,EAAQ,CAAExG,MAAO2H,EAAM3H,MAAOC,OAAQ0H,EAAM1H,UAEhD0H,EAAMR,QAAUQ,EAAMP,QAAUX,EAEd,iBAAPiB,EAAiBC,EAAMD,IAAMA,EAEpCvB,EACKC,UAAUsB,GACVG,KAAMxB,GAASsB,EAAMD,IAAMrB,GAC3ByB,MAAMrB,MC3CPsB,SAAAA,GAAWC,GAEnBtE,IAAAA,EAA6B,GACjC,IAAIuE,EAAQ,EAIZ,GAAgB,OAFhBD,EAAOA,EAAKE,eAEH,GAAY,CAEjB,IAAAhI,GADAiI,EAAUH,EAAGI,MAAK,IACLzY,OACAuQ,MAGTwD,EAAQ,CAAC2E,SAASF,EAAK,GAAKA,EAAK,GAAI,IAAKE,SAASF,EAAK,GAAKA,EAAK,GAAI,IAAKE,SAASF,EAAK,GAAKA,EAAK,GAAI,KAC1F,IAATjI,IACA+H,EAAQI,SAASF,EAAK,GAAKA,EAAK,GAAI,IAAM,OAG9CzE,EAAQ,CAAC2E,SAASF,EAAK,GAAKA,EAAK,GAAI,IAAKE,SAASF,EAAK,GAAKA,EAAK,GAAI,IAAKE,SAASF,EAAK,GAAKA,EAAK,GAAI,KAC1F,IAATjI,IACA+H,EAAQI,SAASF,EAAK,GAAKA,EAAK,GAAI,IAAM,MAI7CzE,EAAM,KAAIA,EAAM,GAAK,GACrBA,EAAM,KAAIA,EAAM,GAAK,GACrBA,EAAM,KAAIA,EAAM,GAAK,EAnBT,KAoBd,MAAK3O,EAAI,6BAA6BuT,KAAKN,IAiB9C,MAAO,CACHO,MAAOP,EACPC,MAAAA,GAJJA,GAXAvE,GAFAA,EAAQ3O,EAAE,GAAGyT,OAAOC,MAAM,mBAEZ7Q,IAAI,CAAC0J,EAAGrR,IACM,MAApBqR,EAAEA,EAAE3R,OAAS,IACbe,EAAOgY,WAAGpH,OACA,IAANrR,EAAgBS,EACT,IAAJA,GAGD,SAAN4Q,EAAqB,EAClBoH,WAAWpH,KAGR3R,OAdJgZ,EAcoBjF,EAAMkF,MAAS,CASjD,OAAO,CACHL,MAFO,MAAS3Q,IAASlH,GAAG0F,KAAKkF,IAAK,EAAKlF,KAAE0K,IAAK,IAAOpQ,IAAIV,aAAa6Y,SAAE,EAAU,MAAMxF,KAAE,IAG9F4E,MAAO7R,KAAKkF,IAAI,EAAGlF,KAAK0K,IAAI,EAAGmH,IArDA,CCAjCa,SAAUA,GAAOC,EAAoD9Y,EAAWiC,EAAW8W,GAA0B,GACvH,IAAIC,EACJ,MAAO,KACH,GAAY5M,MAAR4M,EAAmB,CAEnB,IAAIC,EADJD,EAAO,EAEP,IAAK,IAAIE,GAAU,EAAIA,EAAU,EAAGA,IAChC,IAAK,IAAIC,GAAU,EAAIA,EAAU,EAAGA,IAChCF,IACAD,GAAQ/L,OAAO6L,GAAS9Y,EAAIkZ,EAAUJ,EAAOpZ,QAAWyZ,GAAWL,EAAOpZ,WAAYuC,EAAIkX,EAAUL,EAAOpZ,QAAWwZ,GAAWJ,EAAOpZ,UAAYqZ,IAAUE,CANnJ,CAYvB,OAHIxP,EAAIuP,GAAQ,WAChBvP,EAAItD,KAAKiT,KAAK3P,EAAIA,IAAM,GAAQ,EAAJA,MAC5BA,GAAKA,EAAItD,KAAKiT,KAAK3P,EAAIA,IAAM,EAAO,GAAJA,IACnBA,IAAM,MAAQ,GAAK,WAfuF,CCc/H,IAAA4P,GAAgB,CACZ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGvBC,GAAuB,IAAGC,IAAIC,OAAYC,OAAOxK,IAKjD,IAAAyK,GAAa,CACT,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGvBC,GAAoB,IAAGJ,IAAIC,OAAYC,OAAO5K,UAKjC+K,GAmBGjJ,QAlBJkJ,SACAC,YAEJ,WAAApI,GACA,OAAO9R,KAAKia,QADL,CAIHE,KAEAC,eACAC,SACAC,cAEAC,GACAtK,SACAuK,WAERza,WAAAA,CACYgR,GAAA/Q,KAAA+Q,QAAAA,EAiBR/Q,KAAKiQ,SAAWc,EAAQd,SACxBjQ,KAAKia,SAAWja,KAAKiQ,SAAS0B,gBAAgB,6BAA8B,OAC5E,IAAAtB,EAAUwB,EAAGd,EAAUV,WAClB4J,SAASrI,aAAa,QAASvB,GACpCrQ,KAAKia,SAASrI,aAAa,SAAUvB,GACrCrQ,KAAKia,SAASrI,aAAa,UAAW,OAAOvB,KAAQA,KACrDrQ,KAAKma,KAAOna,KAAKiQ,SAAS0B,gBAAgB,6BAA8B,QACnEsI,KAAAA,SAASQ,YAAYza,KAAKma,MAC/Bna,KAAKwa,WAAazJ,EAAQyJ,YAAclE,CAVF,CAatC,SAAAnG,GACA,YAAYY,QAAQV,IADf,CAIL,UAAAD,GACA,OAAOpQ,KAAK+Q,QAAQV,IADd,CAIJqK,YAAAA,CAAOH,GACT,MAAWA,EAAG3U,uBACE4S,WAAYnS,EAAO,IAAK,GAAKsU,QAAE,GAAU,IACzD,IAAA3H,EAAahT,KAAG+Q,QAAKH,YAAQP,KACzBuK,EAAgB,CAChBC,UAAW,EACXC,UAAW,EACX3K,MAAO,EACPC,OAAQ,GAKZ,GAFApQ,KAAKua,GAAKA,EAENva,KAAK+Q,QAAQ+G,MAAO,CAEpBzH,QAAarQ,gBAAW4X,QAAW5X,KAAQ+Q,QAAK+G,MAAa9X,KAAE+Q,qBAAaN,aAC5E,IAAMF,aAAAA,EAAcwK,uBAAAA,GAA0B/a,KAAG+Q,QAEjD,GAAIR,EAAazN,MAAQ6M,EAAUI,WAAY,IAE9B/P,KAAI+Q,aAAiB,GADtB/Q,KAAI+Q,2BAA8B/Q,KAAI+Q,QAAKM,6BACR2B,GAAUzC,EAAIC,UAC7D,IAAML,MAAAA,EAAOC,OAAAA,GAAWC,IAEdD,EAASD,EAAS6K,EAC5B7K,EAAQ6K,EAEJ5K,EAAS4K,IACT7K,EAASA,EAAQC,EAAU4K,EAC3B5K,EAAS4K,GAGbJ,EAAgB,CACZC,UAAW,EACXC,UAAW,EACX3K,MAAAA,EACAC,OAAAA,EAjBuC,KAmBxC,CACH,MAAgBG,gBACD1L,EAAGC,mBAAO5B,KC1HnC+X,UACFC,eAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,kBAAAA,EACArI,QAAAA,EACAtC,OAAAA,IAKA,GACIwK,GAAkB,GAClBC,GAAiB,GACjBC,GAAiB,GACjBpI,GAAW,GACX,EAAItC,GAAU,EAAI0K,EAElB,MAAO,CACHhL,OAAQ,EACRD,MAAO,EACP2K,UAAW,EACXD,UAAW,GAKfQ,GAAqBA,EAAoB,GAAK,IAAGA,EAAoB9U,KAAKkF,IAAI,EAAG4P,EAAoB,IAGzGC,IAAAA,EAAY/U,KAAGkF,MAAsByP,GACrCK,EAAYhV,KAAG0K,MAAsBiK,GAGjCM,EAAQ,EACRC,GAASJ,GAAqBD,GAAiB,EAAI1K,EACvD,EAAG,CACC,IAAAgL,EAAaF,GAAQC,EAASD,GAAQ,EAClCG,EAAUpV,KAAKkF,IAAI,EAAGlF,KAAKqV,KAAKF,EAAU,EAAIhL,IAC9CiL,EAAU,GAAK,GAAGA,IACtB,IAAIE,EAAUtV,KAAKkF,IAAI,EAAGlF,KAAKqV,KAAMF,EAAUH,EAAUD,EAAS,EAAI5K,IAClEmL,EAAU,GAAK,GAAGA,IAElBF,EAAUE,EAAUT,EAAeK,EAAQC,EAC1CF,EAAQE,CARd,OASMnV,KAAKuV,IAAIN,EAAQC,GAAS,MA4BnC,OAxBIM,EAAUxV,KAAKkF,IAAI,EAAGlF,KAAKqV,KAAKvL,EAAO,EAAIK,KACjC,GAAK,GAAGqL,KAClBC,EAAUzV,KAAKkF,IAAI,EAAGlF,KAAKqV,KAAMvL,EAAOkL,EAAUD,EAAS,EAAI5K,KACrD,GAAK,GAAGsL,IAGlBb,EAAgBD,EACPzJ,EAAIsK,GAGJtK,EAAIuK,EACJtK,EAAIqK,GAMPtK,EAFVwK,GAAcxK,EAAU,EAAIf,GAASsC,GAG3BtB,EAAKuK,EAAOf,EAAkBC,IAFxCe,GAAcxK,EAAU,EAAIhB,GAASsC,KAIvBtB,EAAIwK,EACJzK,EAAKyK,EAAOf,EAAiBD,GAGpC,CACH9K,OAAQ7J,KAAK2K,MAAgBQ,EAAI,EAAIhB,EAASsC,GAC9C7C,MAAO5J,KAAK2K,MAAgBO,EAAI,EAAIf,EAASsC,GAC7C8H,UAAoBpJ,EACpBmJ,UAAoBpJ,EAtET,CDwHawJ,CAAmB,CAC/BE,cAAe9K,EAAKF,MACpB+K,eAAgB7K,EAAKD,OACrBgL,cAPe7U,KAAG4V,MAAKC,GACb/V,EAASA,EAAQ,IAAY,GAAIA,EAAS,IAAMgW,EAAGvc,QAAgB,EAAK,KAOlFub,kBAAmBhV,EAAQ,GAC3B2M,QAAAA,EACAtC,OAAQH,EAAaG,QAbtB,CAxBa,CA0CxB1Q,KAAKsc,sBAGIvL,QAAQR,aAAazN,MAAQ6M,EAAUG,SAC5C9P,KAAK+Q,QAAQ+G,OACb8C,EAAczK,MAAQ,GACtByK,EAAcxK,OAAS,SAEjBpQ,KAAKuc,UAAU,CAAEpM,MAAOyK,EAAczK,MAAOC,OAAQwK,EAAcxK,OAAQ/J,MAAAA,EAAO2M,QAAAA,IAG5FhT,KAAKwc,SAAS,CAACpc,EAAWiC,MAClBrC,KAAK+Q,QAAQR,aAAazN,MAAQ6M,EAAUE,QAExCzP,IAAMiG,EAAQuU,EAAcC,WAAa,GACzCza,GAAKiG,EAAQuU,EAAcC,WAAa,GACxCxY,IAAMgE,EAAQuU,EAAcE,WAAa,GACzCzY,GAAKgE,EAAQuU,EAAcE,WAAa,GAM3C1a,EAAI,GAAKiC,EAAI,GAAOjC,GAAKiG,EAAQ,GAAKhE,EAAI,GAAOA,GAAKgE,EAAQ,GAAKjG,EAAI,IAM5EJ,KAAK+Q,QAAQR,aAAazN,MAAQ6M,EAAUG,SAC5C9P,KAAK+Q,QAAQ+G,OACb8C,EAAczK,MAAQ,GACtByK,EAAcxK,OAAS,SAEjBpQ,KAAKuc,UAAU,CAAEpM,MAAOyK,EAAczK,MAAOC,OAAQwK,EAAcxK,OAAQ/J,MAAAA,EAAO2M,QAAAA,SAGvFyJ,aA5FqB,CA+F9BH,cAAAA,GACI,IAAAvL,EAAa/Q,KAAG+Q,QAEhB,GAAI/Q,KAAKia,UAAYlJ,EAAQM,kBAAmB,CAI5CrR,KAAK0c,YAAY,CACb3L,QAJiBA,oBAAW9D,SAK5B0D,MAJOI,oBAAWJ,MAKlBgM,mBAAoB,EACpBlL,EAAG,EACHC,EAAG,EACHtB,OAAQW,EAAQV,KAChBF,MAAOY,EAAQV,KACfuM,KAAM,qBAGV,IAAA9K,EAAa9R,KAAGiQ,SAAK0B,gBAAS,6BAA4C,QAC1E3R,KAAKoa,eAAiBpa,KAAK6c,WAAW,yBACtC7c,KAAKma,KAAKM,YAAYza,KAAKoa,gBAE3BtI,EAAQF,aAAa,IAAKC,EAAU,IACpCC,EAAQF,aAAa,IAAKC,EAAU,IACpCC,EAAQF,aAAa,QAASC,EAAUd,EAAQV,OACxCuB,EAAAA,aAAa,SAAUC,EAAUd,EAAQV,OACjDyB,EAAQF,aAAa,KAAMC,EAAWd,EAAQV,KAAO,GAAMU,EAAQM,kBAAkBH,OAAS,UAEzFkJ,eAAeK,YAAY3I,EAzBY,CAHtC,CAgCd0K,QAAAA,CAASM,GACL,IAAK9c,KAAKua,GACN,MAAU/Y,MAAM,0BAGpB,IAAAuP,EAAa/Q,KAAG+Q,QAChB,IAAA1K,EAAWrG,KAAGua,GAAK3U,oBAEfS,EAAQ0K,EAAQV,KAChB,MAAU7O,MAAM,2BAGpB,IAAAwR,EAAahT,KAAG+Q,QAAKH,YAAQP,KAC7B,IAAIA,EAAOU,EAAQV,KACfU,EAAQR,aAAazN,MAAQ6M,EAAUI,aAAYM,GAAQ,EAAI2C,GAAWjC,EAAQR,aAAaG,QAAU,IAC7G,MAAenK,KAAG4V,OAAUpL,EAAEV,KAAYhK,KAAkB,GAC5D,IAAIgO,EAAOyB,EAAe/E,EAAQH,YAAYC,KAAME,EAAQgF,SAEvDsE,KAAAA,SAAWra,KAAK6c,WAAW,kBAChC7c,KAAKma,KAAKM,YAAYza,KAAKqa,UAEvBtJ,EAAQR,aAAazN,MAAQ6M,EAAUI,aACvC/P,KAAKsa,cAAgBta,KAAK6c,WAAW,wBACrC7c,KAAKma,KAAKM,YAAYza,KAAKsa,gBAG/B,IAAI5J,EAAS,EACb,IAAIqM,EAAiB,EACjBC,EAAY3W,EAEZ0K,EAAQb,QAAUV,EAAUE,QAC5BgB,EAAU1Q,KAAK+Q,QAAQM,mBAAqBrR,KAAK+Q,QAAQM,kBAAkBX,QAAW,EACtFqM,EAAiBxW,KAAK4V,OAAO9L,EAAO2C,EAAU3M,EAAQ,EAAIqK,GAAU,GACpEsM,EAAY3W,EAAyB,EAAjB0W,GACbhM,EAAQR,aAAazN,MAAQ6M,EAAUI,aAC9CgN,EAAiB,EACjBC,EAAY3W,EAAyB,EAAjB0W,KAGLE,EAAYF,MACf1W,IAAQ0W,OACnB7C,YAAkBrS,MAAMmV,OAC7BnN,EAAYtJ,KAAG4V,QAAoB,GAEnC,IAAK,IAAI/b,EAAI,EAAGA,EAAI4c,EAAW5c,IAAK,CAChCJ,KAAKka,YAAY9Z,GAASyH,MAAMmV,GAChC,IAAK,IAAI3a,EAAI,EAAGA,EAAI2a,EAAW3a,IAC3B,GACIjC,EAAI2c,EAAiB,GACrB3c,EAAI4c,EAAYD,GAChB1a,EAAI0a,EAAiB,GACrB1a,EAAI2a,EAAYD,EAClB,CACE,IAAAG,EAAQ9c,IACR+c,EAAQ9a,QACOya,EAAOI,EAAIC,GAAKnd,KAAKka,YAAY9Z,GAAGiC,QAAKmK,EACnDxM,KAAKka,YAAY9Z,GAAGiC,KAAOrC,KAAKua,GAAGpU,OAAOgX,EAAID,EAJrD,MAYEld,KAAKka,YAAY9Z,GAAGiC,GAHpB0O,EAAQb,QAAUV,EAAUE,QAC5BnJ,KAAK6W,MAAMhd,EAAIyP,IAAWzP,EAAIyP,IAAWxN,EAAIwN,IAAWxN,EAAIwN,IAAWA,OAE9CrD,EAKzBpM,GAAK2c,EAAiB,GACtB3c,GAAK4c,EAAYD,GACjB1a,GAAK0a,EAAiB,GACtB1a,GAAK2a,EAAYD,GAGZ1a,GAAK0a,EAAiB,IAAM3c,EAAI2c,EAAiB,GAAK3c,EAAI4c,EAAYD,EAAiB,IACvF1a,GAAK2a,EAAYD,GAAkB3c,EAAI2c,EAAiB,GACxD3c,GAAK2c,EAAiB,IAAM1a,EAAI0a,EAAiB,GAAK1a,EAAI2a,EAAYD,EAAiB,IACvF3c,GAAK4c,EAAYD,GAAkB1a,EAAI0a,EAAiB,WAQxC/c,KAAKua,GAAGpU,OAC7B9D,EAAI,EAAI0a,EAAiB,EAAI1a,EAAIA,GAAKgE,EAAQhE,EAAI,EAAI0a,EAAiB1a,EAAI0a,EAC3E3c,EAAI,EAAI2c,EAAiB,EAAI3c,EAAIA,GAAKiG,EAAQjG,EAAI,EAAI2c,EAAiB3c,EAAI2c,EA5CnD,CAkDpCV,EAAexX,EAAGC,oBADNuB,EAAS,WAGhB,IAAIjG,EAAI,EAAGA,EAAI4c,EAAW5c,IAAK,CAChCid,EAAYhB,EAAGiB,KAAczc,GAAGT,EAAM2c,EAAiBlc,EAAI,GAAIT,EAAK2c,EAAiBlc,EAAI,GACzF,IAAK,IAAIwB,EAAI,EAAGA,EAAI2a,EAAW3a,IAC3Bkb,EAAYlB,EAAGiB,KAAczc,GAAGwB,EAAM0a,EAAiBlc,EAAI,GAAIwB,EAAK0a,EAAiBlc,EAAI,GAC3D2L,MAA1BxM,KAAKka,YAAY9Z,GAAGiC,KAEpBrC,KAAKsa,gBACLjG,EACIgJ,GACIE,IACEF,GAAUhB,EAAU,IAAMkB,GAAUlB,EAAU,IAC3CkB,GAAUlB,EAAU,IAAMkB,GAAUlB,EAAUA,EAAUvc,OAAS,IACjEud,GAAUhB,EAAU,IAAMgB,GAAUhB,EAAUA,EAAUvc,OAAS,IACpEgW,EAAerI,EAAQS,QACvB4H,EAAerI,EAAQW,aAGhCpO,KAAKka,YAAY9Z,GAAGiC,GAgBrBrC,KAAKqa,UACLra,KAAKqa,SAASI,YAAYpG,EAAK,CAC3B5C,EAAG+L,EAAgBpd,EAAI4S,EACvBtB,EAAG8L,EAAgBnb,EAAI2Q,EACvB3C,KAAM2C,EACN/C,SAAUjQ,KAAK+Q,QAAQd,SACvB0E,YAAa,CAAC2E,EAAiBC,KAA+E,IAAlDvZ,KAAKka,YAAa9Z,EAAIkZ,KAAWjX,EAAIkX,GACjGhE,WAAY0D,GAAOjZ,KAAKka,YAAa9Z,EAAGiC,MAtBxCrC,KAAKsa,eACDta,KAAKsa,eACLta,KAAKsa,cAAcG,YAAYpG,EAAK,CAChC5C,EAAG+L,EAAgBpd,EAAI4S,EACvBtB,EAAG8L,EAAgBnb,EAAI2Q,EACvB3C,KAAM2C,EACN/C,SAAUjQ,KAAK+Q,QAAQd,SACvB0E,YAAa,CAAC2E,EAAiBC,KAA+E,IAAlDvZ,KAAKka,YAAa9Z,EAAIkZ,KAAWjX,EAAIkX,GACjGhE,WAAY0D,GAAOjZ,KAAKka,YAAa9Z,EAAGiC,GAAG,MA1B/B,CA8ChCrC,KAAKsa,eACLta,KAAK0c,YAAY,CACb3L,QAASA,EAAQR,aAAazI,KAAKmF,SACnC0D,MAAOI,EAAQR,aAAazI,KAAK6I,MACjCgM,mBAAoB,EACpBlL,EAAG+L,EACH9L,EAAG8L,EACHpN,OAAQqN,EAAazK,EACrB7C,MAAOsN,EAAazK,EACpB4J,KAAM,oBAId5c,KAAK0c,YAAY,CACb3L,QAASA,EAAQH,aAAa3D,SAC9B0D,MAAOI,EAAQH,YAAYD,MAC3BgM,mBAAoB,EACpBlL,EAAG+L,EACH9L,EAAG8L,EACHpN,OAAQqN,EAAazK,EACrB7C,MAAOsN,EAAazK,EACpB4J,KAAM,aAnKqC,CAuKnDH,WAAAA,GACI,IAAKzc,KAAKua,GACN,MAAU/Y,MAAM,0BAIpB,IAAAuP,EAAa/Q,KAAG+Q,YADH/Q,KAAGia,SAIZ,MAAUzY,MAAM,+BAGpB,IAAA6E,EAAWrG,KAAGua,GAAK3U,iBACnBoN,EAAahT,KAAG+Q,QAAKH,YAAQP,KAC7BqN,IAAuB1K,EACvB2K,IAAoB3K,IACLzM,KAAG4V,OAAUpL,EAAEV,KAAYhK,KAAkB,IAGxD,CAAC,EAAG,EAAG,GACP,CAAC,EAAG,EAAGE,KAAK8L,GAAK,GACjB,CAAC,EAAG,GAAI9L,KAAK8L,GAAK,IACpB9O,QAAQ,EAAEqa,EAAQ9X,EAAKsH,MACrB,IAAAqE,EAAOwL,EAAYW,EAAS5K,GAAU3M,EAAS,GAC/C,IAAAqL,EAAOuL,EAAYnX,EAAMkN,GAAU3M,EAAS,GACxCwX,EAAoB7d,KAAKqa,SACzByD,EAAiB9d,KAAKqa,UAEtBtJ,EAAQI,sBAAsBlE,UAAY8D,EAAQI,sBAAsBR,SACxEkN,EAAoB7d,KAAK6c,WAAW,6BAA6Be,KAAU9X,KAC3E9F,KAAKma,KAAKM,YAAYoD,GAEtBC,EADAA,EAAiBD,EAGjB7d,KAAK0c,YAAY,CACb3L,QAASA,EAAQI,sBAAsBlE,SACvC0D,MAAOI,EAAQI,sBAAsBR,MACrCgM,mBAAoBvP,EACpBqE,EAAAA,EACAC,EAAAA,EACAtB,OAAQsN,EACRvN,MAAOuN,EACPd,KAAM,wBAAwBgB,KAAU9X,OAIhD,IAAAiY,EAAgB,CACZtM,EAAAA,EACAC,EAAAA,EACArB,KAAMqN,EACNzN,SAAUjQ,KAAK+Q,QAAQd,SACvB7C,SAAAA,GAEJ,MAAuB2D,WAAkBjR,ONjarCke,SAAuBjI,GACnC,OAAQvE,IACJ,IAAK,IAAA0E,KAAYH,EAAW,CACxB,IAAAI,EAAQD,EAAG+H,mBAAuBzM,GAClC,GAAI2E,EACA,OAAOA,CAHa,EAFoB,CMiaK6H,GAA0BjI,QAA1BiI,CAAyCD,UAE1F,GAAIG,EAAmB,CACnB,MAAoBC,KAEhBN,GACAA,EAAkBpD,YAAY2D,GAG9Bpe,KAAKsa,eACLta,KAAKsa,cAAcG,YAAY0D,EARhB,SAvanCE,SAA4B7a,GACxB,SAAUA,IAAOkW,GAAkB4E,IAAI9a,GADH,CAibjB6a,CAAmBtN,EAAQI,sBAAsBN,MAAO,CAG/D,IAAAuN,EAAoBD,INnbzB1J,EMibkB1D,uBAAgCF,ONjbnB4D,EAAsBpF,EAAiBnB,SMmb7B6P,MAGhCF,EAAkBpD,YAAY2D,QAGzB9D,eACLta,KAAKsa,cAAcG,YAAY0D,EAV4B,KAY5D,CACH9J,EAAUyB,EAAG/E,EAAeI,sBAA4BN,QAAUD,iBAAwBG,EAAEgF,SAE5F,IAAK,IAAI3V,EAAI,EAAGA,EAAIqZ,GAAW3Z,OAAQM,IACnC,IAAK,IAAIiC,EAAI,EAAGA,EAAIoX,GAAWrZ,GAAGN,OAAQuC,IACjCoX,GAAWrZ,KAAKiC,GAiBjBwb,GACAA,EAAkBpD,YAAYpG,EAAK,CAC/B5C,EAAGA,EAAIrR,EAAI4S,EACXtB,EAAGA,EAAIrP,EAAI2Q,EACX3C,KAAM2C,EACN/C,SAAUjQ,KAAK+Q,QAAQd,SACvB0E,YAAa,CAAC2E,EAAiBC,MAA+BE,GAAWrZ,EAAIkZ,KAAWjX,EAAIkX,GAC5FhE,WAAY0D,GAAOjZ,KAAKka,YAAczI,EAAIuB,EAAU5S,EAAGsR,EAAIsB,EAAU3Q,GAAG,MAvBxErC,KAAKsa,gBAAkBR,GAAQ1Z,KAAKiC,IAChCrC,KAAKsa,eACLta,KAAKsa,cAAcG,YAAYpG,EAAK,CAChC5C,EAAGA,EAAIrR,EAAI4S,EACXtB,EAAGA,EAAIrP,EAAI2Q,EACX3C,KAAM2C,EACN/C,SAAUjQ,KAAK+Q,QAAQd,SACvB0E,YAAa,CAAC2E,EAAiBC,KAC1BE,GAAWrZ,EAAIkZ,KAAWjX,EAAIkX,KAAaO,GAAQ1Z,EAAIkZ,KAAWjX,EAAIkX,GAC3EhE,WAAY0D,GAAOjZ,KAAKka,YAAczI,EAAIuB,EAAU5S,EAAGsR,EAAIsB,EAAU3Q,GAAG,MAoBhG,GAAIrC,KAAKsa,cACL,IAAK,IAAIla,GAAI,EAAIA,EAAI,EAAGA,IACpB,IAAK,IAAIiC,GAAI,EAAIA,EAAI,EAAGA,MACX,GAALjC,GAAgB,GAALA,IAAe,GAALiC,GAAgB,GAALA,IAC5BrC,KAAKsa,eACLta,KAAKsa,cAAcG,YAAYpG,EAAK,CAChC5C,EAAGA,EAAIrR,EAAI4S,EACXtB,EAAGA,EAAIrP,EAAI2Q,EACX3C,KAAM2C,EACN/C,SAAUjQ,KAAK+Q,QAAQd,SACvB0E,YAAa,CAAC2E,EAAiBC,OAEnBlX,KADR6a,EAAQ9c,OAEK,GAAM8c,GAAM,GAAKC,IAAM,GAAMA,GAAM,KAAY,GAAND,GAAkB,GAANA,IAAiB,GAANC,GAAkB,GAANA,IAE7F5H,WAAY0D,GAAOjZ,KAAKka,YAAczI,EAAIuB,EAAU5S,EAAGsR,EAAIsB,EAAU3Q,GAAG,KAlD7F,KA0DH0O,EAAQK,mBAAmBnE,UAAY8D,EAAQK,mBAAmBT,SAClEmN,EAAiB9d,KAAK6c,WAAW,0BAA0Be,KAAU9X,KACrE9F,KAAKma,KAAKM,YAAYqD,GAEtB9d,KAAK0c,YAAY,CACb3L,QAASA,EAAQK,mBAAmBnE,SACpC0D,MAAOI,EAAQK,mBAAmBT,MAClCgM,mBAAoBvP,EACpBqE,EAAGA,EAAc,EAAVuB,EACPtB,EAAGA,EAAc,EAAVsB,EACP5C,OAAQuN,EACRxN,MAAOwN,EACPf,KAAM,qBAAqBgB,KAAU9X,OAI7CyY,EAAa,CACT9M,EAAGA,EAAc,EAAVuB,EACPtB,EAAGA,EAAc,EAAVsB,EACP3C,KAAMsN,EACN1N,SAAUjQ,KAAKiQ,SACf7C,SAAAA,KAEgB2D,WAAkBjR,ORjf5C0e,SAA8BzI,GAChC,OAAQvE,IACJ,IAAK,IAAA0E,KAAYH,EAAW,CACxB,IAAAI,EAAQD,EAAGuI,gBAAoBjN,GAC/B,GAAI2E,EACA,OAAOA,CAHa,EAFiB,CQifKqI,GAAuBzI,QAAvByI,CAAsCD,UAG5ET,GACAA,EAAerD,YAAYiE,QAE5B,GArgBnBC,SAAyBnb,GACrB,SAAUA,IAAOuW,GAAeuE,IAAI9a,GADH,CAqgBdmb,CAAgB5N,EAAQK,mBAAmBP,MAClDwD,ER3fLF,EQ2fkBpD,oBAA6BF,OR3fnBsD,EAAmBlF,EAAcf,QQ6fpD4P,GACAA,EAAerD,YAAYpG,EAAKkK,QAEjC,CACHlK,EAAUyB,EAAG/E,EAAeK,mBAAyBP,QAAUD,iBAAwBG,EAAEgF,SAEzF,IAAK,IAAI3V,EAAI,EAAGA,EAAI0Z,GAAQha,OAAQM,IAChC,IAAK,IAAIiC,EAAI,EAAGA,EAAIyX,GAAQ1Z,GAAGN,OAAQuC,IAC9ByX,GAAQ1Z,KAAKiC,IAIdyb,GACAA,EAAerD,YAAYpG,EAAK,CAC5B5C,EAAGA,EAAIrR,EAAI4S,EACXtB,EAAGA,EAAIrP,EAAI2Q,EACX3C,KAAM2C,EACN/C,SAAUjQ,KAAK+Q,QAAQd,SACvB0E,YAAa,CAAC2E,EAAiBC,MAA+BO,GAAQ1Z,EAAIkZ,KAAWjX,EAAIkX,GACzFhE,WAAY0D,GAAOjZ,KAAKka,YAAczI,EAAIuB,EAAU5S,EAAGsR,EAAIsB,EAAU3Q,GAAG,KAhBrF,GA1KJ,CAmMLka,eAAAA,EACFpM,MAAAA,EACAC,OAAAA,EACA/J,MAAAA,EACA2M,QAAAA,IAOA,IAAAjC,EAAa/Q,KAAG+Q,UACDxK,KAAG4V,OAAUpL,EAAEV,KAAYhK,KAAkB,GACxDqK,EAASK,EAAQR,aAAaG,OAASsC,EACvCjC,EAAQR,aAAazN,MAAQ6M,EAAUI,aAAYW,EAAS,GAChE,IAAAkO,EAAQ3B,KAAqB5W,EAAS2M,EAAU7C,KAShD,GARA0O,EAAQ5B,KAAqB5W,EAAS2M,EAAU5C,KACxCD,KAAQO,EACRN,KAASM,EAEjBoO,QAAiB9e,gBAAWuW,UAAWxF,EAAU+G,OAAa,KAC1DA,EAAoB9X,KAAKiQ,SAAS0B,gBAAgB,6BAA8B,UAC9EoN,eAAe,+BAAgC,aAAcD,GAAY,IAE3EA,EAASrI,WAAW,uBAAwB,CAM5C,MALI1T,EAAO+b,EAAS7a,UAAU,KACpB+a,QAAK,KACfC,EAAclc,EAAGkB,YAAgB7D,GACjC2C,EAAOA,EAAKkB,UAAU7D,EAAI,GAGjB,WADD6e,EAEAlc,EAAsB,mBAARmc,KAAqBA,KAAKnc,GAAQoc,OAAOC,KAAKrc,EAAM,UAAU5C,SAAS,aAGrF4C,EAAO,GAIXA,IACAsc,GAA+BC,IAAbC,WAAaD,gBAAGvc,EAAoB,aACtDyc,EAAY3X,MAAGuX,KAAMC,EAAKI,qBAAU,SACzB3f,SACPgY,EAAQ0H,EAAO,IACT5N,aAAa,WAAY,WApBK,CAyBhDkG,EAAMlG,aAAa,IAAKC,EAAU+M,MAC5BhN,aAAa,IAAKC,EAAUgN,MAC5BjN,aAAa,QAAS,GAAGC,EAAU6N,QACzC5H,EAAMlG,aAAa,SAAU,GAAGC,EAAU8N,QAE1C3f,KAAKia,SAASQ,YAAY3C,EA5C7B,CA+CO4E,WAAAA,EACJ3L,QAAAA,EACAJ,MAAAA,EACAgM,mBAAAA,EACAlL,EAAAA,EACAC,EAAAA,EACAtB,OAAAA,EACAD,MAAAA,EACAyM,KAAAA,IAWA,IAAAgD,EAAkBzP,IAAiBA,EAAQC,EAE3CqB,GAAKzR,KAAK+Q,QAAQH,YAAYP,QACzBrQ,KAAK+Q,QAAQH,YAAYP,KAC9BF,GAAS,EAAInQ,KAAK+Q,QAAQH,YAAYP,KACtCD,GAAU,EAAIpQ,KAAK+Q,QAAQH,YAAYP,KAEvC,IAAAwP,EAAU7f,KAAGiQ,SAAK0B,gBAAS,6BAA4C,aAClEC,aAAa,IAAKC,EAAUJ,IACjCoO,EAAKjO,aAAa,IAAKC,EAAUH,IAC5BE,EAAAA,aAAa,SAAUC,EAAUzB,IACtCyP,EAAKjO,aAAa,QAASC,EAAU1B,MAChCyB,aAAa,YAAa,aAAagL,MAExC7L,EAAS,CACT,IAAI9D,EACJ,GAAI8D,EAAQF,OAAS/D,EAAaS,OAC9BN,EAAWjN,KAAKiQ,SAAS0B,gBAAgB,6BAA8B,kBACvE1E,EAAS2E,aAAa,KAAMgL,GAC5B3P,EAAS2E,aAAa,gBAAiB,kBACvC3E,EAAS2E,aAAa,KAAMC,EAAUJ,EAAItB,EAAQ,IAClDlD,EAAS2E,aAAa,KAAMC,EAAUH,EAAItB,EAAS,IACnDnD,EAAS2E,aAAa,KAAMC,EAAUJ,EAAItB,EAAQ,IAClDlD,EAAS2E,aAAa,KAAMC,EAAUH,EAAItB,EAAS,IACnDnD,EAAS2E,aAAa,IAAKC,EAAU+N,EAAe,QACjD,CAGCE,EAAKrO,EAAItB,EAAQ,EACrB,IAAI4P,EAAKrO,EAAItB,EAAS,EACbqB,GAAItB,EAAQ,EACZuB,GAAItB,EAAS,WALLW,EAAE3D,UAAgB,GAAKuP,IAAsB,OAAStK,OACjC9L,KAAG8L,KAAO,OAASA,MAOhC,GAAK2N,GAAoB,IAAOzZ,KAAK8L,IACzD2N,EAAmB,KAAOzZ,KAAK8L,IAAM2N,GAAoB,EAAIzZ,KAAK8L,IAE9DyN,GAAK3P,EAAQ,EACb4P,GAAM3P,EAAS,EAAK7J,KAAK0Z,IAAI7S,GAC7B8S,GAAK/P,EAAQ,EACbgQ,GAAM/P,EAAS,EAAK7J,KAAK0Z,IAAI7S,IAC3B4S,EAAmB,IAAOzZ,KAAK8L,IAAM2N,GAAoB,IAAOzZ,KAAK8L,IACvE0N,GAAK3P,EAAS,EACd0P,GAAK3P,EAAQ,EAAI5J,KAAK0Z,IAAI7S,GAC1B+S,GAAK/P,EAAS,EACd8P,GAAK/P,EAAQ,EAAI5J,KAAK0Z,IAAI7S,IACxB4S,EAAmB,IAAOzZ,KAAK8L,IAAM2N,GAAoB,KAAOzZ,KAAK8L,IACvEyN,GAAK3P,EAAQ,EACb4P,GAAM3P,EAAS,EAAK7J,KAAK0Z,IAAI7S,GAC7B8S,GAAK/P,EAAQ,EACbgQ,GAAM/P,EAAS,EAAK7J,KAAK0Z,IAAI7S,IAC3B4S,EAAmB,KAAOzZ,KAAK8L,IAAM2N,GAAoB,KAAOzZ,KAAK8L,KACvE0N,GAAK3P,EAAS,EACd0P,GAAK3P,EAAQ,EAAI5J,KAAK0Z,IAAI7S,GAC1B+S,GAAK/P,EAAS,EACd8P,GAAK/P,EAAQ,EAAI5J,KAAK0Z,IAAI7S,IAGnCH,EAAWjN,KAAKiQ,SAAS0B,gBAAgB,6BAA8B,kBACvE1E,EAAS2E,aAAa,KAAMgL,GAC5B3P,EAAS2E,aAAa,gBAAiB,kBACvC3E,EAAS2E,aAAa,KAAMC,EAAUiO,IACtC7S,EAAS2E,aAAa,KAAMC,EAAUkO,IACtC9S,EAAS2E,aAAa,KAAMC,EAAUqO,IACtCjT,EAAS2E,aAAa,KAAMC,EAAUsO,GAvCnC,CA0CPpP,EAAQ7D,WAAW3J,QAAS6c,IACxB,IAAAC,EAAUrgB,KAAGiQ,SAAK0B,gBAAS,6BAA4C,QACvE0O,EAAKzO,aAAa,YAAaC,EAAU,IAAMuO,EAAQte,YAEvDwe,EAAYpI,GAAGkI,EAAWzP,OAC1B0P,EAAKzO,aAAa,aAAc0O,EAAO5H,OACnC4H,EAAOlI,MAAQ,GAAGiI,EAAKzO,aAAa,eAAgB0O,EAAOlI,MAAMuC,QAAQ,IAC7E1N,EAASwN,YAAY4F,OAGpBzO,aAAa,OAAQ,QAAQgL,MAClC5c,KAAKma,KAAKM,YAAYxN,EAhEb,YAkEGiL,GAAGvH,GACfkP,EAAKjO,aAAa,OAAQ0O,EAAO5H,OAC7B4H,EAAOlI,MAAQ,GAAGyH,EAAKjO,aAAa,UAAW0O,EAAOlI,MAAMuC,QAAQ,KAG5E3a,KAAKia,SAASQ,YAAYoF,EAtF7B,CAyFOhD,UAAAA,CAAW0D,GACf,IAAAC,EAAUxgB,KAAGiQ,SAAK0B,gBAAS,6BAA4C,YAIvE,OAHA6O,EAAK5O,aAAa,KAAM2O,GACxBC,EAAK5O,aAAa,gBAAiB,kBAE5B4O,CALkB,EExuBjC5G,OAAO6G,OAAOjY,EAAcY,mBCJGsX,CAC3BpX,KAAO5F,IAGC,MAAMid,EAAO,OACR,IAAIvgB,EAAI,EAAGA,EAsBDsD,EAtBS5D,OAAQM,IAAK,CACjC,IAAIwgB,EAqBOld,EArBQI,WAAW1D,GAC1BwgB,EAAW,IACXD,EAAKhgB,KAAKigB,GACLA,EAAW,KAChBD,EAAKhgB,KAAK,IAAQigB,GAAY,EAAI,IAAmB,GAAXA,GAErCA,EAAW,OAAUA,GAAY,MACtCD,EAAKhgB,KAAK,IAAQigB,GAAY,GAAK,IAASA,GAAY,EAAK,GAAO,IAAmB,GAAXA,IAI5ExgB,IAIAwgB,EAAW,QAAwB,KAAXA,IAAqB,GAA2B,KAMjEld,EANiDI,WAAW1D,IACnEugB,EAAKhgB,KAAK,IAAQigB,GAAY,GAAK,IAASA,GAAY,GAAM,GAAO,IAASA,GAAY,EAAK,GAAO,IAAmB,GAAXA,GAjBjF,CAsBzC,OAFWD,KDjBNE,MAAAA,GACD9P,QACAsO,UACA9E,GACAuG,UACAC,kBACAC,MAEJ,QAAA3Q,GACA,GAAIrQ,KAAKghB,MACL,MAAO,CACH7Q,MAAOnQ,KAAKghB,MAAM7Q,MAClBC,OAAQpQ,KAAKghB,MAAM5Q,OAJvB,CASRrQ,WAAAA,CAAYgR,GACR/Q,KAAK+Q,QAAUA,EAAUD,EAAgBzE,EAAU2D,EAAgBe,IAAuBf,EAC1FhQ,KAAKihB,QAFsC,CAK/CA,MAAAA,CAEIlQ,GAEI/Q,KAAKqf,YAAWrf,KAAKqf,UAAU6B,UAAY,IAE/ClhB,KAAK+Q,QAAUA,EAAUD,EAAgBzE,EAAUrM,KAAK+Q,QAASA,IAAuB/Q,KAAK+Q,QAExF/Q,KAAK+Q,QAAQhO,OAId/C,KAAK+Q,QAAQ3H,qBACbwQ,OAAO6G,OAAOjY,EAAcY,mBAAoBpJ,KAAK+Q,QAAQ3H,2BACtDpJ,KAAK+Q,QAAQ3H,oBAGxBpJ,KAAKua,GAAK,IAAI/R,EAAcxI,KAAK+Q,QAAQT,UAAUpN,WAAYlD,KAAK+Q,QAAQT,UAAU3H,wBAC5E3I,aAAQsQ,UAAQxN,MZ3C5BE,SAAkBD,GACpB,QAAQ,GACJ,IAAK,WAAWmH,KAAKnH,GACjB,SAAYqF,YACX,wBAAwB8B,KAAKnH,GAC9B,SAAYsF,iBAEX,mBAAmB6B,KAAKnH,GACzB,SAAYwF,gBAEZ,OAAO/F,EAAK2G,KAVY,CY2CYnG,MAAY+N,QAAKhO,MACzD/C,KAAKua,GAAGtR,QAAQjJ,KAAK+Q,QAAQhO,KAAMD,GACnC9C,KAAKua,GAAG9Q,OAERzJ,KAAKmhB,WAELnhB,KAAKohB,OAAOphB,KAAKqf,WAtBkB,CAyBvC+B,MAAAA,CAEI/B,GAEKA,IAIDrf,KAAKghB,OAAOlP,SACZuN,EAAU5E,YAAYza,KAAKghB,MAAMlP,SAGrC9R,KAAKqf,UAAYA,EAVM,CAuC3BgC,cAAAA,CAEIP,GAEA,IAAKA,EACD,MAAUtf,MAAM,yCAGpBxB,KAAK8gB,UAAYA,EACjB9gB,KAAKihB,QAPuB,CAahCK,eAAAA,GACIthB,KAAK8gB,eAAYtU,EACjBxM,KAAKihB,QAFM,CAKTM,eAAAA,GACF,IAAKvhB,KAAKua,GAAI,MAAU/Y,MAAM,oBAO9B,GALKxB,KAAKghB,OAAOlP,SAAY9R,KAAK+gB,mBAC9B/gB,KAAKmhB,iBAEHnhB,KAAK+gB,kBAEN/gB,KAAKghB,OAAOlP,QAQjB,MADS,6CAFe0P,IADLC,eACKD,kBAAkBxhB,KAAKghB,MAAMlP,QAb1C,CAmBPqP,QAAAA,GACJ,GAAKnhB,KAAKua,GAAV,CAGA,IAAIxU,EAAc/F,KAAKua,GAAG3U,iBACtB5F,KAAK+Q,QAAQR,aAAazN,MAAQ6M,EAAUI,YAAc/P,KAAK+Q,QAAQb,OAASV,EAAUE,SAC1F3J,GAAe,IACfM,EAAQE,KAAKqV,MAAM5b,KAAK+Q,QAAQb,OAASV,EAAUE,OAASnJ,KAAK6W,KAAK,GAAK,GAAKrX,IACxE,GAAK,KAAGM,EACpB,IAAIqK,EAAU1Q,KAAK+Q,QAAQM,mBAAqBrR,KAAK+Q,QAAQM,kBAAkBX,QAAW,EACtF1Q,KAAK+Q,QAAQR,aAAazN,MAAQ6M,EAAUI,aAAYW,GAAU1Q,KAAK+Q,QAAQR,aAAaG,QAAU,GAC1G,IAAAL,EAAU9J,KAAGqV,KAAK5b,aAAU4Q,YAAQP,MAAgBhK,IAAaqK,IACjE1Q,KAAKghB,MAAQ,IAAIhH,GAAM,IAChBha,KAAK+Q,QACRZ,MAAOE,EACPD,OAAQC,EACRA,KAAAA,EACA0K,uBAAwBzJ,EAAwBtR,KAAK+Q,QAAQT,UAAU3H,wBAG3E3I,KAAK+gB,kBAAoB/gB,KAAKghB,MAAMtG,OAAO1a,KAAKua,IAAIvC,KAAK,KAChDhY,KAAKghB,OAAOlP,UACjB9R,KAAK+Q,QAAQgF,SAASxS,QAAQ2S,GAAUA,EAAOwL,cAAc1hB,KAAKghB,MAAOlP,QAAU,IAC5E9R,KAAK+Q,QACRZ,MAAOE,EACPD,OAAQC,EACRA,KAAAA,KAEJrQ,KAAK8gB,YAAY9gB,KAAKghB,MAAMlP,QAAS,IAC9B9R,KAAK+Q,QACRZ,MAAOE,EACPD,OAAQC,EACRA,KAAAA,MA/BR,CADY,EEvIb,IAAAsR,GAA0B,CAC7BxR,MAAO,IACPC,OAAQ,IACRM,OAAQ,GCuBZ,IAAYkR,GAAAC,GAAAD,KAAU,CAAA,EAClBA,GAAAE,QAAA,UACAF,GAAAG,OAAA,SAKGC,IAAAA,GAAa,CAChB,CAACJ,GAAWE,SAAU,CAACzR,EAAMoB,IACrBA,GAAKpB,GAAQoB,IAAMpB,EAAa,EAC1B,IAANoB,EAAgB,GACRA,GAAIlL,KAAK8L,GACdhC,EAAO9J,KAAKkM,IAAIwP,GAAO1b,KAAKkM,IAAIwP,EAAM5R,IAAS4R,EAAMA,IAEhE,CAACL,GAAWG,QAAS,CAAC1R,EAAMoB,KACxBA,EAAIlL,KAAKuV,IAAIrK,KACJ,GAAW,EAAIA,GAAKpB,EACtB,GAef6R,SAASA,GAAW1e,GAChB,MAAkB,iBAAPA,GACPA,EAAI2e,QAAQC,wBAAwB5e,EAAI2e,QAAQE,mBACzC7e,EAAI2e,QAAQzJ,OAEhBlV,CALwC,KC1DvC8e,GAAAC,GAAAD,KAAa,CAAA,WAOTE,GACZ7c,EACAoL,GAEA,IAAMZ,MAAAA,EAAOC,OAAAA,EAAQM,OAAAA,GAAUK,EFL7B0R,SAAgC1R,GAWlC,SAVgB,IAAKA,IAEVZ,MAAQ9C,OAAO2D,EAAWb,OACrCa,EAAWZ,OAAS/C,OAAO2D,EAAWZ,QACtCY,EAAWN,OAASrD,OAAO2D,EAAWN,QAElCM,EAAWN,OAASnK,KAAK0K,IAAID,EAAWb,MAAOa,EAAWZ,UAC1DY,EAAWN,OAASnK,KAAK0K,IAAID,EAAWb,MAAOa,EAAWZ,SAGvDY,CAXiD,CEMlDyR,CAAsBpW,EAAUsV,GAAsB5Q,IACtD4Q,GAENe,EAAYzS,SAAG0S,cAAS,YACjBxS,MAAQA,EACfuS,EAAOtS,OAASA,EAEhB,IAAAC,EAAU9J,KAAG0K,IAAKd,EAASC,GAAS,WAEpCwS,EAA0Bjd,EAAG4b,YAAgBvJ,KAAO6K,IAChD,GAAKA,EAAL,CACA,IAAMC,EAAUD,EAAI1J,MAAM,sBAAuB,GAE3C4J,EAAU,6BADFC,KAAKH,GAEb/K,EAAQ,IAAIC,MAElB,OAAO,IAAIrB,QAAc,CAACC,EAASC,KAC/BkB,EAAMf,OAAS,KAEX,MAAMkM,EAAW1c,KAAKqV,KAAM,EAAIvL,EAAQ9J,KAAK0K,IAAI6G,EAAM3H,MAAO2H,EAAM1H,UAC7DqB,EAAGC,EAAG/P,EAAGuhB,GAAKJ,EAAQlK,MAAM,QAAQ7Q,IAAI8Q,YAAY9Q,IAAIlH,GAAKA,EAAIoiB,GACxE,IAAMrE,GAAOnN,EAAI,EAAK,GAAK,QACrBoN,GAAOnN,EAAI,EAAK,GAAK,EAC3B,IAAIyR,EACJ,IACIA,EAAW,IAAIC,gBAAgB7c,KAAKqV,KAAKja,EAAIid,EAAK,GAAIrY,KAAKqV,KAAKsH,EAAIrE,EAAK,GADzE,CAEF,MAAO7W,GAELmb,EAAWlT,SAAS0S,cAAc,UAClCQ,EAAShT,MAAQ5J,KAAKqV,KAAKja,EAAIid,EAAK,GACpCuE,EAAS/S,OAAS7J,KAAKqV,KAAKsH,EAAIrE,EAAK,EAJ7B,CAMZsE,EAASE,WAAW,OAAO9G,UAAUzE,EAAO8G,EAAK,EAAGC,EAAK,EAAGld,EAAGuhB,KDsBzEI,SAAwBZ,EAA6Ca,EAGxEC,EAASxB,GAAQJ,GAAWE,UAC3B,IAAA2B,EAAYvB,GAAGQ,EAAYvS,OAC3B,IAAAuT,EAAaxB,GAAGQ,EAAYtS,QAC5BuT,EAASjB,EAAGW,WAAO,MAEnB,IAAMlT,MAAAA,EAAOC,OAAAA,KAEb,IAAAyH,EAAS8L,EAAGC,aAAI,EAAc,EAAGH,EAAQC,GAIzC,GAHIG,EAAMF,EAAIG,gBAAgB3T,EAAOC,GAGjCyH,EAAI9U,KAAKjD,QAAU+jB,EAAI9gB,KAAKjD,OAC5B+jB,EAAMhM,MACH,CACHkM,EAAWlM,EAAG9U,KACdihB,EAAWH,EAAG9gB,KAEd,IAAA8W,EAAY,GACZ,IAAAoK,EAAQ9T,IACR+T,EAAQ9T,IAER,IAAI+T,EAAa,EACbF,EAAK,KAAQC,EAAK,KAAQD,EAAK,GAAKC,EAAK,IAErCC,EADAF,GAAM,IAAOC,GAAM,GACN,EACND,GAAM,KAAQC,GAAM,IACd,EAEA,GAGrBE,EAASX,MACAC,EACT,IAAAW,EAAS,IACTC,EAAS,IACTC,EAAQ,IACRC,EAAQ,MACCje,SAAQ,EAAK0d,GAAK1d,SAAQ,EAAK0d,KAC/B1d,SAAQ,EAAK0d,GAAK1d,SAAQ,EAAK0d,GAxD5C,IA2DoDE,IAAAA,EAAAA,EA9DpDM,EAAW,KACFN,EAAaA,MAEbO,EAAW,EAAGA,EAAWjZ,EAAKiZ,IAAY,CAC/C,IAAAhM,EA0Dc8K,EA1DAW,EAAiB5d,KAAE6W,KAFrBuH,SAGZzf,EAAMwf,GAAYhM,EAAQ,EAAI,EAAIA,CAFa,KAInD7U,EAAO4gB,EAwDC/S,EAAItB,EAEDsB,KAAK,EAEJkT,GADJC,GAAkBnT,EAAK,OACEyS,GACf,IAAGS,EAAM,KACfE,EAAMD,EAAeV,EAErBW,GAAOC,IAAMD,EAAMC,EAAO,GAC1BD,EAAME,IAAKF,EAAME,KACbtT,EAAI8S,IACZS,EAAQvT,IACR,IAAID,EAAItB,OACDsB,KAAK,CACR,IAAAyT,GAAkBzT,EAAK,MACnB0T,EAAMD,EAAef,EACrBgB,EAAM,IAAGA,EAAM,GACnB,IAAIC,EAAMF,EAAef,EACzB,IAAAkB,EAAUD,KACCC,IAAMD,EAAMC,EAAO,KACpBjB,IAAKgB,EAAMhB,GACrB,MAAQ3S,EAAI8S,MACRnkB,EAAI,MAEH,IAAI+f,EAAY,EAAPyE,EAAUzE,GAAM2E,EAAK3E,IAE/B,IADA,IAAAmF,GAAenF,EAAM9M,IAAK8M,EAAO9M,KACxB6M,EAAY,EAAPiF,EAAUjF,GAAMkF,EAAKlF,IAC/BqF,GAAS1L,EAAOzZ,KA5BrBqkB,QA4BoCvE,EAAK9M,IAAO8M,EAAK9M,GAAMoS,EAAMF,GAA+B,IAAM,EAGzGC,EAAQ,EAAMA,IAIVE,EADArf,EADAd,EADJlF,EAAI,EAKJ,IAAK,IAAI+f,EAAY,EAAPyE,EAAUzE,GAAM2E,EAAK3E,IAAM,CACrC,IAAAuF,EAAQvF,IACR,IAAK,IAAID,EAAY,EAAPiF,EAAUjF,GAAMkF,EAAKlF,IAAM,CACrC,IAAAxH,EAAWmB,EAAGzZ,KAAWmlB,EACzBI,EAA4B,GAAfD,EAAIxF,EAAK,GACtB9Z,GAAK2d,EAAM4B,GAAQjN,EACnB+M,GAAK1B,EAAM4B,EAAO,GAAKjN,EACvB7C,GAAKkO,EAAM4B,EAAO,GAAKjN,EACvBkN,GAAK7B,EAAM4B,EAAO,GAAKjN,CANc,CAFJ,CAYzCsL,EADA6B,EAA0B,GAAdpU,EAAGwT,EAAK,IACP7e,EACb4d,EAAM6B,EAAM,GAAKJ,EACjBzB,EAAM6B,EAAM,GAAKhQ,EACjBmO,EAAM6B,EAAM,GAAKvgB,CAtCT,CAXJ,CA/BT,CAqFP,OAAOue,CAlG4B,CCxBPP,CAAcH,EAAU,CACpChT,MAAOA,EAAQ,EAAIO,EACnBN,OAAQA,EAAS,EAAIM,IAGzBgS,GAAQW,WAAW,OAAOyC,aAAaC,EAASrV,EAAQA,GACxDiG,KAEJmB,EAAMR,QAAUQ,EAAMP,QAAUX,EAEhCkB,EAAMD,IAAMkL,GAjChB,IAqCG,CAAEL,OAAAA,EAAQE,qBAAAA,EAlDwB,CAqFvCoD,SAAUA,GAAYC,EAAarJ,GACrC,IAAAsJ,EAAUjW,SAAG0S,cAAS,KACtBuD,EAAKC,SAAWvJ,EAChBsJ,EAAKE,KAAOH,WACHI,KAAK5L,YAAYyL,GAC1BA,EAAKI,iBACID,KAAKE,YAAYL,EANuB,CA7FjD5D,GAAAkE,IAAA,MACAlE,GAAAmE,IAAA,MACAnE,GAAAoE,KAAA,UACAC,KAAA,OCAG,IAAAC,yED0DAT,eACHxgB,EACAkhB,EACA9V,GAEA,IAAI+P,EAAgCwB,GAAcmE,IAClD,IAAI7J,EAAO,QAEPiK,IACIA,EAAgBjK,OAChBA,EAAOiK,EAAgBjK,MAEvBiK,EAAgB/F,YAChBA,EAAY+F,EAAgB/F,YAIJ,QAA5BA,EAAUzI,yBACWkJ,cAGrByE,GADAxP,EAAS,uDAAyC/J,MAC9BmQ,cAGpB,GADAkK,EAAStE,GAAG7c,EAAmBoL,GAC/B,CACA,IAAM2R,OAAAA,EAAQE,qBAAAA,WACRA,EAENoD,GADAxP,EAASkM,EAAGnM,UAAgB,SAACuK,KACZ,GAAGlE,KAAQkE,IAJ5B,CArBqC","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,30]}
|