{"ScriptPreparationCode":"function bytesToBase64ByFileReader(bytes) {\r\n return new Promise(r =\u003E {\r\n const reader = new FileReader()\r\n reader.onload = () =\u003E r(reader.result)\r\n reader.readAsDataURL(new Blob([bytes]))\r\n }).then(url =\u003E url.slice(url.indexOf(\u0022,\u0022) \u002B 1));\r\n}\r\n\r\nfunction bytesToBase64ByBtoa(bytes) {\r\n return btoa(bytes.reduce((data, byte) =\u003E data \u002B String.fromCharCode(byte), \u0022\u0022));\r\n}\r\n\r\nfunction bytesToBase64ByToBase64(bytes) {\r\n return bytes.toBase64();\r\n}\r\n\r\nfunction bytesToBase64BySelf(bytes) {\r\n const dict = [\r\n \u0022A\u0022, \u0022B\u0022, \u0022C\u0022, \u0022D\u0022, \u0022E\u0022, \u0022F\u0022, \u0022G\u0022, \u0022H\u0022, \u0022I\u0022, \u0022J\u0022, \u0022K\u0022, \u0022L\u0022, \u0022M\u0022, \u0022N\u0022, \u0022O\u0022, \u0022P\u0022, \u0022Q\u0022, \u0022R\u0022, \u0022S\u0022, \u0022T\u0022, \u0022U\u0022, \u0022V\u0022, \u0022W\u0022, \u0022X\u0022, \u0022Y\u0022, \u0022Z\u0022,\r\n \u0022a\u0022, \u0022b\u0022, \u0022c\u0022, \u0022d\u0022, \u0022e\u0022, \u0022f\u0022, \u0022g\u0022, \u0022h\u0022, \u0022i\u0022, \u0022j\u0022, \u0022k\u0022, \u0022l\u0022, \u0022m\u0022, \u0022n\u0022, \u0022o\u0022, \u0022p\u0022, \u0022q\u0022, \u0022r\u0022, \u0022s\u0022, \u0022t\u0022, \u0022u\u0022, \u0022v\u0022, \u0022w\u0022, \u0022x\u0022, \u0022y\u0022, \u0022z\u0022,\r\n \u00220\u0022, \u00221\u0022, \u00222\u0022, \u00223\u0022, \u00224\u0022, \u00225\u0022, \u00226\u0022, \u00227\u0022, \u00228\u0022, \u00229\u0022, \u0022\u002B\u0022, \u0022/\u0022\r\n ];\r\n let base64 = \u0022\u0022;\r\n let i;\r\n for (i = 0; i \u003C bytes.length - 3; i \u002B= 3) {\r\n const byte1 = bytes[i];\r\n const byte2 = bytes[i \u002B 1];\r\n const byte3 = bytes[i \u002B 2];\r\n base64 \u002B= dict[byte1 \u003E\u003E\u003E 2] \u002B dict[(byte1 \u0026 3) \u003C\u003C 4 | byte2 \u003E\u003E\u003E 4] \u002B dict[(byte2 \u0026 15) \u003C\u003C 2 | byte3 \u003E\u003E\u003E 6] \u002B dict[byte3 \u0026 63];\r\n }\r\n const has2 = i \u002B 1 \u003C bytes.length;\r\n const byte1 = bytes[i];\r\n const byte2 = has2 ? bytes[i \u002B 1] : 0;\r\n base64 \u002B= dict[byte1 \u003E\u003E\u003E 2] \u002B dict[(byte1 \u0026 3) \u003C\u003C 4 | byte2 \u003E\u003E\u003E 4];\r\n if (has2) {\r\n const has3 = i \u002B 2 \u003C bytes.length;\r\n const byte3 = has3 ? bytes[i \u002B 2] : 0;\r\n return base64 \u002B dict[(byte2 \u0026 15) \u003C\u003C 2 | byte3 \u003E\u003E\u003E 6] \u002B (has3 ? dict[byte3 \u0026 63] : \u0022=\u0022);\r\n }\r\n return base64 \u002B \u0022==\u0022;\r\n}\r\n\r\nconst bytes1K = new Uint8Array(1024);\r\nconst bytes32K = new Uint8Array(32768);\r\nconst bytes64K = new Uint8Array(65536);\r\nconst bytes1M = new Uint8Array(1048576);\r\nfor (const bytes of [bytes1K, bytes32K, bytes64K, bytes1M])\r\n for (let i = 0; i \u003C bytes.length; i \u002B= 65536)\r\n crypto.getRandomValues(bytes.subarray(i, i \u002B 65536));","TestCases":[{"Name":"FileReader 1K","Code":"await bytesToBase64ByFileReader(bytes1K);\r\ndeferred.resolve();","IsDeferred":true},{"Name":"FileReader 32K","Code":"await bytesToBase64ByFileReader(bytes32K);\r\ndeferred.resolve();","IsDeferred":true},{"Name":"FileReader 64K","Code":"await bytesToBase64ByFileReader(bytes64K);\r\ndeferred.resolve();","IsDeferred":true},{"Name":"FileReader 1M","Code":"await bytesToBase64ByFileReader(bytes1M);\r\ndeferred.resolve();","IsDeferred":true},{"Name":"btoa 1K","Code":"bytesToBase64ByBtoa(bytes1K);","IsDeferred":false},{"Name":"btoa 32K","Code":"bytesToBase64ByBtoa(bytes32K);","IsDeferred":false},{"Name":"btoa 64K","Code":"bytesToBase64ByBtoa(bytes64K);","IsDeferred":false},{"Name":"btoa 1M","Code":"bytesToBase64ByBtoa(bytes1M);","IsDeferred":false},{"Name":"toBase64 1K","Code":"bytesToBase64ByToBase64(bytes1K);","IsDeferred":false},{"Name":"toBase64 32K","Code":"bytesToBase64ByToBase64(bytes32K);","IsDeferred":false},{"Name":"toBase64 64K","Code":"bytesToBase64ByToBase64(bytes64K);","IsDeferred":false},{"Name":"toBase64 1M","Code":"bytesToBase64ByToBase64(bytes1M);","IsDeferred":false},{"Name":"Self 1K","Code":"bytesToBase64BySelf(bytes1K);","IsDeferred":false},{"Name":"Self 32K","Code":"bytesToBase64BySelf(bytes32K);","IsDeferred":false},{"Name":"Self 64K","Code":"bytesToBase64BySelf(bytes64K);","IsDeferred":false},{"Name":"Self 1M","Code":"bytesToBase64BySelf(bytes1M);","IsDeferred":false}]}