| /* Copyright 2017 Google Inc. All Rights Reserved. | |
| Distributed under MIT license. | |
| See file LICENSE for detail or copy at https://opensource.org/licenses/MIT | |
| */ | |
| import {BrotliDecode} from "./decode.js"; | |
| /** | |
| * NB: Use intermediate chunks to avoid "Maximum call stack size exceeded". | |
| * | |
| * @param {!Int8Array} bytes | |
| * @return {string} | |
| */ | |
| function bytesToString(bytes) { | |
| const kChunkSize = 4096; | |
| if (bytes.length <= kChunkSize) { | |
| return String.fromCharCode.apply(null, new Uint8Array(bytes)); | |
| } | |
| const chunks = []; | |
| for (let start = 0; start < bytes.length; start += kChunkSize) { | |
| const end = Math.min(start + 4096, bytes.length); | |
| chunks.push(bytesToString(bytes.slice(start, end))); | |
| } | |
| return chunks.join(''); | |
| } | |
| /** | |
| * NB: String.prototype.repeat causes "Maximum call stack size exceeded". | |
| * | |
| * @param {number} count | |
| * @param {string} char | |
| * @return {string} | |
| */ | |
| function times(count, char) { | |
| return char.repeat(count); | |
| } | |
| /** | |
| * @param {!Array<number>} compressed | |
| * @param {boolean} expectSuccess | |
| * @param {string} expectedOutput | |
| */ | |
| function checkSynth(compressed, expectSuccess, expectedOutput) { | |
| let success = true; | |
| let actual; | |
| try { | |
| actual = BrotliDecode(Int8Array.from(compressed)); | |
| } catch (ex) { | |
| success = false; | |
| } | |
| expect(expectSuccess).toEqual(success); | |
| if (expectSuccess) { | |
| expect(expectedOutput).toEqual(bytesToString(actual)); | |
| } | |
| } | |
| const allTests = { | |
| /* GENERATED CODE START */ | |
| testAllTransforms10() { | |
| const compressed = [ | |
| 0x1b, 0xfc, 0x05, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x13, 0x7c, | |
| 0x84, 0x26, 0xf8, 0x04, 0x10, 0x4c, 0xf0, 0x89, 0x38, 0x30, 0xc1, 0x27, | |
| 0x4e, 0xc1, 0x04, 0x9f, 0x64, 0x06, 0x26, 0xf8, 0x24, 0x3f, 0x34, 0xc1, | |
| 0x27, 0x7d, 0x82, 0x09, 0x3e, 0xe9, 0x16, 0x4d, 0xf0, 0xc9, 0xd2, 0xc0, | |
| 0x04, 0x9f, 0x0c, 0x8f, 0x4c, 0xf0, 0xc9, 0x06, 0xd1, 0x04, 0x9f, 0x6c, | |
| 0x92, 0x4d, 0xf0, 0xc9, 0x39, 0xc1, 0x04, 0x9f, 0xdc, 0x94, 0x4c, 0xf0, | |
| 0xc9, 0x69, 0xd1, 0x04, 0x9f, 0x3c, 0x98, 0x4d, 0xf0, 0x29, 0x9c, 0x81, | |
| 0x09, 0x3e, 0x45, 0x37, 0x31, 0xc1, 0xa7, 0x60, 0x47, 0x26, 0xf8, 0x14, | |
| 0xfa, 0xcc, 0x04, 0x9f, 0xc2, 0x20, 0x9a, 0xe0, 0x53, 0x48, 0x54, 0x13, | |
| 0x7c, 0x8a, 0x8f, 0x6c, 0x82, 0x4f, 0xb1, 0xd2, 0x4d, 0xf0, 0x29, 0x67, | |
| 0x82, 0x09, 0x3e, 0xe5, 0x4f, 0x31, 0xc1, 0xa7, 0x7c, 0x4a, 0x26, 0xf8, | |
| 0x94, 0x57, 0xcd, 0x04, 0x9f, 0x12, 0x2c, 0x9a, 0xe0, 0x53, 0xba, 0x55, | |
| 0x13, 0x7c, 0xca, 0xbf, 0x6c, 0x82, 0x4f, 0xb9, 0xd8, 0x4d, 0xf0, 0xa9, | |
| 0x30, 0x03, 0x13, 0x7c, 0x2a, 0xd2, 0xc2, 0x04, 0x9f, 0x4a, 0x36, 0x31, | |
| 0xc1, 0xa7, 0xca, 0x6d, 0x4c, 0xf0, 0xa9, 0x94, 0x23, 0x13, 0x7c, 0x2a, | |
| 0xeb, 0xca, 0x04, 0x9f, 0xea, 0x3c, 0x33, 0xc1, 0xa7, 0xb2, 0xef, 0x4c, | |
| 0xf0, 0xa9, 0xf8, 0x43, 0x13, 0x7c, 0xaa, 0x00, 0xd3, 0x04, 0x9f, 0x2a, | |
| 0x42, 0x35, 0xc1, 0xa7, 0xc2, 0x70, 0x4d, 0xf0, 0xa9, 0x52, 0x64, 0x13, | |
| 0x7c, 0x2a, 0x1a, 0xdb, 0x04, 0x9f, 0x6a, 0x48, 0x37, 0xc1, 0xa7, 0x92, | |
| 0xf2, 0x4d, 0xf0, 0xa9, 0xc3, 0x04, 0x13, 0x7c, 0xea, 0x32, 0xc3, 0x04, | |
| 0x9f, 0x7a, 0x4e, 0x31, 0xc1, 0xa7, 0x06, 0x74, 0x4c, 0xf0, 0xa9, 0x19, | |
| 0x25, 0x13, 0x7c, 0x6a, 0x4d, 0xcb, 0x04, 0x9f, 0x1a, 0x55, 0x33, 0xc1, | |
| 0xa7, 0x56, 0xf5, 0x4c, 0xf0, 0xa9, 0x5d, 0x45, 0x13, 0x7c, 0xea, 0x59, | |
| 0xd3, 0x04, 0x9f, 0xfa, 0x57, 0x35, 0xc1, 0xa7, 0x66, 0x76, 0x4d, 0xf0, | |
| 0xa9, 0x9f, 0x65, 0x13, 0x7c, 0x6a, 0x6f, 0xdb, 0x04, 0x9f, 0x9a, 0x5d, | |
| 0x37, 0xc1, 0xa7, 0x06, 0xf8, 0x4d, 0xf0, 0x69, 0x0c, 0x06, 0x26, 0xf8, | |
| 0x34, 0x08, 0x07, 0x13, 0x7c, 0x1a, 0x8b, 0x85, 0x09, 0x3e, 0x8d, 0xc8, | |
| 0xc3, 0x04, 0x9f, 0xe6, 0x65, 0x62, 0x82, 0x4f, 0xb3, 0x73, 0x31, 0xc1, | |
| 0xa7, 0x41, 0xda, 0x98, 0xe0, 0xd3, 0x54, 0x7d, 0x4c, 0xf0, 0x69, 0xc4, | |
| 0x46, 0x26, 0xf8, 0x34, 0x72, 0x27, 0x13, 0x7c, 0x1a, 0xc5, 0x95, 0x09, | |
| 0x3e, 0x8d, 0xe5, 0xcb, 0x04, 0x9f, 0x06, 0x75, 0x66, 0x82, 0x4f, 0x43, | |
| 0x7b, 0x33, 0xc1, 0xa7, 0x09, 0xde, 0x99, 0xe0, 0xd3, 0x34, 0xff, 0x4c, | |
| 0xf0, 0x69, 0xb2, 0x87, 0x26, 0xf8, 0x34, 0xe9, 0x47, 0x13, 0x7c, 0x9a, | |
| 0xfb, 0xa5, 0x09, 0x3e, 0x4d, 0x01, 0xd4, 0x04, 0x9f, 0x46, 0x82, 0x6a, | |
| 0x82, 0x4f, 0x03, 0x82, 0x35, 0xc1, 0xa7, 0x61, 0xe1, 0x9a, 0xe0, 0xd3, | |
| 0xe4, 0x80, 0x4d, 0xf0, 0x69, 0x8a, 0xc8, 0x26, 0xf8, 0x34, 0x52, 0x68, | |
| 0x13, 0x7c, 0x9a, 0x2f, 0xb6, 0x09, 0x3e, 0x8d, 0x1b, 0xdc, 0x04, 0x9f, | |
| 0x86, 0x8f, 0x6e, 0x82, 0x4f, 0xb3, 0x88, 0x37, 0xc1, 0xa7, 0xd9, 0xe4, | |
| 0x9b, 0xe0, 0xd3, 0x9e, 0x02, 0x4c, 0xf0, 0x69, 0x6d, 0x09, 0x26, 0xf8, | |
| 0xb4, 0xc3, 0x08, 0x13, 0x7c, 0x5a, 0x68, 0x86, 0x09, 0x3e, 0xad, 0x37, | |
| 0xc4, 0x04, 0x9f, 0x56, 0x9d, 0x62, 0x82, 0x4f, 0x9b, 0x8f, 0x31, 0xc1, | |
| 0xa7, 0x2d, 0xe8, 0x98, 0xe0, 0xd3, 0x4a, 0x84, 0x4c, 0xf0, 0x69, 0x3f, | |
| 0x4a, 0x26, 0xf8, 0xb4, 0x2c, 0x29, 0x13, 0x7c, 0xda, 0x9c, 0x96, 0x09, | |
| 0x3e, 0x2d, 0x52, 0xcc, 0x04, 0x9f, 0xb6, 0xaa, 0x66, 0x82, 0x4f, 0x2b, | |
| 0x96, 0x33, 0xc1, 0xa7, 0x7d, 0xeb, 0x99, 0xe0, 0xd3, 0xf6, 0x05, 0x4d, | |
| 0xf0, 0x69, 0x17, 0x8b, 0x26, 0xf8, 0xb4, 0x97, 0x49, 0x13, 0x7c, 0xda, | |
| 0xd1, 0xa6, 0x09, 0x3e, 0x2d, 0x6c, 0xd4, 0x04, 0x9f, 0xb6, 0xb7, 0x6a, | |
| 0x82, 0x4f, 0xab, 0x9c, 0x35, 0xc1, 0xa7, 0xc5, 0xee, 0x9a, 0xe0, 0xd3, | |
| 0x9a, 0x87, 0x4d, 0xf0, 0x69, 0xe9, 0xcb | |
| ]; | |
| checkSynth( | |
| /* | |
| * // The stream consists of word "time" with all possible transforms. | |
| * main_header | |
| * metablock_header_easy: 1533, 1 | |
| * command_easy: 10, "|", 2 // = 0 << 10 + 1 + 1 | |
| * command_easy: 10, "|", 1037 // = 1 << 10 + 1 + 12 | |
| * command_easy: 10, "|", 2073 // = 2 << 10 + 1 + 24 | |
| * command_easy: 10, "|", 3110 // = 3 << 10 + 1 + 37 | |
| * command_easy: 10, "|", 4144 // = 4 << 10 + 1 + 47 | |
| * command_easy: 10, "|", 5180 // = 5 << 10 + 1 + 59 | |
| * command_easy: 10, "|", 6220 // = 6 << 10 + 1 + 75 | |
| * command_easy: 10, "|", 7256 // = 7 << 10 + 1 + 87 | |
| * command_easy: 10, "|", 8294 // = 8 << 10 + 1 + 101 | |
| * command_easy: 10, "|", 9333 // = 9 << 10 + 1 + 116 | |
| * command_easy: 10, "|", 10368 // = 10 << 10 + 1 + 127 | |
| * command_easy: 10, "|", 11408 // = 11 << 10 + 1 + 143 | |
| * command_easy: 10, "|", 12441 // = 12 << 10 + 1 + 152 | |
| * command_easy: 10, "|", 13475 // = 13 << 10 + 1 + 162 | |
| * command_easy: 10, "|", 14513 // = 14 << 10 + 1 + 176 | |
| * command_easy: 10, "|", 15550 // = 15 << 10 + 1 + 189 | |
| * command_easy: 10, "|", 16587 // = 16 << 10 + 1 + 202 | |
| * command_easy: 10, "|", 17626 // = 17 << 10 + 1 + 217 | |
| * command_easy: 10, "|", 18665 // = 18 << 10 + 1 + 232 | |
| * command_easy: 10, "|", 19703 // = 19 << 10 + 1 + 246 | |
| * command_easy: 10, "|", 20739 // = 20 << 10 + 1 + 258 | |
| * command_easy: 10, "|", 21775 // = 21 << 10 + 1 + 270 | |
| * command_easy: 10, "|", 22812 // = 22 << 10 + 1 + 283 | |
| * command_easy: 10, "|", 23848 // = 23 << 10 + 1 + 295 | |
| * command_easy: 10, "|", 24880 // = 24 << 10 + 1 + 303 | |
| * command_easy: 10, "|", 25916 // = 25 << 10 + 1 + 315 | |
| * command_easy: 10, "|", 26956 // = 26 << 10 + 1 + 331 | |
| * command_easy: 10, "|", 27988 // = 27 << 10 + 1 + 339 | |
| * command_easy: 10, "|", 29021 // = 28 << 10 + 1 + 348 | |
| * command_easy: 10, "|", 30059 // = 29 << 10 + 1 + 362 | |
| * command_easy: 10, "|", 31100 // = 30 << 10 + 1 + 379 | |
| * command_easy: 10, "|", 32136 // = 31 << 10 + 1 + 391 | |
| * command_easy: 10, "|", 33173 // = 32 << 10 + 1 + 404 | |
| * command_easy: 10, "|", 34209 // = 33 << 10 + 1 + 416 | |
| * command_easy: 10, "|", 35247 // = 34 << 10 + 1 + 430 | |
| * command_easy: 10, "|", 36278 // = 35 << 10 + 1 + 437 | |
| * command_easy: 10, "|", 37319 // = 36 << 10 + 1 + 454 | |
| * command_easy: 10, "|", 38355 // = 37 << 10 + 1 + 466 | |
| * command_easy: 10, "|", 39396 // = 38 << 10 + 1 + 483 | |
| * command_easy: 10, "|", 40435 // = 39 << 10 + 1 + 498 | |
| * command_easy: 10, "|", 41465 // = 40 << 10 + 1 + 504 | |
| * command_easy: 10, "|", 42494 // = 41 << 10 + 1 + 509 | |
| * command_easy: 10, "|", 43534 // = 42 << 10 + 1 + 525 | |
| * command_easy: 10, "|", 44565 // = 43 << 10 + 1 + 532 | |
| * command_easy: 10, "|", 45606 // = 44 << 10 + 1 + 549 | |
| * command_easy: 10, "|", 46641 // = 45 << 10 + 1 + 560 | |
| * command_easy: 10, "|", 47680 // = 46 << 10 + 1 + 575 | |
| * command_easy: 10, "|", 48719 // = 47 << 10 + 1 + 590 | |
| * command_easy: 10, "|", 49758 // = 48 << 10 + 1 + 605 | |
| * command_easy: 10, "|", 50786 // = 49 << 10 + 1 + 609 | |
| * command_easy: 10, "|", 51824 // = 50 << 10 + 1 + 623 | |
| * command_easy: 10, "|", 52861 // = 51 << 10 + 1 + 636 | |
| * command_easy: 10, "|", 53897 // = 52 << 10 + 1 + 648 | |
| * command_easy: 10, "|", 54935 // = 53 << 10 + 1 + 662 | |
| * command_easy: 10, "|", 55973 // = 54 << 10 + 1 + 676 | |
| * command_easy: 10, "|", 56999 // = 55 << 10 + 1 + 678 | |
| * command_easy: 10, "|", 58027 // = 56 << 10 + 1 + 682 | |
| * command_easy: 10, "|", 59056 // = 57 << 10 + 1 + 687 | |
| * command_easy: 10, "|", 60092 // = 58 << 10 + 1 + 699 | |
| * command_easy: 10, "|", 61129 // = 59 << 10 + 1 + 712 | |
| * command_easy: 10, "|", 62156 // = 60 << 10 + 1 + 715 | |
| * command_easy: 10, "|", 63195 // = 61 << 10 + 1 + 730 | |
| * command_easy: 10, "|", 64233 // = 62 << 10 + 1 + 744 | |
| * command_easy: 10, "|", 65277 // = 63 << 10 + 1 + 764 | |
| * command_easy: 10, "|", 66307 // = 64 << 10 + 1 + 770 | |
| * command_easy: 10, "|", 67333 // = 65 << 10 + 1 + 772 | |
| * command_easy: 10, "|", 68371 // = 66 << 10 + 1 + 786 | |
| * command_easy: 10, "|", 69407 // = 67 << 10 + 1 + 798 | |
| * command_easy: 10, "|", 70444 // = 68 << 10 + 1 + 811 | |
| * command_easy: 10, "|", 71480 // = 69 << 10 + 1 + 823 | |
| * command_easy: 10, "|", 72517 // = 70 << 10 + 1 + 836 | |
| * command_easy: 10, "|", 73554 // = 71 << 10 + 1 + 849 | |
| * command_easy: 10, "|", 74591 // = 72 << 10 + 1 + 862 | |
| * command_easy: 10, "|", 75631 // = 73 << 10 + 1 + 878 | |
| * command_easy: 10, "|", 76679 // = 74 << 10 + 1 + 902 | |
| * command_easy: 10, "|", 77715 // = 75 << 10 + 1 + 914 | |
| * command_easy: 10, "|", 78757 // = 76 << 10 + 1 + 932 | |
| * command_easy: 10, "|", 79793 // = 77 << 10 + 1 + 944 | |
| * command_easy: 10, "|", 80830 // = 78 << 10 + 1 + 957 | |
| * command_easy: 10, "|", 81866 // = 79 << 10 + 1 + 969 | |
| * command_easy: 10, "|", 82902 // = 80 << 10 + 1 + 981 | |
| * command_easy: 10, "|", 83942 // = 81 << 10 + 1 + 997 | |
| * command_easy: 10, "|", 84980 // = 82 << 10 + 1 + 1011 | |
| * command_easy: 10, "|", 86018 // = 83 << 10 + 1 + 1025 | |
| * command_easy: 10, "|", 87055 // = 84 << 10 + 1 + 1038 | |
| * command_easy: 10, "|", 88093 // = 85 << 10 + 1 + 1052 | |
| * command_easy: 10, "|", 89129 // = 86 << 10 + 1 + 1064 | |
| * command_easy: 10, "|", 90166 // = 87 << 10 + 1 + 1077 | |
| * command_easy: 10, "|", 91202 // = 88 << 10 + 1 + 1089 | |
| * command_easy: 10, "|", 92239 // = 89 << 10 + 1 + 1102 | |
| * command_easy: 10, "|", 93276 // = 90 << 10 + 1 + 1115 | |
| * command_easy: 10, "|", 94315 // = 91 << 10 + 1 + 1130 | |
| * command_easy: 10, "|", 95353 // = 92 << 10 + 1 + 1144 | |
| * command_easy: 10, "|", 96392 // = 93 << 10 + 1 + 1159 | |
| * command_easy: 10, "|", 97432 // = 94 << 10 + 1 + 1175 | |
| * command_easy: 10, "|", 98468 // = 95 << 10 + 1 + 1187 | |
| * command_easy: 10, "|", 99507 // = 96 << 10 + 1 + 1202 | |
| * command_easy: 10, "|", 100544 // = 97 << 10 + 1 + 1215 | |
| * command_easy: 10, "|", 101581 // = 98 << 10 + 1 + 1228 | |
| * command_easy: 10, "|", 102619 // = 99 << 10 + 1 + 1242 | |
| * command_easy: 10, "|", 103655 // = 100 << 10 + 1 + 1254 | |
| * command_easy: 10, "|", 104694 // = 101 << 10 + 1 + 1269 | |
| * command_easy: 10, "|", 105730 // = 102 << 10 + 1 + 1281 | |
| * command_easy: 10, "|", 106767 // = 103 << 10 + 1 + 1294 | |
| * command_easy: 10, "|", 107804 // = 104 << 10 + 1 + 1307 | |
| * command_easy: 10, "|", 108841 // = 105 << 10 + 1 + 1320 | |
| * command_easy: 10, "|", 109878 // = 106 << 10 + 1 + 1333 | |
| * command_easy: 10, "|", 110917 // = 107 << 10 + 1 + 1348 | |
| * command_easy: 10, "|", 111954 // = 108 << 10 + 1 + 1361 | |
| * command_easy: 10, "|", 112991 // = 109 << 10 + 1 + 1374 | |
| * command_easy: 10, "|", 114028 // = 110 << 10 + 1 + 1387 | |
| * command_easy: 10, "|", 115066 // = 111 << 10 + 1 + 1401 | |
| * command_easy: 10, "|", 116104 // = 112 << 10 + 1 + 1415 | |
| * command_easy: 10, "|", 117140 // = 113 << 10 + 1 + 1427 | |
| * command_easy: 10, "|", 118176 // = 114 << 10 + 1 + 1439 | |
| * command_easy: 10, "|", 119213 // = 115 << 10 + 1 + 1452 | |
| * command_easy: 10, "|", 120250 // = 116 << 10 + 1 + 1465 | |
| * command_easy: 10, "|", 121287 // = 117 << 10 + 1 + 1478 | |
| * command_easy: 10, "|", 122325 // = 118 << 10 + 1 + 1492 | |
| * command_easy: 10, "|", 123363 // = 119 << 10 + 1 + 1506 | |
| * command_easy: 10, "|", 124401 // = 120 << 10 + 1 + 1520 | |
| */ | |
| compressed, | |
| true, | |
| // typo:off | |
| '|categories|categories | categories |ategories|Categories |categories the ' | |
| + '| categories|s categories |categories of |Categories|categories and |teg' | |
| + 'ories|categorie|, categories |categories, | Categories |categories in |c' | |
| + 'ategories to |e categories |categories"|categories.|categories">|categor' | |
| + 'ies\n|categor|categories]|categories for |egories|categori|categories a ' | |
| + '|categories that | Categories|categories. |.categories| categories, |gor' | |
| + 'ies|categories with |categories\'|categories from |categories by |ories|' | |
| + 'ries| the categories|catego|categories. The |CATEGORIES|categories on |c' | |
| + 'ategories as |categories is |cat|categorieing |categories\n\t|categories' | |
| + ':| categories. |categoriesed |s|ies|cate|categories(|Categories, |ca|cat' | |
| + 'egories at |categoriesly | the categories of |categ|c| Categories, |Cate' | |
| + 'gories"|.categories(|CATEGORIES |Categories">|categories="| categories.|' | |
| + '.com/categories| the categories of the |Categories\'|categories. This |c' | |
| + 'ategories,|.categories |Categories(|Categories.|categories not | categor' | |
| + 'ies="|categorieser | CATEGORIES |categoriesal | CATEGORIES|categories=' | |
| + '\'|CATEGORIES"|Categories. | categories(|categoriesful | Categories. |ca' | |
| + 'tegoriesive |categoriesless |CATEGORIES\'|categoriesest | Categories.|CA' | |
| + 'TEGORIES">| categories=\'|Categories,|categoriesize |CATEGORIES.|' | |
| + '\xc2\xa0categories| categories,|Categories="|CATEGORIES="|categoriesous ' | |
| + '|CATEGORIES, |Categories=\'| Categories,| CATEGORIES="| CATEGORIES, |CAT' | |
| + 'EGORIES,|CATEGORIES(|CATEGORIES. | CATEGORIES.|CATEGORIES=\'| CATEGORIES' | |
| + '. | Categories="| CATEGORIES=\'| Categories=\'' | |
| // typo:on | |
| ); | |
| }, | |
| testAllTransforms4() { | |
| const compressed = [ | |
| 0x1b, 0x40, 0x03, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x51, 0x3e, | |
| 0x42, 0x51, 0x3e, 0x81, 0x02, 0x51, 0x3e, 0x11, 0x04, 0xa2, 0x7c, 0xe2, | |
| 0x0b, 0x44, 0xf9, 0x24, 0x1b, 0x10, 0xe5, 0x93, 0x84, 0x50, 0x94, 0x4f, | |
| 0xba, 0x02, 0x51, 0x3e, 0x69, 0x0c, 0x45, 0xf9, 0x64, 0x39, 0x20, 0xca, | |
| 0x27, 0x13, 0x22, 0x51, 0x3e, 0xd9, 0x11, 0x8a, 0xf2, 0xc9, 0xa2, 0x58, | |
| 0x94, 0x4f, 0x4e, 0x05, 0xa2, 0x7c, 0x72, 0x2c, 0x12, 0xe5, 0x93, 0x83, | |
| 0xa1, 0x28, 0x9f, 0xfc, 0x8c, 0x45, 0xf9, 0x14, 0x6e, 0x40, 0x94, 0x4f, | |
| 0x71, 0x47, 0x44, 0xf9, 0x14, 0x80, 0x48, 0x94, 0x4f, 0x81, 0xc8, 0x44, | |
| 0xf9, 0x14, 0x8e, 0x50, 0x94, 0x4f, 0x41, 0x49, 0x45, 0xf9, 0x14, 0x9b, | |
| 0x58, 0x94, 0x4f, 0x11, 0xca, 0x45, 0xf9, 0x94, 0xa3, 0x40, 0x94, 0x4f, | |
| 0x99, 0x4a, 0x44, 0xf9, 0x94, 0xb3, 0x48, 0x94, 0x4f, 0x59, 0xcb, 0x44, | |
| 0xf9, 0x94, 0xb8, 0x50, 0x94, 0x4f, 0x09, 0x4c, 0x45, 0xf9, 0x94, 0xcb, | |
| 0x58, 0x94, 0x4f, 0x19, 0xcd, 0x45, 0xf9, 0x54, 0xd8, 0x80, 0x28, 0x9f, | |
| 0xca, 0x9b, 0x10, 0xe5, 0x53, 0x99, 0x23, 0xa2, 0x7c, 0xaa, 0x73, 0x46, | |
| 0x94, 0x4f, 0x25, 0x0f, 0x89, 0xf2, 0xa9, 0xf0, 0x29, 0x51, 0x3e, 0xd5, | |
| 0x40, 0x26, 0xca, 0xa7, 0x62, 0xe8, 0x44, 0xf9, 0x54, 0x0d, 0xa1, 0x28, | |
| 0x9f, 0xca, 0xa1, 0x14, 0xe5, 0x53, 0x61, 0xa4, 0xa2, 0x7c, 0xaa, 0x8c, | |
| 0x56, 0x94, 0x4f, 0x45, 0x12, 0x8b, 0xf2, 0xa9, 0x52, 0x6a, 0x51, 0x3e, | |
| 0x95, 0x4c, 0x2e, 0xca, 0xa7, 0xda, 0xe9, 0x45, 0xf9, 0xd4, 0x44, 0x81, | |
| 0x28, 0x9f, 0xba, 0xa8, 0x10, 0xe5, 0x53, 0x37, 0x25, 0xa2, 0x7c, 0x6a, | |
| 0xaa, 0x46, 0x94, 0x4f, 0xad, 0x15, 0x89, 0xf2, 0xa9, 0xc5, 0x2a, 0x51, | |
| 0x3e, 0xb5, 0x5a, 0x26, 0xca, 0xa7, 0x5e, 0xeb, 0x44, 0xf9, 0xd4, 0x6c, | |
| 0xa1, 0x28, 0x9f, 0xba, 0xad, 0x14, 0xe5, 0x53, 0xcf, 0xa5, 0xa2, 0x7c, | |
| 0x6a, 0xbd, 0x56, 0x94, 0x4f, 0xbd, 0x17, 0x8b, 0xf2, 0xa9, 0x09, 0x6b, | |
| 0x51, 0x3e, 0x35, 0x63, 0x2e, 0xca, 0xa7, 0xd6, 0xec, 0x45, 0xf9, 0x34, | |
| 0x9b, 0x01, 0x51, 0x3e, 0x0d, 0x67, 0x41, 0x94, 0x4f, 0x43, 0x9a, 0x10, | |
| 0xe5, 0xd3, 0xa8, 0x36, 0x44, 0xf9, 0x34, 0xb1, 0x11, 0x51, 0x3e, 0xcd, | |
| 0x6d, 0x45, 0x94, 0x4f, 0xe3, 0x9b, 0x11, 0xe5, 0xd3, 0x14, 0x77, 0x44, | |
| 0xf9, 0x34, 0xcc, 0x21, 0x51, 0x3e, 0x8d, 0x75, 0x49, 0x94, 0x4f, 0x83, | |
| 0x9e, 0x12, 0xe5, 0xd3, 0xb8, 0xb7, 0x44, 0xf9, 0x34, 0xfa, 0x31, 0x51, | |
| 0x3e, 0x0d, 0x80, 0x4d, 0x94, 0x4f, 0x73, 0xa0, 0x13, 0xe5, 0xd3, 0x34, | |
| 0xf8, 0x44, 0xf9, 0x34, 0x13, 0x42, 0x51, 0x3e, 0x4d, 0x87, 0x51, 0x94, | |
| 0x4f, 0x53, 0xa2, 0x14, 0xe5, 0xd3, 0xb4, 0x38, 0x45, 0xf9, 0x34, 0x34, | |
| 0x52, 0x51, 0x3e, 0x0d, 0x8f, 0x55, 0x94, 0x4f, 0x23, 0xa4, 0x15, 0xe5, | |
| 0xd3, 0x24, 0x79, 0x45, 0xf9, 0x34, 0x4f, 0x62, 0x51, 0x3e, 0x8d, 0x95, | |
| 0x59, 0x94, 0x4f, 0xd3, 0xa5, 0x16, 0xe5, 0xd3, 0x98, 0xb9, 0x45, 0xf9, | |
| 0x34, 0x6e, 0x72, 0x51, 0x3e, 0xcd, 0x9d, 0x5d, 0x94, 0x4f, 0x13, 0xa8, | |
| 0x17, 0xe5, 0xd3, 0x1c, 0xfa, 0x45, 0xf9, 0xb4, 0x90, 0x02, 0x51, 0x3e, | |
| 0xed, 0xa5, 0x41, 0x94, 0x4f, 0xeb, 0xa9, 0x10, 0xe5, 0xd3, 0x9a, 0x3a, | |
| 0x44, 0xf9, 0xb4, 0xac, 0x12, 0x51, 0x3e, 0x6d, 0xad, 0x45, 0x94, 0x4f, | |
| 0xbb, 0xab, 0x11, 0xe5, 0xd3, 0x0a, 0x7b, 0x44, 0xf9, 0xb4, 0xc9, 0x22, | |
| 0x51, 0x3e, 0x2d, 0xb4, 0x49, 0x94, 0x4f, 0x7b, 0xad, 0x12, 0xe5, 0xd3, | |
| 0x82, 0xbb, 0x44, 0xf9, 0xb4, 0xe7, 0x32, 0x51, 0x3e, 0xad, 0xbb, 0x4d, | |
| 0x94, 0x4f, 0x5b, 0xaf, 0x13, 0xe5, 0xd3, 0xf6, 0xfb, 0x44, 0xf9, 0xb4, | |
| 0x05, 0x43, 0x51, 0x3e, 0xed, 0xc2, 0x51, 0x94, 0x4f, 0x1b, 0xb1, 0x14, | |
| 0xe5, 0xd3, 0x62, 0x3c, 0x45, 0xf9, 0xb4, 0x1f, 0x53, 0x51, 0x3e, 0xad, | |
| 0xc9, 0x55, 0x94, 0x4f, 0xeb, 0xb2, 0x15, 0xe5, 0xd3, 0xda, 0x7c, 0x45, | |
| 0xf9, 0xb4, 0x3e, 0x63 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // The stream consists of word "time" with all possible transforms. | |
| * main_header | |
| * metablock_header_easy: 833, 1 | |
| * command_easy: 4, "|", 2 // = 0 << 10 + 1 + 1 | |
| * command_easy: 4, "|", 1031 // = 1 << 10 + 1 + 6 | |
| * command_easy: 4, "|", 2061 // = 2 << 10 + 1 + 12 | |
| * command_easy: 4, "|", 3092 // = 3 << 10 + 1 + 19 | |
| * command_easy: 4, "|", 4120 // = 4 << 10 + 1 + 23 | |
| * command_easy: 4, "|", 5150 // = 5 << 10 + 1 + 29 | |
| * command_easy: 4, "|", 6184 // = 6 << 10 + 1 + 39 | |
| * command_easy: 4, "|", 7214 // = 7 << 10 + 1 + 45 | |
| * command_easy: 4, "|", 8246 // = 8 << 10 + 1 + 53 | |
| * command_easy: 4, "|", 9279 // = 9 << 10 + 1 + 62 | |
| * command_easy: 4, "|", 10308 // = 10 << 10 + 1 + 67 | |
| * command_easy: 4, "|", 11342 // = 11 << 10 + 1 + 77 | |
| * command_easy: 4, "|", 12369 // = 12 << 10 + 1 + 80 | |
| * command_easy: 4, "|", 13397 // = 13 << 10 + 1 + 84 | |
| * command_easy: 4, "|", 14429 // = 14 << 10 + 1 + 92 | |
| * command_easy: 4, "|", 15460 // = 15 << 10 + 1 + 99 | |
| * command_easy: 4, "|", 16491 // = 16 << 10 + 1 + 106 | |
| * command_easy: 4, "|", 17524 // = 17 << 10 + 1 + 115 | |
| * command_easy: 4, "|", 18557 // = 18 << 10 + 1 + 124 | |
| * command_easy: 4, "|", 19589 // = 19 << 10 + 1 + 132 | |
| * command_easy: 4, "|", 20619 // = 20 << 10 + 1 + 138 | |
| * command_easy: 4, "|", 21649 // = 21 << 10 + 1 + 144 | |
| * command_easy: 4, "|", 22680 // = 22 << 10 + 1 + 151 | |
| * command_easy: 4, "|", 23710 // = 23 << 10 + 1 + 157 | |
| * command_easy: 4, "|", 24736 // = 24 << 10 + 1 + 159 | |
| * command_easy: 4, "|", 25766 // = 25 << 10 + 1 + 165 | |
| * command_easy: 4, "|", 26800 // = 26 << 10 + 1 + 175 | |
| * command_easy: 4, "|", 27826 // = 27 << 10 + 1 + 177 | |
| * command_easy: 4, "|", 28853 // = 28 << 10 + 1 + 180 | |
| * command_easy: 4, "|", 29885 // = 29 << 10 + 1 + 188 | |
| * command_easy: 4, "|", 30920 // = 30 << 10 + 1 + 199 | |
| * command_easy: 4, "|", 31950 // = 31 << 10 + 1 + 205 | |
| * command_easy: 4, "|", 32981 // = 32 << 10 + 1 + 212 | |
| * command_easy: 4, "|", 34011 // = 33 << 10 + 1 + 218 | |
| * command_easy: 4, "|", 35043 // = 34 << 10 + 1 + 226 | |
| * command_easy: 4, "|", 36068 // = 35 << 10 + 1 + 227 | |
| * command_easy: 4, "|", 37103 // = 36 << 10 + 1 + 238 | |
| * command_easy: 4, "|", 38133 // = 37 << 10 + 1 + 244 | |
| * command_easy: 4, "|", 39168 // = 38 << 10 + 1 + 255 | |
| * command_easy: 4, "|", 40201 // = 39 << 10 + 1 + 264 | |
| * command_easy: 4, "|", 41226 // = 40 << 10 + 1 + 265 | |
| * command_easy: 4, "|", 42251 // = 41 << 10 + 1 + 266 | |
| * command_easy: 4, "|", 43285 // = 42 << 10 + 1 + 276 | |
| * command_easy: 4, "|", 44310 // = 43 << 10 + 1 + 277 | |
| * command_easy: 4, "|", 45345 // = 44 << 10 + 1 + 288 | |
| * command_easy: 4, "|", 46374 // = 45 << 10 + 1 + 293 | |
| * command_easy: 4, "|", 47407 // = 46 << 10 + 1 + 302 | |
| * command_easy: 4, "|", 48440 // = 47 << 10 + 1 + 311 | |
| * command_easy: 4, "|", 49473 // = 48 << 10 + 1 + 320 | |
| * command_easy: 4, "|", 50498 // = 49 << 10 + 1 + 321 | |
| * command_easy: 4, "|", 51530 // = 50 << 10 + 1 + 329 | |
| * command_easy: 4, "|", 52561 // = 51 << 10 + 1 + 336 | |
| * command_easy: 4, "|", 53591 // = 52 << 10 + 1 + 342 | |
| * command_easy: 4, "|", 54623 // = 53 << 10 + 1 + 350 | |
| * command_easy: 4, "|", 55655 // = 54 << 10 + 1 + 358 | |
| * command_easy: 4, "|", 56680 // = 55 << 10 + 1 + 359 | |
| * command_easy: 4, "|", 57705 // = 56 << 10 + 1 + 360 | |
| * command_easy: 4, "|", 58730 // = 57 << 10 + 1 + 361 | |
| * command_easy: 4, "|", 59760 // = 58 << 10 + 1 + 367 | |
| * command_easy: 4, "|", 60791 // = 59 << 10 + 1 + 374 | |
| * command_easy: 4, "|", 61816 // = 60 << 10 + 1 + 375 | |
| * command_easy: 4, "|", 62849 // = 61 << 10 + 1 + 384 | |
| * command_easy: 4, "|", 63881 // = 62 << 10 + 1 + 392 | |
| * command_easy: 4, "|", 64919 // = 63 << 10 + 1 + 406 | |
| * command_easy: 4, "|", 65944 // = 64 << 10 + 1 + 407 | |
| * command_easy: 4, "|", 66969 // = 65 << 10 + 1 + 408 | |
| * command_easy: 4, "|", 68001 // = 66 << 10 + 1 + 416 | |
| * command_easy: 4, "|", 69031 // = 67 << 10 + 1 + 422 | |
| * command_easy: 4, "|", 70062 // = 68 << 10 + 1 + 429 | |
| * command_easy: 4, "|", 71092 // = 69 << 10 + 1 + 435 | |
| * command_easy: 4, "|", 72123 // = 70 << 10 + 1 + 442 | |
| * command_easy: 4, "|", 73154 // = 71 << 10 + 1 + 449 | |
| * command_easy: 4, "|", 74185 // = 72 << 10 + 1 + 456 | |
| * command_easy: 4, "|", 75219 // = 73 << 10 + 1 + 466 | |
| * command_easy: 4, "|", 76261 // = 74 << 10 + 1 + 484 | |
| * command_easy: 4, "|", 77291 // = 75 << 10 + 1 + 490 | |
| * command_easy: 4, "|", 78327 // = 76 << 10 + 1 + 502 | |
| * command_easy: 4, "|", 79357 // = 77 << 10 + 1 + 508 | |
| * command_easy: 4, "|", 80388 // = 78 << 10 + 1 + 515 | |
| * command_easy: 4, "|", 81418 // = 79 << 10 + 1 + 521 | |
| * command_easy: 4, "|", 82448 // = 80 << 10 + 1 + 527 | |
| * command_easy: 4, "|", 83482 // = 81 << 10 + 1 + 537 | |
| * command_easy: 4, "|", 84514 // = 82 << 10 + 1 + 545 | |
| * command_easy: 4, "|", 85546 // = 83 << 10 + 1 + 553 | |
| * command_easy: 4, "|", 86577 // = 84 << 10 + 1 + 560 | |
| * command_easy: 4, "|", 87609 // = 85 << 10 + 1 + 568 | |
| * command_easy: 4, "|", 88639 // = 86 << 10 + 1 + 574 | |
| * command_easy: 4, "|", 89670 // = 87 << 10 + 1 + 581 | |
| * command_easy: 4, "|", 90700 // = 88 << 10 + 1 + 587 | |
| * command_easy: 4, "|", 91731 // = 89 << 10 + 1 + 594 | |
| * command_easy: 4, "|", 92762 // = 90 << 10 + 1 + 601 | |
| * command_easy: 4, "|", 93795 // = 91 << 10 + 1 + 610 | |
| * command_easy: 4, "|", 94827 // = 92 << 10 + 1 + 618 | |
| * command_easy: 4, "|", 95860 // = 93 << 10 + 1 + 627 | |
| * command_easy: 4, "|", 96894 // = 94 << 10 + 1 + 637 | |
| * command_easy: 4, "|", 97924 // = 95 << 10 + 1 + 643 | |
| * command_easy: 4, "|", 98957 // = 96 << 10 + 1 + 652 | |
| * command_easy: 4, "|", 99988 // = 97 << 10 + 1 + 659 | |
| * command_easy: 4, "|", 101019 // = 98 << 10 + 1 + 666 | |
| * command_easy: 4, "|", 102051 // = 99 << 10 + 1 + 674 | |
| * command_easy: 4, "|", 103081 // = 100 << 10 + 1 + 680 | |
| * command_easy: 4, "|", 104114 // = 101 << 10 + 1 + 689 | |
| * command_easy: 4, "|", 105144 // = 102 << 10 + 1 + 695 | |
| * command_easy: 4, "|", 106175 // = 103 << 10 + 1 + 702 | |
| * command_easy: 4, "|", 107206 // = 104 << 10 + 1 + 709 | |
| * command_easy: 4, "|", 108237 // = 105 << 10 + 1 + 716 | |
| * command_easy: 4, "|", 109268 // = 106 << 10 + 1 + 723 | |
| * command_easy: 4, "|", 110301 // = 107 << 10 + 1 + 732 | |
| * command_easy: 4, "|", 111332 // = 108 << 10 + 1 + 739 | |
| * command_easy: 4, "|", 112363 // = 109 << 10 + 1 + 746 | |
| * command_easy: 4, "|", 113394 // = 110 << 10 + 1 + 753 | |
| * command_easy: 4, "|", 114426 // = 111 << 10 + 1 + 761 | |
| * command_easy: 4, "|", 115458 // = 112 << 10 + 1 + 769 | |
| * command_easy: 4, "|", 116488 // = 113 << 10 + 1 + 775 | |
| * command_easy: 4, "|", 117518 // = 114 << 10 + 1 + 781 | |
| * command_easy: 4, "|", 118549 // = 115 << 10 + 1 + 788 | |
| * command_easy: 4, "|", 119580 // = 116 << 10 + 1 + 795 | |
| * command_easy: 4, "|", 120611 // = 117 << 10 + 1 + 802 | |
| * command_easy: 4, "|", 121643 // = 118 << 10 + 1 + 810 | |
| * command_easy: 4, "|", 122675 // = 119 << 10 + 1 + 818 | |
| * command_easy: 4, "|", 123707 // = 120 << 10 + 1 + 826 | |
| */ | |
| compressed, | |
| true, | |
| '|time|time | time |ime|Time |time the | time|s time |time of |Time|time an' | |
| + 'd |me|tim|, time |time, | Time |time in |time to |e time |time"|time.|ti' | |
| + 'me">|time\n|t|time]|time for |e|ti|time a |time that | Time|time. |.time' | |
| + '| time, ||time with |time\'|time from |time by ||| the time||time. The |' | |
| + 'TIME|time on |time as |time is ||timing |time\n\t|time:| time. |timeed |' | |
| + '|||time(|Time, ||time at |timely | the time of ||| Time, |Time"|.time(|T' | |
| + 'IME |Time">|time="| time.|.com/time| the time of the |Time\'|time. This ' | |
| + '|time,|.time |Time(|Time.|time not | time="|timeer | TIME |timeal | TIME' | |
| + '|time=\'|TIME"|Time. | time(|timeful | Time. |timeive |timeless |TIME' | |
| + '\'|timeest | Time.|TIME">| time=\'|Time,|timeize |TIME.|\xc2\xa0time| ti' | |
| + 'me,|Time="|TIME="|timeous |TIME, |Time=\'| Time,| TIME="| TIME, |TIME,|T' | |
| + 'IME(|TIME. | TIME.|TIME=\'| TIME. | Time="| TIME=\'| Time=\'' | |
| ); | |
| }, | |
| testBaseDictWord() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // The stream consists of a base dictionary word. | |
| * main_header | |
| * metablock_header_easy: 4, 1 | |
| * command_inscopy_easy: 0, 4 | |
| * command_dist_easy: 1 | |
| */ | |
| compressed, | |
| true, | |
| 'time' | |
| ); | |
| }, | |
| testBaseDictWordFinishBlockOnRingbufferWrap() { | |
| const compressed = [ | |
| 0x1b, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x58, 0x32, | |
| 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, | |
| 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, | |
| 0x34, 0x34, 0x34, 0xd4, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 32, 1 // 32 = minimal ringbuffer size | |
| * command_easy: 4, "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 29 | |
| */ | |
| compressed, | |
| true, | |
| times(28, 'a') | |
| + 'time' | |
| ); | |
| }, | |
| testBaseDictWordTooLong() { | |
| const compressed = [ | |
| 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Has an unmodified dictionary word that goes over the end of the | |
| * // meta-block. Same as BaseDictWord, but with a shorter meta-block length. | |
| * main_header | |
| * metablock_header_easy: 1, 1 | |
| * command_inscopy_easy: 0, 4 | |
| * command_dist_easy: 1 | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testBlockCountMessage() { | |
| const compressed = [ | |
| 0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22, | |
| 0x65, 0xe1, 0xfc, 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32, | |
| 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x04, 0x10, 0x42, 0x00, 0x00, | |
| 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Same as BlockSwitchMessage but also uses 0-bit block-type commands. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 12, 0 | |
| * // two literal block types | |
| * vlq_blocktypes: 2 | |
| * huffman_simple: 1,1,4, 1 // literal blocktype prefix code | |
| * huffman_fixed: 26 // literal blockcount prefix code | |
| * blockcount_easy: 2 // 2 a's | |
| * // one ins/copy and dist block type | |
| * vlq_blocktypes: 1 | |
| * vlq_blocktypes: 1 | |
| * ndirect: 0, 0 | |
| * // two MSB6 literal context modes | |
| * bits: "00", "00" | |
| * // two literal prefix codes | |
| * vlq_blocktypes: 2 | |
| * // literal context map | |
| * vlq_rlemax: 5 | |
| * huffman_simple: 0,3,7, 5,0,6 // context map RLE Huffman code | |
| * // context map RLE: repeat 0 64 times, 1+5 64 times | |
| * bits: "01", "0", "11111", "11", "0", "11111" | |
| * bit: 1 // MTF enabled | |
| * // one distance prefix code | |
| * vlq_blocktypes: 1 | |
| * huffman_simple: 0,1,256, 97 // only a's | |
| * huffman_simple: 0,1,256, 98 // only b's | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * // now comes the data | |
| * command_inscopy_easy: 12, 0 | |
| * blockcount_easy: 2 // switch to other block type; 2 b's | |
| * blockcount_easy: 5 // switch to other block type; 5 a's | |
| * blockcount_easy: 1 // switch to other block type; 1 b | |
| * blockcount_easy: 1 // switch to other block type; 1 a | |
| * blockcount_easy: 1 // switch to other block type; 1 b | |
| */ | |
| compressed, | |
| true, | |
| 'aabbaaaaabab' | |
| ); | |
| }, | |
| testBlockSwitchMessage() { | |
| const compressed = [ | |
| 0x1b, 0x0b, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x04, 0x00, | |
| 0x91, 0xb2, 0x70, 0xfe, 0x7e, 0x11, 0x16, 0x62, 0x00, 0x00, 0x1c, 0x6c, | |
| 0x99, 0xc4, 0x00, 0x09, 0x00, 0x80, 0x3b, 0x6d, 0x02, 0x08, 0x82, 0x00, | |
| 0x00, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Uses blocks with 1-symbol Huffman codes that take 0 bits, so that it | |
| * // is the block-switch commands that encode the message rather than actual | |
| * // literals. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 12, 0 | |
| * // two literal block types | |
| * vlq_blocktypes: 2 | |
| * huffman_simple: 1,4,4, 1,0,2,3 // literal blocktype prefix code | |
| * huffman_fixed: 26 // literal blockcount prefix code | |
| * blockcount_easy: 2 // 2 a's | |
| * // one ins/copy and dist block type | |
| * vlq_blocktypes: 1 | |
| * vlq_blocktypes: 1 | |
| * ndirect: 0, 0 | |
| * // two MSB6 literal context modes | |
| * bits: "00", "00" | |
| * // two literal prefix codes | |
| * vlq_blocktypes: 2 | |
| * // literal context map | |
| * vlq_rlemax: 5 | |
| * huffman_simple: 0,3,7, 5,0,6 // context map RLE Huffman code | |
| * // context map RLE: repeat 0 64 times, 1+5 64 times | |
| * bits: "01", "0", "11111", "11", "0", "11111" | |
| * bit: 1 // MTF enabled | |
| * // one distance prefix code | |
| * vlq_blocktypes: 1 | |
| * huffman_simple: 0,1,256, 97 // only a's | |
| * huffman_simple: 0,1,256, 98 // only b's | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * // now comes the data | |
| * command_inscopy_easy: 12, 0 | |
| * bits: "0"; blockcount_easy: 2 // switch to other block type; 2 b's | |
| * bits: "0"; blockcount_easy: 5 // switch to other block type; 5 a's | |
| * bits: "0"; blockcount_easy: 1 // switch to other block type; 1 b | |
| * bits: "0"; blockcount_easy: 1 // switch to other block type; 1 a | |
| * bits: "0"; blockcount_easy: 1 // switch to other block type; 1 b | |
| */ | |
| compressed, | |
| true, | |
| 'aabbaaaaabab' | |
| ); | |
| }, | |
| testClClTreeDeficiency() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x43, 0x01, 0xe0, 0x05, 0x88, | |
| 0x55, 0x90, 0x01, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, | |
| 0x77, 0xda, 0x28, 0x40, 0x23 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // This test is a copy of TooManySymbolsRepeated, with changed clcl table. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * hskip: 0 | |
| * clcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0 | |
| * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "101",\ | |
| * "", "", "", "", "", "", "0", "" | |
| * cl_rle: 8 | |
| * cl_rle_rep: 9, 96 | |
| * cl_rle: 1 | |
| * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 4, 0 | |
| * command_literal_bits: 0, 0, 0, 101100010 | |
| */ | |
| compressed, | |
| false, | |
| 'aaab' | |
| ); | |
| }, | |
| testClClTreeExcess() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x7b, 0x80, 0x58, 0x41, | |
| 0x06, 0x00, 0xe0, 0x60, 0xcb, 0x24, 0x06, 0x48, 0x00, 0x00, 0xdc, 0x69, | |
| 0xa3, 0x00, 0x8d, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // This test is a copy of ClClTreeDeficiency, with changed clcl table. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * hskip: 0 | |
| * clcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0 | |
| * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "1",\ | |
| * "", "", "", "", "", "", "0", "" | |
| * cl_rle: 8 | |
| * cl_rle_rep: 9, 96 | |
| * cl_rle: 1 | |
| * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 4, 0 | |
| * command_literal_bits: 0, 0, 0, 101100010 | |
| */ | |
| compressed, | |
| false, | |
| 'aaab' | |
| ); | |
| }, | |
| testComplexHuffmanCodeTwoSymbols() { | |
| const compressed = [ | |
| 0x1b, 0x01, 0x00, 0x00, 0x80, 0x03, 0xe0, 0xa2, 0x1a, 0x00, 0x00, 0x0e, | |
| 0xb6, 0x4c, 0x62, 0x80, 0x04, 0x00, 0xc0, 0x9d, 0x36, 0x12, 0x04 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // This tests a complex Huffman code with only two symbols followed by a | |
| * // tiny amount of content. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 2, 0 | |
| * metablock_header_trivial_context | |
| * // begin of literal Huffman tree. The tree has symbol length 1 for "a", | |
| * // symbol length 1 for "b" and symbol length 0 for all others. | |
| * hskip: 0 | |
| * clcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 | |
| * set_prefix_cl_rle: "", "0", "", "", "", "", "", "", "", "",\ | |
| * "", "", "", "", "", "", "", "1" | |
| * cl_rle_rep_0: 97 | |
| * cl_rle: 1 // literal number 97, that is, the letter 'a' | |
| * cl_rle: 1 // literal number 98, that is, the letter 'b' | |
| * // end of literal Huffman tree | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 2, 0 | |
| * command_literal_bits: 0, 1 // a followed by b | |
| */ | |
| compressed, | |
| true, | |
| 'ab' | |
| ); | |
| }, | |
| testCompressedUncompressedShortCompressed() { | |
| const compressed = [ | |
| 0x8b, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x66, 0x6f, | |
| 0x1b, 0x0a, 0x50, 0x00, 0x10, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31, | |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, | |
| 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header: 22 | |
| * metablock_header_easy: 1022, 0 | |
| * command_easy: 1021, "a", 1 // 1022 x "a" | |
| * metablock_uncompressed: "bbbbbb" | |
| * metablock_header_easy: 4, 1 | |
| * command_easy: 4, "", 1 // 6 + 4 = 10 x "b" | |
| */ | |
| compressed, | |
| true, | |
| times(1022, 'a') | |
| + times(10, 'b') | |
| ); | |
| }, | |
| testCompressedUncompressedShortCompressedSmallWindow() { | |
| const compressed = [ | |
| 0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, | |
| 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b, | |
| 0xdb, 0x50, 0x80, 0x02, 0x80, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31, | |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, | |
| 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header: 10 | |
| * metablock_header_easy: 1022, 0 | |
| * command_easy: 1021, "a", 1 // 1022 x "a" | |
| * metablock_uncompressed: "bbbbbb" | |
| * metablock_header_easy: 4, 1 | |
| * command_easy: 4, "", 1 // 6 + 4 = 10 x "b" | |
| */ | |
| compressed, | |
| true, | |
| times(1022, 'a') | |
| + times(10, 'b') | |
| ); | |
| }, | |
| testCopyLengthTooLong() { | |
| const compressed = [ | |
| 0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86, | |
| 0x02 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Has a copy length that goes over the end of the meta-block. | |
| * // Same as OneCommand, but with a shorter meta-block length. | |
| * main_header | |
| * metablock_header_easy: 2, 1 | |
| * command_easy: 2, "a", 1 | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testCopyTooLong() { | |
| const compressed = [ | |
| 0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, | |
| 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0xab, | |
| 0xdb, 0x50, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Has a copy length that goes over the end of the meta-block, | |
| * // with a ringbuffer wrap. | |
| * main_header: 10 | |
| * metablock_header_easy: 2, 1 | |
| * command_easy: 1024, "a", 1 | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testCustomHuffmanCode() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82, | |
| 0x08, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3, | |
| 0x46, 0x01, 0x1a, 0x01 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // This tests a small hand crafted Huffman code followed by a tiny amount | |
| * // of content. This tests if the bit reader detects the end correctly even | |
| * // with tiny content after a larger Huffman tree encoding. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * // begin of literal Huffman tree. The tree has symbol length 1 for "a", | |
| * // symbol length 8 for null, symbol length 9 for all others. The length 1 | |
| * // for a is chosen on purpose here, the others must be like that to | |
| * // fulfill the requirement that sum of 32>>length is 32768. | |
| * hskip: 0 | |
| * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0 | |
| * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "10",\ | |
| * "", "", "", "", "", "", "0", "" | |
| * cl_rle: 8 | |
| * cl_rle_rep: 9, 96 | |
| * cl_rle: 1 // literal number 97, that is, the letter 'a' | |
| * cl_rle_rep: 9, 158 | |
| * // end of literal Huffman tree | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 4, 0 | |
| * // Here is how the code "101100010" for b is derived: remember that a has | |
| * // symbol length 1, null has symbol length 8, the rest 9. So in the | |
| * // canonical Huffman code, the code for "a" is "0", for null is | |
| * // "10000000". The next value has "100000010" (cfr. the rules of canonical | |
| * // prefix code). Counting upwards +95 from there, the value "@" (ASCII 96, | |
| * // before "a") has "101100001", and so b, the next 9-bit symbol, has the | |
| * // next binary value "101100010". | |
| * command_literal_bits: 0, 0, 0, 101100010 // 3 a's followed by a b | |
| */ | |
| compressed, | |
| true, | |
| 'aaab' | |
| ); | |
| }, | |
| testDistanceLut() { | |
| const compressed = [ | |
| 0x8b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x99, 0x86, | |
| 0x46, 0xc6, 0x22, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0xa7, 0x6d, | |
| 0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x21, 0x91, 0x69, 0x62, | |
| 0x6a, 0x36 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 6, 0 // implicit ndirect: 0, 0 | |
| * command_easy: 3, "abc", 3 // Insert "abc", copy "abc" | |
| * metablock_header_begin: 0, 0, 6, 0 | |
| * vlq_blocktypes: 1 // num litetal block types | |
| * vlq_blocktypes: 1 // num command block types | |
| * vlq_blocktypes: 1 // num distance block types | |
| * ndirect: 3, 0 | |
| * bits: "00" // literal context modes | |
| * vlq_blocktypes: 1 // num literal Huffman trees | |
| * // command has no context -> num trees == num block types | |
| * vlq_blocktypes: 1 // num distance Huffman trees | |
| * huffman_fixed: 256 | |
| * huffman_fixed: 704 | |
| * huffman_simple: 0,1,67, 18 | |
| * command_inscopy_easy: 3, 3 // Insert 3, copy 3 | |
| * command_literals_easy: "def" | |
| * // 0-bit Huffman code : dcode = 18 -> third direct distance | |
| * metablock_lastempty // make sure that no extra distance bits are read | |
| */ | |
| compressed, | |
| true, | |
| 'abcabcdefdef' | |
| ); | |
| }, | |
| testEmpty() { | |
| const compressed = [ | |
| 0x3b | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_lastempty | |
| */ | |
| compressed, | |
| true, | |
| '' | |
| ); | |
| }, | |
| testHelloWorld() { | |
| const compressed = [ | |
| 0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x59, | |
| 0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_fixed: "hello world", 1 | |
| */ | |
| compressed, | |
| true, | |
| 'hello world' | |
| ); | |
| }, | |
| testInsertTooLong() { | |
| const compressed = [ | |
| 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86, | |
| 0x46 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Has an insert length that goes over the end of the meta-block. | |
| * // Same as OneInsert, but with a shorter meta-block length. | |
| * main_header | |
| * metablock_header_easy: 1, 1 | |
| * command_easy: 0, "ab" | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testIntactDistanceRingBuffer0() { | |
| const compressed = [ | |
| 0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80, | |
| 0x20, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 11, 1 | |
| * command_inscopy_easy: 0, 7 // "himself" from dictionary | |
| * bits: "000000" // distance = 4 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // copy "self" | |
| * bits: "000000" // distance = 4 from RB; RB remains intact | |
| */ | |
| compressed, | |
| true, | |
| 'himselfself' | |
| ); | |
| }, | |
| testIntactDistanceRingBuffer1() { | |
| const compressed = [ | |
| 0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x21, 0xa0, | |
| 0x20, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 10, 1 | |
| * command_inscopy_easy: 0, 6 // "scroll" from dictionary | |
| * bits: "100000" // distance = 11 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // copy "roll" | |
| * bits: "000000" // distance = 4 from RB; RB remains intact | |
| */ | |
| compressed, | |
| true, | |
| 'scrollroll' | |
| ); | |
| }, | |
| testIntactDistanceRingBuffer2() { | |
| const compressed = [ | |
| 0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x80, | |
| 0x20, 0x50, 0x10, 0x24, 0x08, 0x06 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 16, 1 | |
| * command_inscopy_easy: 0, 4 // "left" from dictionary (index = 3 = 4 - 1) | |
| * bits: "000000" // distance = 4 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 11 - 5) | |
| * bits: "100000" // distance = 11 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 15 - 9) | |
| * bits: "010000" // distance = 15 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // "left" from dictionary (index = 3 = 16 - 13) | |
| * bits: "110000" // distance = 16 from RB; RB remains intact | |
| */ | |
| compressed, | |
| true, | |
| 'leftdatadataleft' | |
| ); | |
| }, | |
| testIntactDistanceRingBufferNoDistanceValue0() { | |
| const compressed = [ | |
| 0x1b, 0x17, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x40, 0x82, | |
| 0x40, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 24, 1 | |
| * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off} | |
| * // cmd.2 = {0x00, 0x00, 0, 0x02, 0x0000, 0x0004} | |
| * // cmd.2 = no insert, copy length = 4, distance_code = 0 (last distance) | |
| * command_short: 2 // "left" from dictionary (index = 3 = 4 - 1) | |
| * // Check that RB is untouched after the first command... | |
| * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 11 - 5) | |
| * bits: "100000" // distance = 11 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // "data" from dictionary (index = 6 = 15 - 9) | |
| * bits: "010000" // distance = 15 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // "left" from dictionary (index = 3 = 16 - 13) | |
| * bits: "110000" // distance = 16 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 8 // copy "leftleft" | |
| * bits: "000000" // distance = 4 from RB; RB remains intact | |
| */ | |
| compressed, | |
| true, | |
| 'leftdatadataleftleftleft' | |
| ); | |
| }, | |
| testIntactDistanceRingBufferNoDistanceValue1() { | |
| const compressed = [ | |
| 0x1b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xc0, 0x82, | |
| 0x41, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 26, 1 | |
| * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off} | |
| * // cmd.3 = {0x00, 0x00, 0, 0x03, 0x0000, 0x0005} | |
| * // cmd.3 = no insert, copy length = 5, distance_code = 0 (last distance) | |
| * command_short: 3 // "world" from dictionary (index = 3 = 4 - 1) | |
| * // Check that RB is untouched after the first command... | |
| * command_inscopy_easy: 0, 5 // "white" from dictionary (index = 5 = 11 - 6) | |
| * bits: "100000" // distance = 11 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // "back" from dictionary (index = 4 = 15 - 11) | |
| * bits: "010000" // distance = 15 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 4 // "down" from dictionary (index = 1 = 16 - 15) | |
| * bits: "110000" // distance = 16 from RB; RB remains intact | |
| * command_inscopy_easy: 0, 8 // copy "downdown" | |
| * bits: "000000" // distance = 4 from RB; RB remains intact | |
| */ | |
| compressed, | |
| true, | |
| 'worldwhitebackdowndowndown' | |
| ); | |
| }, | |
| testInvalidNoLastMetablock() { | |
| const compressed = [ | |
| 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x13, | |
| 0x59, 0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0xe8, | |
| 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_fixed: \"hello world\", 0 | |
| */ | |
| compressed, | |
| false, | |
| 'hello world' | |
| ); | |
| }, | |
| testInvalidNoMetaBlocks() { | |
| const compressed = [ | |
| 0x0b | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testInvalidTooFarDist() { | |
| const compressed = [ | |
| 0xa1, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, | |
| 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xe8, 0xe0, | |
| 0x62, 0x6f, 0x4f, 0x60, 0x66, 0xe8, 0x44, 0x38, 0x0f, 0x09, 0x0d | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header: 10 | |
| * metablock_header_begin: 1, 0, 10, 0 | |
| * metablock_header_trivial_context | |
| * huffman_fixed: 256 | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_easy: 2, "too far!", 1000000 // distance too far for 10 wbits | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testInvalidTooLargeContextMap() { | |
| const compressed = [ | |
| 0x1b, 0x00, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x00, 0x00, | |
| 0x91, 0xb2, 0x70, 0xfe, 0xfb, 0x45, 0x58, 0x88, 0x01, 0x00, 0x70, 0xb0, | |
| 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x01 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Has a repeat code a context map that makes the size too big -> invalid. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 1, 0 | |
| * // two literal block types | |
| * vlq_blocktypes: 2 | |
| * huffman_simple: 1,4,4, 1,0,2,3 // literal blocktype prefix code | |
| * huffman_fixed: 26 // literal blockcount prefix code | |
| * blockcount_easy: 1 | |
| * // one ins/copy and dist block type | |
| * vlq_blocktypes: 1 | |
| * vlq_blocktypes: 1 | |
| * ndirect: 0, 0 | |
| * // two MSB6 literal context modes | |
| * bits: "00", "00" | |
| * // two literal prefix codes | |
| * vlq_blocktypes: 2 | |
| * // literal context map | |
| * vlq_rlemax: 5 | |
| * huffman_simple: 0,3,7, 5,0,6 // context map RLE Huffman code | |
| * // Too long context map RLE: repeat 0 64 times, 1+5 65 times, that is 129 | |
| * // values which is 1 too much. | |
| * bits: "01", "0", "11111", "11", "11", "0", "11111" | |
| * bit: 1 // MTF enabled | |
| * // one distance prefix code | |
| * vlq_blocktypes: 1 | |
| * huffman_simple: 0,1,256, 97 // only a's | |
| * huffman_simple: 0,1,256, 98 // only b's | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * // now comes the data | |
| * command_inscopy_easy: 1, 0 | |
| */ | |
| compressed, | |
| false, | |
| 'a' | |
| ); | |
| }, | |
| testInvalidTransformType() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x2d, | |
| 0x01, 0x19 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 4, 1 | |
| * command_inscopy_easy: 0, 4 | |
| * command_dist_easy: 123905 // = 121 << 10 + 1 | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testInvalidWindowBits9() { | |
| const compressed = [ | |
| 0x91, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00, | |
| 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xc8, 0x20, | |
| 0x32, 0xd4, 0x01 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header: 9 | |
| * metablock_fixed: \"a\", 1 | |
| */ | |
| compressed, | |
| false, | |
| 'a' | |
| ); | |
| }, | |
| testManyTinyMetablocks() { | |
| const compressed = [ | |
| 0x0b, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, | |
| 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, | |
| 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, | |
| 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, | |
| 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, | |
| 0x34 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * repeat: 300 | |
| * metablock_uncompressed: "a" | |
| * metablock_fixed: "b" | |
| * end_repeat | |
| * metablock_lastempty | |
| */ | |
| compressed, | |
| true, | |
| times(300, 'ab') | |
| ); | |
| }, | |
| testNegativeDistance() { | |
| const compressed = [ | |
| 0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02, | |
| 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x1c | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 16, 1 | |
| * command_inscopy_easy: 0, 4 // time | |
| * command_dist_easy: 1 | |
| * command_inscopy_easy: 0, 2 // me | |
| * command_dist_easy: 2 | |
| * command_inscopy_easy: 0, 2 // me | |
| * command_dist_easy: 2 | |
| * command_inscopy_easy: 0, 2 // me | |
| * command_dist_easy: 2 | |
| * command_inscopy_easy: 0, 2 // me | |
| * command_dist_easy: 2 | |
| * command_inscopy_easy: 0, 2 // me | |
| * command_dist_easy: 2 // All rb items are 2 now | |
| * command_inscopy_easy: 0, 2 | |
| * bits: "011100" // 15 -> distance = rb[idx + 2] - 3 | |
| */ | |
| compressed, | |
| false, | |
| 'timemememememeXX' | |
| ); | |
| }, | |
| testNegativeRemainingLenBetweenMetablocks() { | |
| const compressed = [ | |
| 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86, | |
| 0x46, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, | |
| 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x60, | |
| 0x68, 0x04 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_easy: 1, 0 | |
| * command_easy: 0, "ab" // remaining length == -1 -> invalid stream | |
| * metablock_header_easy: 2, 1 | |
| * command_easy: 0, "ab" | |
| */ | |
| compressed, | |
| false, | |
| 'abab' | |
| ); | |
| }, | |
| testOneCommand() { | |
| const compressed = [ | |
| 0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86, | |
| 0x02 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // The stream consists of one command with insert and copy. | |
| * main_header | |
| * metablock_header_easy: 3, 1 | |
| * command_easy: 2, "a", 1 | |
| */ | |
| compressed, | |
| true, | |
| 'aaa' | |
| ); | |
| }, | |
| testOneInsert() { | |
| const compressed = [ | |
| 0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86, | |
| 0x46 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // The stream consists of one half command with insert only. | |
| * main_header | |
| * metablock_header_easy: 2, 1 | |
| * command_easy: 0, "ab" | |
| */ | |
| compressed, | |
| true, | |
| 'ab' | |
| ); | |
| }, | |
| testPeculiarWrap() { | |
| const compressed = [ | |
| 0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00, | |
| 0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, | |
| 0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header: 10 | |
| * // See ZeroCostCommand | |
| * metablock_header_begin: 0, 0, 2048, 0 | |
| * metablock_header_trivial_context | |
| * huffman_simple: 0,1,256, 42 | |
| * huffman_simple: 0,1,704, 130 | |
| * huffman_simple: 0,1,64, 0 | |
| * // Metadata block; at least 8 bytes long | |
| * bits: "0", "11", "0", "01", "00000111" | |
| * byte_boundary | |
| * bits: "11001010", "11111110", "10111010", "10111110" | |
| * bits: "11011110", "10101101", "10111110", "11101111" | |
| * metablock_header_easy: 3, 1 | |
| * command_easy: 0, "abc", 0 | |
| */ | |
| compressed, | |
| true, | |
| times(512, 'left') | |
| + 'abc' | |
| ); | |
| }, | |
| testSimplePrefix() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70, | |
| 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * huffman_simple: 1,4,256, 97,98,99,100 // ASCII codes for a, b, c, d | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 4, 0 | |
| * command_literal_bits: 0, 10, 110, 111 // a, b, c, d | |
| */ | |
| compressed, | |
| true, | |
| 'abcd' | |
| ); | |
| }, | |
| testSimplePrefixDuplicateSymbols() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc2, 0xc4, 0x02, 0x00, 0x70, | |
| 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * huffman_simple: 1,4,256, 97,98,97,98 // ASCII codes for a, b, a, b | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 4, 0 | |
| * command_literal_bits: 0, 10, 110, 111 // a, b, a, b | |
| */ | |
| compressed, | |
| false, | |
| 'abab' | |
| ); | |
| }, | |
| testSimplePrefixOutOfRangeSymbols() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x4d, 0xff, 0xef, | |
| 0x7f, 0xff, 0xfc, 0x07, 0x00, 0xb8, 0xd3, 0x06 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * huffman_fixed: 256 | |
| * huffman_simple: 1,4,704, 1023,1022,1021,1020 | |
| * huffman_fixed: 64 | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testSimplePrefixPlusExtraData() { | |
| if (pending) pending(); else return; | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70, | |
| 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d, | |
| 0x55, 0xaa | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * huffman_simple: 1,4,256, 97,98,99,100 // ASCII codes for a, b, c, d | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 4, 0 | |
| * command_literal_bits: 0, 10, 110, 111 // a, b, c, d | |
| * byte_boundary | |
| * bits: "01010101", "10101010" | |
| */ | |
| compressed, | |
| true, | |
| 'abcd' | |
| ); | |
| }, | |
| testStressReadDistanceExtraBits() { | |
| const compressed = [ | |
| 0x4f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, | |
| 0x00, 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0xf6, | |
| 0x69, 0xef, 0xff, 0x0c, 0x8d, 0x8c, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, | |
| 0xa8, 0xaa, 0xef, 0xab, 0xaa, 0x7f, 0x24, 0x16, 0x35, 0x8f, 0xac, 0x9e, | |
| 0x3d, 0xf7, 0xf3, 0xe3, 0x0a, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x78, 0x01, | |
| 0x08, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, | |
| 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, | |
| 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, | |
| 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, | |
| 0x46, 0x03 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header: 24 | |
| * metablock_header_easy: 8388605, 0 // 2^23 - 3 = shortest 22-bit distance | |
| * command_easy: 8388602, "abc", 1 | |
| * metablock_header_begin: 0, 0, 3, 0 | |
| * vlq_blocktypes: 1 // num litetal block types | |
| * vlq_blocktypes: 1 // num command block types | |
| * vlq_blocktypes: 1 // num distance block types | |
| * ndirect: 0, 0 | |
| * bits: "00" // literal context modes | |
| * vlq_blocktypes: 1 // num literal Huffman trees | |
| * // command has no context -> num trees == num block types | |
| * vlq_blocktypes: 1 // num distance Huffman trees | |
| * huffman_fixed: 256 | |
| * huffman_fixed: 704 | |
| * // Begin of distance Huffman tree. First 15 codes have lengths 1 to 15. | |
| * // Symbol that corresponds to first half of 22-bit distance range is also | |
| * // 15. All other symbols are 0. | |
| * hskip: 0 | |
| * clcl_ordered: 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4, 5,5,5,5 | |
| * set_prefix_cl_rle: "0000", "0001", "0010", "0011", \ | |
| * "0100", "0101", "0110", "0111", \ | |
| * "1000", "1001", "1010", "1011", \ | |
| * "1100", "1101", \ | |
| * "11100", "11101", "11110", "11111" | |
| * cl_rle: 1 | |
| * cl_rle: 2 | |
| * cl_rle: 3 | |
| * cl_rle: 4 | |
| * cl_rle: 5 | |
| * cl_rle: 6 | |
| * cl_rle: 7 | |
| * cl_rle: 8 | |
| * cl_rle: 9 | |
| * cl_rle: 10 | |
| * cl_rle: 11 | |
| * cl_rle: 12 | |
| * cl_rle: 13 | |
| * cl_rle: 14 | |
| * cl_rle: 15 | |
| * cl_rle_rep_0: 43 | |
| * cl_rle: 15 // literal number 97, that is, the letter 'a' | |
| * // end of literal Huffman tree | |
| * command_inscopy_easy: 0, 3 // Insert 0, copy 3 | |
| * // 15 bits of distance code plus 22 extra bits | |
| * command_dist_bits: "111111111111111", "0000000000000000000000" | |
| * metablock_uncompressed: "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" | |
| * metablock_lastempty | |
| */ | |
| compressed, | |
| true, | |
| 'abc' | |
| + times(8388602, 'c') | |
| + 'abc' | |
| + times(3, '0123456789ABCDEF') | |
| ); | |
| }, | |
| testTooManySymbolsRepeated() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82, | |
| 0x0c, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3, | |
| 0x46, 0x01, 0x1a, 0x01 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // This test is a copy of CustomHuffmanCode, with changed repeat count. | |
| * main_header | |
| * metablock_header_begin: 1, 0, 4, 0 | |
| * metablock_header_trivial_context | |
| * hskip: 0 | |
| * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0 | |
| * set_prefix_cl_rle: "", "110", "", "", "", "", "", "", "111", "10",\ | |
| * "", "", "", "", "", "", "0", "" | |
| * cl_rle: 8 | |
| * cl_rle_rep: 9, 96 | |
| * cl_rle: 1 | |
| * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 4, 0 | |
| * command_literal_bits: 0, 0, 0, 101100010 | |
| */ | |
| compressed, | |
| false, | |
| 'aaab' | |
| ); | |
| }, | |
| testTransformedDictWord() { | |
| const compressed = [ | |
| 0x1b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09, | |
| 0x01, 0x01 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // The stream consists of a transformed dictionary word. | |
| * main_header | |
| * metablock_header_easy: 9, 1 | |
| * command_inscopy_easy: 0, 4 | |
| * command_dist_easy: 5121 // 5 << 10 + 1 | |
| */ | |
| compressed, | |
| true, | |
| 'time the ' | |
| ); | |
| }, | |
| testTransformedDictWordTooLong() { | |
| const compressed = [ | |
| 0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00, | |
| 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09, | |
| 0x01, 0x01 | |
| ]; | |
| checkSynth( | |
| /* | |
| * // Has a transformed dictionary word that goes over the end of the | |
| * // meta-block, but the base dictionary word fits in the meta-block. | |
| * // Same as TransformedDictWord, but with a shorter meta-block length. | |
| * main_header | |
| * metablock_header_easy: 4, 1 | |
| * command_inscopy_easy: 0, 4 | |
| * command_dist_easy: 5121 // 5 << 10 + 1 | |
| */ | |
| compressed, | |
| false, | |
| '' | |
| ); | |
| }, | |
| testZeroCostCommand() { | |
| const compressed = [ | |
| 0xa1, 0xf8, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x00 | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header: 10 | |
| * metablock_header_begin: 1, 0, 1024, 0 // last, not empty, length, compressed | |
| * metablock_header_trivial_context | |
| * huffman_simple: 0,1,256, 42 // literal: any | |
| * huffman_simple: 0,1,704, 130 // command: insert = 0, copy = 4, distance_code = -1 | |
| * huffman_simple: 0,1,64, 0 // distance: last | |
| * // 256 0-bit commands with direct distances | |
| */ | |
| compressed, | |
| true, | |
| times(256, 'left') | |
| ); | |
| }, | |
| testZeroCostLiterals() { | |
| const compressed = [ | |
| 0x9b, 0xff, 0xff, 0xff, 0x00, 0x20, 0x54, 0x00, 0x00, 0x38, 0xd8, 0x32, | |
| 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xcc, 0xe1, 0x7b, 0xfa, 0x0f | |
| ]; | |
| checkSynth( | |
| /* | |
| * main_header | |
| * metablock_header_begin: 1, 0, 16777216, 0 | |
| * metablock_header_trivial_context | |
| * huffman_simple: 0,1,256, 42 // Single symbol alphabet | |
| * huffman_fixed: 704 | |
| * huffman_fixed: 64 | |
| * command_inscopy_easy: 16777216, 0 | |
| * // 16777216 times 0 bits | |
| */ | |
| compressed, | |
| true, | |
| times(16777216, '*') | |
| ); | |
| }, | |
| /* GENERATED CODE END */ | |
| }; | |
| describe("DecodeSynthTest", () => { | |
| const testNames = Object.keys(allTests); | |
| for (let i = 0; i < testNames.length; ++i) { | |
| const key = testNames[i]; | |
| const testName = key.replace(/\$/g, ''); | |
| it(testName, allTests[key]); | |
| } | |
| }); |