{"ScriptPreparationCode":"function generateBitmasks() {\r\n const bitmasks = new Set();\r\n\r\n bitmasks.add(0);\r\n bitmasks.add(1);\r\n bitmasks.add(0xFF); // 8 bits\r\n bitmasks.add(0xFFFF); // 16 bits\r\n bitmasks.add(0xFFFFFF); // 24 bits\r\n bitmasks.add(0xFFFFFFFF); // 32 bits\r\n\r\n for (let i = 0; i \u003C 31; i\u002B\u002B) {\r\n bitmasks.add(1 \u003C\u003C i);\r\n }\r\n\r\n bitmasks.add(0x12345678);\r\n bitmasks.add(0x55555555);\r\n bitmasks.add(0xAAAAAAAA);\r\n bitmasks.add(0x33333333);\r\n bitmasks.add(0xCCCCCCCC);\r\n\r\n return Array.from(bitmasks)\r\n}\r\n\r\nvar bitmasks = generateBitmasks();\r\nvar packed = packBitmasks(bitmasks);\r\n\r\n\r\nfunction packBitmasks(bitmasks) {\r\n const buffer = new ArrayBuffer(bitmasks.length * 4);\r\n const uint32View = new Uint32Array(buffer);\r\n for (let i = 0; i \u003C bitmasks.length; i\u002B\u002B) {\r\n uint32View[i] = bitmasks[i];\r\n }\r\n const uint8View = new Uint8Array(buffer);\r\n const binary = String.fromCharCode.apply(null, uint8View);\r\n return btoa(binary);\r\n}\r\n\r\nfunction unpackBitmasks(packed) {\r\n const binary = atob(packed);\r\n const count = binary.length \u003E\u003E\u003E 2;\r\n const result = new Array(count);\r\n for (let i = 0, offset = 0; i \u003C count; i\u002B\u002B, offset \u002B= 4) {\r\n result[i] =\r\n (\r\n binary.charCodeAt(offset) |\r\n (binary.charCodeAt(offset \u002B 1) \u003C\u003C 8) |\r\n (binary.charCodeAt(offset \u002B 2) \u003C\u003C 16) |\r\n (binary.charCodeAt(offset \u002B 3) \u003C\u003C 24)\r\n ) \u003E\u003E\u003E 0;\r\n }\r\n return result;\r\n}\r\n","TestCases":[{"Name":"Pack","Code":"packBitmasks(bitmasks)","IsDeferred":false},{"Name":"UnPack","Code":"unpackBitmasks(packed)","IsDeferred":false}]}