• R/O
  • HTTP
  • SSH
  • HTTPS

mhash384: Commit

MHash-384 development repository


Commit MetaInfo

Revisiona672daba325562ea2a8924c64cc258149e1ed717 (tree)
Time2020-02-01 22:09:50
AuthorLoRd_MuldeR <mulder2@gmx....>
CommiterLoRd_MuldeR

Log Message

Added improved "ADD" table + slightly improved mhash384_final() function + updated test vectors.

Change Summary

Incremental Difference

Binary files /dev/null and b/etc/bin/table_ADD.182.bin differ
--- /dev/null
+++ b/etc/bin/table_ADD.182.bin.sha256
@@ -0,0 +1 @@
1+ca9f89a8eac2ed788748f1b3e55522bb0a0874273b873c18472e400e6c462d45 *table_ADD.182.bin
Binary files /dev/null and b/etc/bin/table_XOR.182.bin differ
--- /dev/null
+++ b/etc/bin/table_XOR.182.bin.sha256
@@ -0,0 +1 @@
1+50deb2d959ebd916a6aa71282f1ea4f83670ceea574d6e0a5e79f0a95ab284d2 *table_XOR.182.bin
--- a/frontend/src/self_test.cpp
+++ b/frontend/src/self_test.cpp
@@ -64,18 +64,18 @@ static const test_case_t SELFTEST_INPUT[] =
6464 */
6565 static const uint8_t SELFTEST_EXPECTED[][MHASH384_SIZE] =
6666 {
67- { 0xD6, 0x29, 0xCB, 0x37, 0xF7, 0x61, 0x56, 0x62, 0x1E, 0x09, 0xC9, 0x3B, 0x8D, 0x10, 0x29, 0xC5, 0xF0, 0xF7, 0xB7, 0x78, 0xDE, 0x5B, 0xD9, 0x57, 0x82, 0x30, 0x67, 0x3F, 0xE7, 0xFA, 0x4C, 0x45, 0xA2, 0x30, 0x8A, 0xB4, 0xE9, 0xD9, 0x9A, 0xA0, 0xEA, 0x19, 0x4C, 0xBF, 0x62, 0x30, 0xC2, 0x02 },
68- { 0x1D, 0x7B, 0x15, 0x93, 0xD7, 0xAA, 0x4D, 0xD7, 0xDC, 0x8D, 0xA6, 0xD6, 0xBD, 0x59, 0x1D, 0x8B, 0x50, 0x7C, 0xA5, 0x14, 0xE1, 0xC7, 0xEC, 0x37, 0xF4, 0x3E, 0x78, 0xDD, 0x6B, 0x83, 0x25, 0x3C, 0x35, 0x54, 0x03, 0xF6, 0x10, 0x09, 0x58, 0x28, 0x90, 0x48, 0x0C, 0x4C, 0xD5, 0x27, 0xF4, 0x05 },
69- { 0x9B, 0x98, 0xCE, 0x4C, 0x3F, 0x4E, 0xA9, 0x01, 0x8E, 0x1E, 0xD3, 0x03, 0x47, 0x17, 0xE3, 0xE5, 0xD8, 0xDA, 0x20, 0xAB, 0x37, 0x5B, 0xAF, 0xE3, 0x72, 0xD0, 0x77, 0x80, 0xFF, 0xDE, 0xFD, 0xA3, 0x2B, 0xA3, 0xC8, 0x22, 0x15, 0x5E, 0x28, 0x83, 0xE3, 0x33, 0xAF, 0xCA, 0xAE, 0xAF, 0xA6, 0x14 },
70- { 0x45, 0x41, 0x6D, 0x1F, 0xFD, 0x44, 0xD3, 0x94, 0x0C, 0x5A, 0xF5, 0xB4, 0x25, 0xB5, 0xDA, 0x07, 0xFD, 0x8C, 0x06, 0xBA, 0xB7, 0xC5, 0x8C, 0xD1, 0x33, 0x89, 0xBC, 0x28, 0x46, 0x50, 0xED, 0x60, 0x90, 0xA9, 0xA1, 0x95, 0x2C, 0x29, 0xFE, 0xB1, 0xB2, 0xC6, 0xAF, 0xBF, 0x5F, 0x99, 0x61, 0x08 },
71- { 0x20, 0x77, 0x4C, 0x57, 0x0A, 0xE2, 0xE6, 0xA4, 0x9A, 0x01, 0xDA, 0xE9, 0x48, 0x67, 0x2A, 0xE9, 0x4D, 0x46, 0x5D, 0x91, 0x67, 0x13, 0x0F, 0xE8, 0x7B, 0xF2, 0x41, 0x48, 0x64, 0x9C, 0xF1, 0x21, 0xE8, 0xA5, 0x07, 0x59, 0x50, 0x7B, 0xF9, 0x71, 0x34, 0xF0, 0xD2, 0x8C, 0xEE, 0x91, 0xDC, 0xA2 },
72- { 0xC1, 0x88, 0x43, 0xD4, 0xDD, 0x9E, 0x04, 0x79, 0xD3, 0x8A, 0x55, 0xE8, 0xC7, 0x5E, 0x22, 0x01, 0xF0, 0xE9, 0x3B, 0x6E, 0xF1, 0xF9, 0x16, 0xEB, 0xAF, 0x3C, 0x40, 0x74, 0xD1, 0x88, 0x94, 0x5C, 0x7B, 0x96, 0x57, 0xF4, 0x52, 0x69, 0xA1, 0xDA, 0xAB, 0x4A, 0x8F, 0xB6, 0xF6, 0x3D, 0x0B, 0xEE },
73- { 0xE2, 0x90, 0x1E, 0xDB, 0x76, 0xAA, 0x83, 0xF2, 0xD5, 0x2F, 0xEA, 0x9A, 0x34, 0xEB, 0x2B, 0xC0, 0x5E, 0xDF, 0xA9, 0x57, 0x1C, 0x81, 0x26, 0x20, 0x24, 0x5B, 0xBE, 0xBA, 0x95, 0xFA, 0x2D, 0x82, 0xCB, 0xB5, 0xBA, 0xD9, 0x3E, 0xB6, 0x4D, 0x4B, 0x72, 0xB4, 0x66, 0x35, 0xD5, 0x65, 0x40, 0x0B },
74- { 0x8B, 0x81, 0xCD, 0x9C, 0x1D, 0xEE, 0x8B, 0xCC, 0x64, 0x2F, 0x8B, 0x1E, 0xA9, 0x82, 0xCE, 0x79, 0xD1, 0x5F, 0x50, 0xE6, 0x69, 0x39, 0xFF, 0x34, 0x29, 0x4E, 0x63, 0xD9, 0x3A, 0xE3, 0xC6, 0x10, 0xF9, 0x46, 0x4F, 0xEF, 0xEF, 0x30, 0x29, 0x74, 0x09, 0xB6, 0x22, 0x31, 0xF0, 0x28, 0xAB, 0xC0 },
75- { 0xA5, 0x45, 0xE6, 0x31, 0x9F, 0x6A, 0xCE, 0x0C, 0xEF, 0x62, 0xBC, 0xAA, 0xF5, 0xD4, 0x88, 0x85, 0x87, 0x51, 0xB9, 0x6C, 0x2A, 0x48, 0x8D, 0x5B, 0xE6, 0xEC, 0x63, 0xD5, 0x00, 0x06, 0xC9, 0xD5, 0x4D, 0xAD, 0x66, 0x16, 0x84, 0x88, 0xF0, 0x3B, 0x4A, 0x86, 0x8D, 0x3B, 0xA6, 0x10, 0xCC, 0xF8 },
76- { 0x2B, 0xEC, 0xB8, 0x9D, 0xD5, 0x5F, 0xC9, 0xF2, 0xF3, 0x38, 0x4D, 0xF6, 0x1D, 0x62, 0x40, 0xDD, 0xA5, 0x4F, 0xC2, 0x75, 0xD1, 0x86, 0xA4, 0x5A, 0x88, 0x3C, 0x03, 0xAA, 0x87, 0x3D, 0xDA, 0xF4, 0xFA, 0xD4, 0x74, 0x42, 0x12, 0xB9, 0x2D, 0x26, 0x05, 0x4B, 0x92, 0x85, 0x2D, 0xEA, 0x5F, 0x1D },
77- { 0x62, 0x83, 0xCE, 0x91, 0xDA, 0x8A, 0xF5, 0x09, 0x1C, 0x7B, 0x06, 0xE1, 0x35, 0x2D, 0xC9, 0x47, 0xB9, 0xE3, 0xB8, 0x96, 0x14, 0x80, 0x7C, 0x04, 0xC4, 0x3D, 0xA3, 0x22, 0x32, 0x1F, 0xBA, 0xDA, 0xD3, 0xCC, 0xCA, 0xBE, 0xCB, 0x5C, 0x1B, 0x1B, 0x26, 0x54, 0x32, 0xA6, 0x03, 0x91, 0x21, 0xE1 },
78- { 0x5D, 0xCB, 0x7C, 0x4B, 0x27, 0xBA, 0x84, 0x16, 0x88, 0xFB, 0x6A, 0x86, 0x0E, 0x97, 0xA4, 0x52, 0x56, 0x91, 0x75, 0x33, 0xF6, 0x34, 0x48, 0xCF, 0x66, 0x67, 0x81, 0xEA, 0x4B, 0x5F, 0xAB, 0x20, 0xE1, 0xC7, 0x46, 0xC8, 0x82, 0x10, 0x99, 0xA9, 0x15, 0x22, 0x2E, 0x0D, 0x77, 0x62, 0x40, 0x98 }
67+ { 0x4C, 0x4B, 0x82, 0xD0, 0x7B, 0x36, 0x8E, 0x1C, 0x22, 0xD0, 0xDE, 0x37, 0x59, 0xC3, 0x2D, 0x44, 0xDA, 0x71, 0xBE, 0x62, 0x83, 0xE8, 0x55, 0x0A, 0x24, 0x68, 0xDC, 0x1F, 0xEC, 0x38, 0x91, 0x9F, 0x7E, 0xDB, 0x6C, 0x1B, 0xA0, 0x83, 0x78, 0xEC, 0x58, 0x3A, 0xE6, 0x12, 0xAB, 0x0E, 0x02, 0xBA },
68+ { 0x91, 0x71, 0xD8, 0x3E, 0xE7, 0xDE, 0xDE, 0x36, 0xCA, 0xF2, 0x7C, 0x26, 0x44, 0x89, 0x7F, 0x31, 0x14, 0xA0, 0xF6, 0x7B, 0x6E, 0x91, 0x93, 0xAA, 0x1A, 0xB2, 0x34, 0x62, 0xEA, 0x81, 0x5E, 0xDE, 0xA5, 0x35, 0x00, 0x26, 0x71, 0xE0, 0x86, 0x49, 0x3B, 0x41, 0xA5, 0x28, 0xA2, 0x6F, 0xD8, 0xB3 },
69+ { 0x29, 0x0B, 0xD2, 0x16, 0x2C, 0x21, 0x05, 0xA0, 0x82, 0x41, 0x72, 0xA8, 0x87, 0x5E, 0xE3, 0x3B, 0xB6, 0x5A, 0x98, 0xDC, 0x09, 0x28, 0x10, 0x04, 0x41, 0xB4, 0x1B, 0x93, 0x99, 0xF6, 0xA8, 0xEA, 0x09, 0x79, 0x48, 0x34, 0x50, 0x4A, 0x3E, 0x81, 0x7D, 0x49, 0xD2, 0x9B, 0xC2, 0x0A, 0x52, 0x0A },
70+ { 0x0B, 0x3F, 0x13, 0xA6, 0x8A, 0xA8, 0xD8, 0xF0, 0xC5, 0xB9, 0xBF, 0x8B, 0xE5, 0xAE, 0xCC, 0xB7, 0x3E, 0x0D, 0x13, 0x73, 0x2C, 0x92, 0x90, 0x00, 0x6B, 0x6D, 0xC9, 0x39, 0xAD, 0xA7, 0x9C, 0x48, 0xAE, 0x36, 0x2E, 0x54, 0x5A, 0x06, 0x7D, 0x2C, 0x1F, 0xB0, 0x74, 0x9C, 0x60, 0xA4, 0x92, 0x43 },
71+ { 0x56, 0x22, 0x8E, 0x94, 0x32, 0x47, 0x1B, 0x09, 0xA7, 0xF6, 0x96, 0xD0, 0xDE, 0xFA, 0x15, 0xE6, 0x64, 0xD3, 0xE7, 0xAC, 0xD2, 0x7E, 0x2D, 0x39, 0xF8, 0x64, 0xC0, 0x50, 0x06, 0xF1, 0xF7, 0x70, 0x12, 0xF4, 0xF4, 0xCC, 0xE7, 0x45, 0x0C, 0x52, 0xB6, 0xC1, 0xCF, 0xAB, 0x84, 0xFA, 0xEC, 0x63 },
72+ { 0x3A, 0x19, 0x9A, 0x67, 0x3F, 0xAB, 0x29, 0x00, 0xAB, 0x80, 0xFE, 0xC1, 0x18, 0x5F, 0x79, 0x35, 0x9F, 0xEC, 0x44, 0xB8, 0x87, 0x28, 0xE3, 0xD6, 0x2D, 0xC3, 0x1A, 0x93, 0x6C, 0x62, 0xDB, 0x05, 0xEF, 0x35, 0x71, 0x6F, 0xED, 0x30, 0x74, 0xE9, 0x31, 0x0D, 0xDD, 0xF6, 0x9E, 0xD5, 0x67, 0x1C },
73+ { 0x79, 0xF7, 0x6C, 0xA5, 0x3D, 0x52, 0x91, 0x62, 0xE6, 0x32, 0x15, 0x2E, 0xDE, 0x82, 0xA4, 0x03, 0xF8, 0xF9, 0x96, 0xDE, 0xAA, 0x00, 0x9C, 0xC5, 0x12, 0x25, 0x0B, 0xAF, 0xF9, 0x10, 0xAC, 0x24, 0xDF, 0x13, 0x81, 0xF7, 0xEF, 0x1F, 0x43, 0xDA, 0xC2, 0x6F, 0x63, 0xEE, 0x0C, 0xFF, 0x3C, 0xDF },
74+ { 0x8A, 0x2A, 0x58, 0xB2, 0x00, 0x20, 0xF7, 0x70, 0x0F, 0xFF, 0x62, 0x9B, 0x0D, 0x72, 0x38, 0xD3, 0xD5, 0x31, 0x1A, 0xC2, 0xA9, 0xAD, 0xA6, 0x06, 0xE6, 0x9A, 0xD7, 0xBE, 0xBF, 0x2B, 0x62, 0x58, 0xAE, 0xC7, 0x40, 0x80, 0xDE, 0xC0, 0x4A, 0xD5, 0x9F, 0x3B, 0x93, 0x26, 0x12, 0x1D, 0xFF, 0x66 },
75+ { 0xD2, 0xE0, 0x7E, 0xA3, 0x7E, 0xF1, 0xE0, 0xE5, 0x2B, 0xB7, 0x04, 0xDE, 0xC3, 0x33, 0x0C, 0x33, 0x78, 0xB9, 0x43, 0xFE, 0x24, 0x2C, 0xF3, 0xB0, 0x8B, 0x93, 0xD1, 0x8D, 0xBD, 0x61, 0xD4, 0xAB, 0x7C, 0x42, 0xE5, 0x81, 0xDB, 0xFD, 0xBF, 0xD2, 0xF5, 0xD8, 0xED, 0xF8, 0x2C, 0x3B, 0x35, 0xD6 },
76+ { 0xE9, 0x7C, 0x79, 0x0B, 0x19, 0x45, 0x32, 0xA5, 0x9B, 0xC8, 0x40, 0x90, 0xB5, 0xC6, 0x8C, 0x5B, 0x0D, 0x05, 0x0C, 0x6F, 0xE9, 0x37, 0xAB, 0xDF, 0x48, 0x0C, 0xC1, 0x9C, 0x34, 0x5B, 0x72, 0xFE, 0xF9, 0x25, 0xD8, 0x3B, 0xF9, 0xB4, 0x2D, 0x1A, 0x8F, 0x57, 0x2A, 0xDE, 0x7A, 0x50, 0x9F, 0xF9 },
77+ { 0xA7, 0x72, 0xD7, 0xB9, 0x84, 0xAB, 0xC7, 0x90, 0xA9, 0xFF, 0xF5, 0x1F, 0x3B, 0xD7, 0xC6, 0xA5, 0x38, 0x44, 0xA2, 0x33, 0xA5, 0x64, 0xA9, 0x70, 0x87, 0x2C, 0x41, 0x34, 0x5A, 0xFE, 0x19, 0x98, 0x3B, 0x8D, 0x3C, 0xE3, 0x0B, 0x90, 0x0F, 0xD7, 0xFD, 0xD6, 0x6C, 0xED, 0x03, 0xD0, 0xCD, 0x6E },
78+ { 0x61, 0x4A, 0x6B, 0x25, 0xBD, 0x67, 0x32, 0x16, 0xED, 0xEA, 0xB6, 0xA0, 0x51, 0xA8, 0xB4, 0x86, 0x9F, 0x9A, 0xD8, 0x0C, 0xC5, 0xDD, 0x4A, 0xE6, 0x29, 0xDD, 0xFB, 0x70, 0xCA, 0xA7, 0x0E, 0x49, 0xD5, 0x1E, 0x70, 0x27, 0xFF, 0x35, 0xA1, 0x83, 0xA2, 0x78, 0xFE, 0x97, 0xF8, 0x75, 0x9C, 0xF9 }
7979 };
8080
8181 /*
--- a/libmhash384/src/mhash384.cpp
+++ b/libmhash384/src/mhash384.cpp
@@ -329,6 +329,270 @@ static const ui64_t MHASH384_XOR[257U][MHASH384_WORDS] =
329329 { 0x75B15CC53B0D2502, 0xDA1BCA6BA0524358, 0x9EDA977556C06B7E, 0x6C57727ECF0A1325, 0xDC613D5A78E5C3F8, 0xCE062D94A3B4945A } /*ZZ*/
330330 };
331331
332+/* Table ADD
333+ * 257x48 byte matrix containing pre-computed 384-bit words with HamD(a,b) >= 182 for each possible pair (a,b) with a != b
334+ */
335+static const ui64_t MHASH384_ADD[257U][MHASH384_WORDS] =
336+{
337+ { 0x7D8058C289965A68, 0xA40E3AC93F6EEC96, 0x42962AB56A64DA88, 0xFB6391D25934AA91, 0xD9958F7E87AFCDCC, 0x988314D182C9F6F8 }, /*00*/
338+ { 0x1C460224D6627D46, 0x0C8338ED6877A302, 0x099686848A2D1E6B, 0x43B36D215D7BFB49, 0xB38786F894DB7C04, 0x6F4638AAE0B68B90 }, /*01*/
339+ { 0xD673B0582AC721CE, 0x07D11CCDBA43618B, 0xD68F9B3F987F9C39, 0x1BC69CA5367DC351, 0x19315FB5231457D5, 0xBC49FF8023C4FF51 }, /*02*/
340+ { 0x6179643A91A32DE4, 0x18872E1DEF8D3303, 0x7FBDD8315412DA52, 0xF1A8B5CAB53FA8AB, 0x801DE3F48AC23AC6, 0xAF7AE49C8161AA48 }, /*03*/
341+ { 0x0C9B6A8C119BB0BB, 0x0DE55AE85D1E20E1, 0x48B7435DC9CB6B41, 0xA3A6E2E44FEF6841, 0xF91669E868B80060, 0x214BCF908258CACB }, /*04*/
342+ { 0x4594391DE2947DB2, 0x3E6571CC6E9FC2BC, 0x64067ABBC8223821, 0xBEB4F1834702E047, 0xB4F106D9A146BE05, 0x9B9DE8FE614B6843 }, /*05*/
343+ { 0x09375BD6DC4C374E, 0x8CB31691EB60E267, 0xA915B81DF0365544, 0x9F047AB054483B51, 0xD01FC79B688E9C7E, 0xCCB8A7DE2359118B }, /*06*/
344+ { 0xF7270D40BCECDDB0, 0xC4F73BC45FBD7E70, 0xD70FE5EF89507E10, 0xE3A64DADD16A7BC9, 0xCE016154B38CF9D6, 0xA606A6C6DFD85353 }, /*07*/
345+ { 0xF8B96EE488E00CA4, 0x068955EEAEF58101, 0x4BAB59CF6A61C1CC, 0x3FE0542F5EE9AA03, 0xF6908622388193FC, 0xB78BA6EEF47774C5 }, /*08*/
346+ { 0x798F73B22108ADAE, 0x37D72947BB130490, 0xA43D1E4C39ACFC00, 0xCEB11D35414762B1, 0xE88D1CF560020AA4, 0xE20322F9157491C8 }, /*09*/
347+ { 0xDA615FCBB078E1BE, 0x28F309E1EC35AC02, 0x64B75ABB1D84D8AE, 0x3B9ADA205AF05E6E, 0x0D6B8EE88FCBC8EF, 0xAF8AAD011769C943 }, /*0A*/
348+ { 0x1251C038180201DC, 0x9A6305C757BFFE37, 0xDB962943CD1C1956, 0x8A94C2B95A569A74, 0xFBB4EA7CA016049D, 0xF303048F4477F00A }, /*0B*/
349+ { 0x16372888CB6911E6, 0x30C579D5ACBC6F67, 0xC41B20D00BEA9005, 0x881990C9DA4D0240, 0x0599214F8DABB860, 0xE449620AE3A535C8 }, /*0C*/
350+ { 0x116913EAF90B1D84, 0x5E4E196134B1E8E1, 0x4B8F43212575ED59, 0x9C7698B6CD7EC34F, 0x94C12A54396BF23E, 0xE9FF19D802D11909 }, /*0D*/
351+ { 0x8C6BA0E85A04768A, 0x8D37B3F0B6550290, 0xC7C2087D733E9C5D, 0xA7B932B8E1E9F298, 0x385122C401E9CCC7, 0xB3EB819FF727425A }, /*0E*/
352+ { 0x5F75DBFB1AB09D6C, 0xB837083CAC1D4197, 0xD9AF89142B757260, 0xAC1F71E71DE3FE48, 0x71F71A44098C5790, 0x0293E4022D18395E }, /*0F*/
353+ { 0xC8FB61B088003D36, 0x3CFE1604B5077F1C, 0x4D2C22DD6706BBC9, 0x39D056A9BB307D41, 0x2D86532AA15F3A94, 0xA4AF1FA82ACC017A }, /*10*/
354+ { 0x74697EA12B79DD5C, 0xA6265A2F060D0937, 0xED8EFE88EEA85D70, 0x9FA37CA8284E09D5, 0x1D1D438E3048C097, 0xA519883362A1DAE2 }, /*11*/
355+ { 0x68560840BAAAE48A, 0xD0381C27B707F307, 0x3A8F4E24DB22F809, 0xACF5526D582F1A64, 0xC07CE4E335EC904D, 0xE2FBF875C3DC4970 }, /*12*/
356+ { 0x52017982B27469EF, 0xC67A9FC8A2F076A4, 0xF9D7147CE22CE931, 0x2DC153AF477EB32F, 0xE1396B65889A0890, 0x874E5D7AAEA92AC4 }, /*13*/
357+ { 0xE617BEE1CC4CBD99, 0xACED2BABBDCA6939, 0x638550E76297B871, 0xAAF03AF65E178F21, 0x5B7D12FD81CAB450, 0x6772ACA9BCE1D19D }, /*14*/
358+ { 0x5E71B2B341EFEB7A, 0x1EAC0B05DE6FEE0A, 0x5886F65EDB18C054, 0x8B575466C729B380, 0xCE330220886A7A0A, 0x28DFF2FF1786D02F }, /*15*/
359+ { 0x802724C7B2706DEF, 0x33FE52147D2AE900, 0xC8EEAA5EA3B7BA1C, 0xBBD47F205D8F423E, 0xB2D0CE5F3A08AF46, 0xAD535615CC83F30A }, /*16*/
360+ { 0xC9B37BD962AB7542, 0x173D188F8CAE9D63, 0xF3667A498076FD60, 0x08E774F0F7E192E4, 0xAF4FF77803A16CB8, 0xAFE70CD9CDF327D6 }, /*17*/
361+ { 0xD3A19143201E15AA, 0x1025BCAEB5554A50, 0x59B8767FDCAF8440, 0x92453353C9FB884F, 0xF32742ED3401E9D0, 0x8C382E0E82B5C522 }, /*18*/
362+ { 0xCF0B5908B90B7C7A, 0xDA71C53CAE386706, 0x4F91D6EDCA05CB68, 0x8687E6B8DF5CC6F3, 0xA3880F9B1BE4E7C2, 0xB03F60E1B5E4910E }, /*19*/
363+ { 0xF4C3B389781069C6, 0xF54F3E15FCC2A228, 0xF97B887F280435C0, 0xA583DFEC4E50A8C0, 0x9675E5B417EDC206, 0x618F6826807DF5AF }, /*1A*/
364+ { 0x83466C0D2D22615A, 0x8B4520E19E06F207, 0x4D8B659E2502E034, 0x9D653DA04BE0E9A9, 0x075712F7BA04C6A8, 0x83E2676A06D50698 }, /*1B*/
365+ { 0xFC6533CCEFB8F372, 0x00D61064FF94F011, 0x09893AF7FA325361, 0x88C2BD50BB518B5F, 0x9868CB65E9B2209C, 0xF327D227B7128E8E }, /*1C*/
366+ { 0x7D5F0333C85EBA92, 0xB2A44BC9CE37F22B, 0xD6B71F1A308F64C9, 0xA9A03A8A9FC98E19, 0xB18BEB659B148F96, 0xE7FF1073C89DD552 }, /*1D*/
367+ { 0x53C442C7718B75BC, 0xE8B44AC1E2426A18, 0x5A0FBAC96A720DD7, 0x5AE971ED50F5C272, 0xBBDB6BC682C8F3A4, 0xE13CB728C55C6096 }, /*1E*/
368+ { 0x5ABD70EB9EC9F62D, 0xB0EF3DA118B44783, 0xDA82EBAAEC869682, 0x8AA41D684388D533, 0x9235637110AD1E04, 0xBB2F8B40082C0B8C }, /*1F*/
369+ { 0x96837B867A03E5E8, 0x8C2669AB805671C7, 0xF32732DA537197AE, 0x95908762F114EB00, 0xFCA7F60DBF082AD7, 0xA37EC2E780D25948 }, /*20*/
370+ { 0x7F21F2E004AAD61A, 0xD86636C5909C7B39, 0x513E16EEA170FADF, 0xB725BC2B77C7EB60, 0xB17C8D89AC011FEE, 0xCDDF2930B7EFBF0A }, /*21*/
371+ { 0xCA1F338EB96F5BC1, 0x062D44E49A20AE12, 0x156DBB2E7B71BE10, 0xA038F0F94BE68990, 0x23E68370AE685CD5, 0xC63A5AB27069E983 }, /*22*/
372+ { 0x8FF4583A6399A1A7, 0xA73A26BD26F67E05, 0x5D91489A52F5D590, 0xB3A277B55047D949, 0xAE2289743521BC08, 0x75DBBB30F5C1901A }, /*23*/
373+ { 0x47E13042E97AFE13, 0x2A9F408D94BEA397, 0x6FCF5E491356CED8, 0x75D023044F645350, 0xB82D60DDE48F54C0, 0x7E0B676648313427 }, /*24*/
374+ { 0x64858BB42AA007E0, 0x804C6B350C627021, 0x5C1FE2FD591EF9CC, 0x4666721802EE9743, 0x112344F4D05B4DE4, 0xAF2AC0716C423D1A }, /*25*/
375+ { 0x5A81C32177CE6FD4, 0x00E819A62C377A64, 0xBDE22A6B206AF003, 0xE7F82E145905C381, 0x23178BA6E9AED6FA, 0xB1B96C84A900BA62 }, /*26*/
376+ { 0xA7230393D376BE98, 0x47CF7E2020D6F126, 0x57A2F211BC4C101B, 0x8EEFF7F313A55B71, 0xA15852603D83808F, 0xA40F66BE1468719A }, /*27*/
377+ { 0x93AC6C6932A1F9E7, 0x910E19918E175673, 0x58AF127D1ADE8A7D, 0x7CBA0FF053C6AD51, 0xF2DF666AA9D6C55E, 0x7C3FBAFF36EDB3A3 }, /*28*/
378+ { 0x49B12AC66082C518, 0xBD27D5DCCEC17332, 0xDC951AC23D021869, 0xFB36C7F64C64078B, 0x62590331579B46BD, 0xE45B1A06CE802308 }, /*29*/
379+ { 0xB2C3604AAAB01949, 0xB6A32902676CA87A, 0x8BA1A6D8983AEAC9, 0x3EF5B1EC87C5C9C8, 0x632B9B91591B524C, 0xF7AEAFD5E1ED580A }, /*2A*/
380+ { 0xD0382A8380B2F1FB, 0x9FA01FB52D14CF12, 0x2224B9299058B751, 0x1F60EB188D54FB18, 0x56E028FE148AD6A0, 0xA76DCC72B754B578 }, /*2B*/
381+ { 0x1B13108B02AA6909, 0x9D3D1E296EDECC6D, 0x25AB0A87FCE068C1, 0x45912228513A5748, 0x16A14185AA8327D6, 0xB42392BB4D45EF89 }, /*2C*/
382+ { 0xA1D77344920FF03D, 0x0ED43DA5A7BBF945, 0x44CC6251F9E4F646, 0x59B553F306C48B8A, 0x703D2DB69A7DCF92, 0x278DB0A673B1EB1E }, /*2D*/
383+ { 0x8E032861E1FA89F0, 0x513B13B12F22AB11, 0x710368583D2CD42A, 0xB284CE6D253EEE93, 0x794D2B43840137F4, 0x6BA5F09B20F8462F }, /*2E*/
384+ { 0x15436111CA65657C, 0x71A054BD169B4953, 0x62049C6C7B5471C3, 0xAB2A2B215A674CE8, 0xD1221A351BAA696C, 0x93BE1BFE0A614603 }, /*2F*/
385+ { 0x32C733C5A828F00B, 0x110F399801ACEE05, 0x9F14CC0840853875, 0x6E88F1A7627FAE58, 0xB8060330D90DB2FB, 0xA8B9D6A99646BE60 }, /*30*/
386+ { 0xCA15A83D330E9FC0, 0x30B934C33F0CB130, 0x17069ED0BFF4C5F5, 0x3F52FBF392287423, 0xAAB3CDD4D8CDA382, 0x231B0AC292491FE0 }, /*31*/
387+ { 0xF02AB9566B53A895, 0x133D20A7CF1CEE15, 0x0F4A39A36A1470E5, 0x533E5E3D6DD5736B, 0xF31D7A2D49D168C6, 0x2DDA4BD3C1CC68C8 }, /*32*/
388+ { 0x172D6D06FABCB264, 0x6FA29A330E363099, 0x320D036B9C027050, 0xF751B0B15E9D1625, 0x3EE5273819657ADE, 0xC212652AABC6E78A }, /*33*/
389+ { 0xFEE1424BFE3029F1, 0x29B4328B932813C6, 0x40DF970FE818B040, 0x92302AAEF34DAFF6, 0xAAE05776B89BAEAB, 0x40C9889C60440D54 }, /*34*/
390+ { 0x5E0528DD38A964B2, 0x3F280772BBA6F7F8, 0xE59BC201AA3C18F6, 0x4B3037833BF58159, 0x5386B6855EA3D81E, 0x072B41D496F8D86F }, /*35*/
391+ { 0xD10F321C58883051, 0xF5122AB53CBDACA0, 0x70E5F26CEF85C03D, 0xDF85840F21010126, 0xFB52964C8A9E5098, 0xD57BE9A2C1511532 }, /*36*/
392+ { 0xD4F34B50F922A024, 0x6BA9FBE07C185482, 0xB90C7E15FEBF7AF7, 0xA806293C6065CF86, 0xA4158143B26BD592, 0x3EF34DF685EEF5CA }, /*37*/
393+ { 0x2BD94AF4722563D0, 0x7CFD11ACF73C3B20, 0xC0B1C431101154B1, 0xF785193842C24110, 0x159CDA6C108563D5, 0x4866B3F88380E5E6 }, /*38*/
394+ { 0xC5C77CE05C3FA920, 0x006559F76A049F3E, 0xEA62873BEC378339, 0x2167933D052D9E18, 0xB804358CF8C04D3C, 0xE49A22281F41480C }, /*39*/
395+ { 0xDE977AA346C13C95, 0x094636D6A712F836, 0xCE45CF3E5D3B7E21, 0x1C83990378ACE264, 0xDE89C2BADCE171C8, 0x22FF4D935CA9850A }, /*3A*/
396+ { 0x43413AA1C370E983, 0x8006CCE02D7428C7, 0xE63F2069FE1313D3, 0xF8B67CBF92C9D3E3, 0xCABE8ADD2235777E, 0x048050F68A678178 }, /*3B*/
397+ { 0xA1F1021BA5846050, 0xAC7D55A11A3DE4D1, 0xEB46205610DE2660, 0xA78B17253DF78FE7, 0xAC8A42CED4C45B4E, 0xC619F830D2CF4D8C }, /*3C*/
398+ { 0xD1D45E4330F5FFD8, 0x12F368B42E99E598, 0x95334607C1DED3C9, 0xD6C77ACA7AF16231, 0xC8A72710A6431032, 0xC5FA41BF6285269C }, /*3D*/
399+ { 0x6FE8C2B7B32AFCD1, 0x33266CF1BC266852, 0xB7DEE777F460F16D, 0xAD0697A9D35E2EDE, 0xD4172EBBA3137515, 0x772ABF88FD0054CC }, /*3E*/
400+ { 0x55396011142CBCC3, 0x075DE9A98D29F336, 0xAC8B2EEBE8770D49, 0x1B0D817B62517938, 0x4C4BAB763BCB33CE, 0x0B137A31AC17581B }, /*3F*/
401+ { 0x94F12CDE96BA6BD2, 0xFC2CB9FFB139E6A6, 0x6D2731DCBFE85D63, 0x71E42CB34ABF4AD6, 0x99BF7270DB61BE4C, 0xF4BA0BA31D5CB61E }, /*40*/
402+ { 0x3B65FB61284C73B4, 0x5F89D8808763AFAC, 0x7A0F8167D9C69BB0, 0xBD27B760A461AAAC, 0xB1BF104F7E03B6CC, 0x316A189375080992 }, /*41*/
403+ { 0xDE26A14218B11558, 0x0F6E78EBAE16DD20, 0x003DC052B7062183, 0x97AE533E9E5CCAB3, 0xBC2FC2D5ABEE5B09, 0x7C219189F8AC3AE3 }, /*42*/
404+ { 0x48347AF0DAF519BB, 0x7520A9A5A488E209, 0xCA7532CF3848F90E, 0x85AEA3F53AFBF19D, 0x8881E60DFC45E690, 0x3A613D6453655BAA }, /*43*/
405+ { 0x571F98C7B9E7196C, 0x25432582F55597A5, 0xA0D7245B73425C59, 0x5F162BAC31FF98E0, 0x92D608788155ABA8, 0xB53F6A3399A2CDDF }, /*44*/
406+ { 0x526EA8A7A86E5A58, 0x5FFB5C59E44CC4E0, 0x6DCD32D24479FB01, 0x78A22F7B2249CA31, 0x7A436F0410E41C4D, 0x0B8AA84C46C2A54A }, /*45*/
407+ { 0xE72BEBF02D8188F3, 0x187E39797296CAFD, 0x7F450B19BB428C69, 0x7B8773B2D8871BBA, 0xA9F38F2B9429101F, 0x0B6A62D2CB268DB5 }, /*46*/
408+ { 0xACE3B97A6374FF68, 0x2D71557589348A28, 0x1AF9423B6A208BD5, 0x4D844C4352D67AD6, 0xFB0130E2D32E100A, 0x827C16B0E0E15F58 }, /*47*/
409+ { 0x78F0B8653B0D18FD, 0x1D7D0B7A15D5E306, 0xB61B9A89DFA6220F, 0xA5B22E9507D0CE70, 0xEFCE8136B8094C5D, 0x8D56DD3E8320571E }, /*48*/
410+ { 0x40B298D243D432E6, 0xD6B750A19212B772, 0x6F9D873AC1A0B5FD, 0xE8AC406409A6872F, 0x9A469696B9C1FA72, 0x93848EA38124B42B }, /*49*/
411+ { 0xE4C1448EC8CC58B8, 0x76CB35652609202F, 0x9494B86A062621F7, 0x60156A21E1D1A861, 0xA0EF7E66BCA14C10, 0x686BD6D21D825969 }, /*4A*/
412+ { 0x29BECA487442E3F1, 0x705663E33AA12922, 0x3CDD921E4C7679A0, 0x9371E7BB0FF9D9FC, 0x3209288C29283298, 0xBC97E7FF1A8EFDF9 }, /*4B*/
413+ { 0x49C0E9D5EF0DC498, 0x20AE20504A3B8535, 0xABB1D036D70CD941, 0x149D24EC9D61E114, 0xBEF1E86CBA595DE8, 0xAF0D28A0AF5DFBB9 }, /*4C*/
414+ { 0x9A3771E70EBF65C5, 0x9DD4C2D127A8039C, 0xFF1A7E1393C364EB, 0xEB856EFC41DB2ACD, 0x3DBAB2E4AC7A4C88, 0xBA8C2CE090C611A9 }, /*4D*/
415+ { 0xD583F464FC44A171, 0x1DBF5431C1A2CAAF, 0x57B3775B16E8D883, 0xAC61D57DB8CA91C5, 0xDACF0AD601CACD66, 0xCE5B41E29D0DE6D2 }, /*4E*/
416+ { 0x994FC88062273D20, 0x198F252AE17F369B, 0x707653C6AEF6EF26, 0xFA8CEE9559C0A3B8, 0x983848F20A8BF25D, 0x868FDC206A0854A0 }, /*4F*/
417+ { 0x63531AC9C4359CFE, 0x5C22759DCD60D0B6, 0x954D6B25FDC9C3BB, 0x32993504E3D5530C, 0xB39BC4E581285E4A, 0xA113930CBCC476FB }, /*50*/
418+ { 0x4AFFC564E9745EA1, 0xCD50F2932DBEE0F7, 0x1032984598329F15, 0x9941126E11F6D9DB, 0xADFD922183C06E74, 0xA19B6D2544808965 }, /*51*/
419+ { 0x9EB31084EF95FEF1, 0x729B4DE7CD5BFA76, 0x9E4F5B940206737E, 0x67058AE2316A80F2, 0x51B21B8530E99B98, 0xAED28138B275A1D3 }, /*52*/
420+ { 0x7723C4C7401A2B37, 0x54E058559B3AF793, 0xF0A9EC517E50E5A5, 0x429DA5B648A2BB41, 0x288039FC335DF40D, 0xAFF3C95FF1270B84 }, /*53*/
421+ { 0x4D66B0327425E5BD, 0x150B198A06ECB238, 0x2DCDAF4C35CE47C5, 0x42A1AAFA9B86CA17, 0xD5A416CA8BA5B7A4, 0xAC4BE5C6A3CFC804 }, /*54*/
422+ { 0x955E6ED869A96EFD, 0xB85B562A0D3C2356, 0xCA5D2256C80980DB, 0xD9D6BF37E9EA2739, 0xFD6589B4A1632DAE, 0xAEE8A86655397AD3 }, /*55*/
423+ { 0xDD138357ABC5D9A4, 0x58253FBCE2AF893B, 0xEFB96A2CBB3A4995, 0xAB059E2A6B24EB2B, 0x7FCF6DDC799F2E0A, 0x7490FF607212E7FA }, /*56*/
424+ { 0xD47753D03F6A7CB2, 0xEEBD589BB4B81439, 0x9E7F083C1E48D465, 0x99F4AC9B24B4D403, 0xCA1E18B7341A0C6A, 0xD927D48AFA8D48AA }, /*57*/
425+ { 0xCAC4E3E4097460F2, 0x59A31F4BFC89D1A1, 0x7E9027F8FAE125F1, 0x643EB68156F413D8, 0x6C64525F84C83A82, 0xAD97A09548999292 }, /*58*/
426+ { 0xB98BB614D1B97B3D, 0x686559913959D004, 0x7E1D4EA292F75119, 0x987907A95DCCAAD2, 0x0367434C0605031A, 0x0B4E5DC73D450C6B }, /*59*/
427+ { 0x9DC90461E4C01281, 0x5D624A0BBAC1060E, 0x40003A12F9D17B5C, 0xBDC72495EB56F20A, 0x52164EC4FFADA430, 0xAF1660B1EBAD29C6 }, /*5A*/
428+ { 0xCF2631F3A00975D1, 0xC457D947C598615A, 0x939363C9FC07C9B8, 0x31712E2149678C18, 0xBE33C87A4CB7DB2B, 0x5351E4BF294CEB48 }, /*5B*/
429+ { 0x884B290301CF3A77, 0x687C20EBC40B8084, 0x9DA5834D701450FA, 0x9904B5DF529ED2C5, 0x36B6B441548AD976, 0xEC0FAC65F72202D8 }, /*5C*/
430+ { 0x49636EC515319667, 0x7E3723B6C9F2BC0A, 0xDC9830A275CEAD6B, 0xA0C03C2B5545CFC1, 0x79206E9438CEF1EC, 0x323A48D2418BCB7D }, /*5D*/
431+ { 0xD5943E9A792516E7, 0x5E64D8C5140F9BE1, 0x1C907C1C7CA4DA05, 0xFF82AE6927DBDFC9, 0x3A78FA37EF8D734E, 0xE6EE0491BE7460F5 }, /*5E*/
432+ { 0x58CA1A4E84332E63, 0x3AFD9E300CA530A5, 0xD3C19661390E5D17, 0x0BA539299074A7EA, 0x3CD74C3AED20A418, 0x8B50CA03F2ED504B }, /*5F*/
433+ { 0xA003D052EDA9F9FE, 0xB14048FBCBB623A0, 0xC5822CE44E3AEF19, 0x8D165342C6F54D95, 0x2AB46EC27C1DFF9F, 0x8E568CAEDD482CAB }, /*60*/
434+ { 0xC7AF417AA59466A6, 0x14F56A3CE906F87D, 0x22DC95D0C20DC86D, 0xB632CFF822E2CB24, 0x1FB562502E297678, 0x173B1C675BC652C6 }, /*61*/
435+ { 0x401A4084B0F53485, 0xB9C5000746244D2E, 0x73353CE7D8550065, 0x3D9A4C72536FD28F, 0xBD415DC7743D1A9C, 0xEBEAC1963ABCD6BE }, /*62*/
436+ { 0x3ED003D74ADC2CF3, 0x15C520F60A291D95, 0x5A95344407639018, 0x2996C63BE5D4D908, 0x916FC19210E6B286, 0x94128D59A765C785 }, /*63*/
437+ { 0x0D33A6423A2CA0D2, 0x748CEF7CF523C571, 0x1159E992CA34169A, 0x89E169B453F6D2A1, 0xF873438EECD366AE, 0xA25BBCC3ABEB2434 }, /*64*/
438+ { 0x4261894340814F6B, 0x3C4B4A81711F50BE, 0xD0C860AF93B9420D, 0x20B4FCBB2E7402BC, 0xA613BB36D880E8B5, 0x76BB31E2BA788D99 }, /*65*/
439+ { 0x639363FA40E53CD8, 0xE1B175630C11DF2F, 0x2FEBC29D14D2399C, 0xD292B92745502B99, 0x9BB56F770A39E529, 0xBA1A7927B29B8166 }, /*66*/
440+ { 0xAC090C8658C0A121, 0x1EA6090D930C19A0, 0x97DBAB25D464956F, 0x6AE63A3269786CCC, 0x89B5430308043F68, 0x171D792CC6BBB11B }, /*67*/
441+ { 0x664C7BC982732FDB, 0x5AC75069AB3F2028, 0x82346B945264BD14, 0xEF014E9E4025F1E5, 0x6F0645079DD7665C, 0xBC5B2706AC1FCD0F }, /*68*/
442+ { 0xE6F121844D18A3F8, 0xB6E1178B863226CD, 0x9D4DD2A7C6F7E803, 0xFBAFCB690BE7725E, 0x5DD68673CDCD670E, 0xB536445E7BF0BB78 }, /*69*/
443+ { 0x3170DB48F8E52419, 0x90EF7AE181633410, 0x66DB3F789D314D42, 0x6DD8FCD41B03D852, 0xA5B1263FD8901502, 0x04B3481AF58203EB }, /*6A*/
444+ { 0xD2EC1A5547213C98, 0x14A13BDD017B1EE9, 0xAFADA55AFB32F2E8, 0x89706761C174587F, 0x2D784C000F84C7DA, 0xE8EA7078982FB288 }, /*6B*/
445+ { 0x994B00C75D9F1956, 0x03774AA164A047A5, 0x1A9CC89FB9A0BB72, 0xE3F88A73F2A58104, 0xE52B66BE4310D70C, 0x27CE615E8FAE5DE0 }, /*6C*/
446+ { 0xC3D4A291F8B3B3CD, 0x2AF2CF29DDFA40B8, 0x2F9AAA1F4B6AB0B2, 0x2FB5843AD45EE053, 0xB14DB852FA816858, 0x879998071BE483F0 }, /*6D*/
447+ { 0xC83E206608AD2D54, 0xDEA2BBB3781232B6, 0x3ED671260B448844, 0xB8A73D001273CD55, 0x7A8989CDC3398AF3, 0x248E565FAD436886 }, /*6E*/
448+ { 0xFB03EB2FC1E478EB, 0x3DD79817D0C15EB1, 0x8C07461CCE15D1D7, 0x9BE7C49891B7CA3B, 0x25AD2437E9E5D4CD, 0x661E9916095B7D6C }, /*6F*/
449+ { 0x57B02982A1A4BD74, 0x9CEB65D956C9A021, 0xC21A8F31EC09B134, 0x11DD7E723DD70182, 0xBA0EA7C02D3FA5DC, 0x32AEF95B5F199554 }, /*70*/
450+ { 0xFD6D3A6F7D756654, 0x7F402C41EFD32C53, 0xDBE12C3D8AF63D69, 0x92E4672B03AE3500, 0xBEBF0BE79A87BCC1, 0xE0D0C8451B769362 }, /*71*/
451+ { 0xFA407554424447C4, 0x38276EB9DC78FFCA, 0xDC030B40E392A111, 0x8E7329B733BF7986, 0xB8CD20BAFEB081DC, 0x7F2FE440A604C24F }, /*72*/
452+ { 0xC4676A5698AC5BE1, 0xD96C0D04CE7E00E3, 0x8B5AF70A44A35D2D, 0x1AF81796FE376360, 0x19222827B6E94686, 0xD0833BBAA728C2E0 }, /*73*/
453+ { 0x205DB55620E47932, 0x3DBCF9480473B896, 0x5396A9B3E95BF1F4, 0x84A18E3FC1AB5C51, 0x1B0FAF9FAD895128, 0xE6776AEC62E1BFEF }, /*74*/
454+ { 0x597731C0CFD0977D, 0x68E5A99B3307D464, 0xCB1A59CA0874D1E1, 0x7F91E66083BD27B9, 0x1004BCF22A307507, 0xC473FA32C0EBE146 }, /*75*/
455+ { 0x8F2D73F152382CA0, 0x36DB3631484FCBA2, 0xAB8E7DAC58534B85, 0xC9DC83F64BDCACF0, 0xE18A86D5A404EC7A, 0xF74C8002CBCCAE7E }, /*76*/
456+ { 0xABB3E7C985B14838, 0x1E526991B02E100C, 0xB60333765F302EF1, 0x82027211096A8028, 0xDB5FB63C32DFB78A, 0xEDC90E36AA68D244 }, /*77*/
457+ { 0xDBF8824CE804FC56, 0x833E3CCDDF0509A9, 0xC612931D08B2EB27, 0xE8C1E576400E5739, 0x4046E16C0E41B9A9, 0xD52A44E631E44B2F }, /*78*/
458+ { 0x7BF702A8863F41AA, 0x441C1315EA08D9B7, 0x175B695FC295287B, 0xFFC4A7021DC57CE7, 0xAE0F2E105C0D35A5, 0x8466C9C22121D0C3 }, /*79*/
459+ { 0xA6C82B7A5762339C, 0xC3FD8BDBE6A6D1F3, 0x98E37E76CF051B41, 0xFCA1443254D39FA0, 0xD1820D3C2089FB12, 0xA6297940114D0E2B }, /*7A*/
460+ { 0x91A8E88F5B269B84, 0x5CE5BD13B839F915, 0x71D3BADF590793F9, 0x61A5799A1F2F635C, 0xCB6E8EE70E0CFCBE, 0x7A518532DCCC48E1 }, /*7B*/
461+ { 0xED6159C438D8ACCE, 0xBD2D47B352FFF864, 0x00E3FE4DEBD8B0F3, 0xC8488D49055FAE39, 0x082BCA7E34657650, 0x2CEF272EFB4F23C1 }, /*7C*/
462+ { 0x02A9BAEC8AAA2950, 0x04C3089CCF6A42DA, 0x56BB1005ABAE17B1, 0xDF89B6EB4B37DF67, 0xC645E8D7B0290BAB, 0xBAFE2D335B9B504F }, /*7D*/
463+ { 0x9864724EC1AC9C32, 0xD037FE97EE4E6504, 0xB0CE6A578619DCF1, 0x2FA089F59ED451A9, 0x11A7D846BA8F897D, 0xB0DC4BBC68269D1D }, /*7E*/
464+ { 0x47B36255297B7BEC, 0x3DB226CD2B457EA1, 0xBBDA45CD1B953901, 0x24E5C510DB98C91A, 0xFA5E4E879EF31B7E, 0xA2212D3B738379D9 }, /*7F*/
465+ { 0x3AFB0F15D9C24D59, 0x45E33E5A843C691E, 0x5958CFBFBF6FFD65, 0xABFA135003DC8135, 0x3ABE384DF795707E, 0x8E9BB4F2215782DF }, /*80*/
466+ { 0x745DCEE8F8004B47, 0x93BC66870AD2CDA4, 0xF2A073FE17265071, 0x512DEBC3E3F74A5B, 0xFD1C4F58BA4F426A, 0x2202BC54E90C844B }, /*81*/
467+ { 0x484CE432EF1C5151, 0x18EAD594A4505900, 0xA48F57DD88981D6E, 0x459E102A4516B809, 0xF97EC9A01788A21B, 0xBCA356C25A537D9E }, /*82*/
468+ { 0x3EFD68177C157D7F, 0x425F45151A7C1BA3, 0x162E8946EA69AC73, 0xA0B53DF003311A8B, 0x5C61F6F3D0BFA1F2, 0xED923DA5D3C1ACEB }, /*83*/
469+ { 0x7C50E2DEECFE9DC6, 0x17F8099650DA08D7, 0xC87BCAAA940703D4, 0xAB80498FCBEC19ED, 0x78950EDF9FF203D9, 0xADBBC8AF1F48039E }, /*84*/
470+ { 0x08496491E4F2B575, 0x066D1ED2A0ACA263, 0xBA61B5BDC394DC8F, 0xE4336312E97F1E50, 0x3479BB15D217CA47, 0x9012EB13F695CDF7 }, /*85*/
471+ { 0xDCBC43CB441BFA6B, 0xD9C1108252E9B959, 0x660D0087622D1089, 0x26E35E54C71A3192, 0xAE95DEEC1A505722, 0xB61F5182CF903E42 }, /*86*/
472+ { 0xAA03F75764204EAD, 0x769095C51E867443, 0xEDF66399EA6D0B73, 0xC73B6CDE5431CC14, 0x5CCCD864790A3340, 0x165EE303CF64E397 }, /*87*/
473+ { 0xE5A3F256C577C042, 0x5B41300E3827A9B4, 0xE80F8A8EFC5CAD04, 0xFF7866B9B15E9429, 0xC1BCEA40F26841E2, 0x5BE4FF4ABC25A3DA }, /*88*/
474+ { 0xC932FB419D304C04, 0x627556497691F88A, 0x149D21E8615C5A62, 0x6A5307B2E54FF029, 0x1CBE87CBD3F40139, 0x867C8331111850A0 }, /*89*/
475+ { 0x9470924D82A490A0, 0x6F75446E246C7283, 0xBC4911F93A9CF101, 0xD15E5CC08522A4BC, 0x91196DD95C4A30AF, 0xA0BB0D4F88E78FB7 }, /*8A*/
476+ { 0xC9DA7CE16D82D128, 0x07CA96B97BFD7D15, 0xD63FA64A4B19C926, 0xD1281837870B10C7, 0xB1E36B87EE2FE287, 0x634F2C0DA84AB3BA }, /*8B*/
477+ { 0xD872ACF3F9CBF460, 0x14757FDD55762BBD, 0x2BA56AF060A4B36C, 0xD293899C12817B8E, 0xE4D275E538C060B3, 0xD84D47DF3C4DB097 }, /*8C*/
478+ { 0x5D4C3DDD50A2EC7D, 0x44B4A410EFB0AAFB, 0x3E0649FFD5BD29CA, 0xA1DACCE1DDAD8B20, 0x09BE5954F50DCE81, 0x082D39AFC260384C }, /*8D*/
479+ { 0x637AA6D9A7A27B94, 0x09BAB935847415EC, 0x71883D0EE0D78920, 0x4095CB4D44B5A0BB, 0xC4E1832FD93E1DE3, 0x2D1E07C9D27DD252 }, /*8E*/
480+ { 0x788FFE15E2CB720C, 0xA2F18380E98A68F7, 0x888ED12A39E1B45B, 0x2147EB5AAFD2BBD3, 0x8A2366C7A15A3999, 0x95DB871AA96EE06E }, /*8F*/
481+ { 0x5FB195C85F2F2470, 0xB142421DCB5CE256, 0x2D3E6238594FF595, 0x6DE0791FA43742BF, 0x447F564C389D3217, 0x421D5FCB76E747C8 }, /*90*/
482+ { 0x5A9BDC549C36B14E, 0xC84CE5E5028EBD48, 0x884D50681D73904D, 0xA7A22C924C94B45E, 0x9582CA4780A39426, 0x2E04FADFDA58CA5E }, /*91*/
483+ { 0xF0EB5499E595AE44, 0xAF98790CBE0F0B11, 0x25535BECA50938B7, 0x91975A7F08BDBB48, 0xD6B24859B68E14DC, 0x827E3214B9BAAEAA }, /*92*/
484+ { 0xF3CBA8401657547E, 0x2D888C5B6C28CD49, 0x7FD2F22A39AE6C79, 0xD143CCB45B066C33, 0x98A5B0E7BD952A16, 0xD6B1535EFE28311D }, /*93*/
485+ { 0x82AF42B659F6429B, 0x2D2C6E768FD2315D, 0x1D3C0B6D4D75C6B1, 0x6ABD0E260A0BBEDD, 0x86FB2558990A819A, 0xBF9D7759CFC849C4 }, /*94*/
486+ { 0xF916C0983358AC5C, 0x492790E5C9B7C3DC, 0xD4CAB0EF1DA545D4, 0xB2F9F3BC2535E812, 0xC8535D33B2AFA578, 0xD46CAC719EC39F01 }, /*95*/
487+ { 0x9AA4FE6990B7BF05, 0x97D652F0900FF0E8, 0xE5D1D944DE2E692A, 0x0A38AA2FB3A6379B, 0xDB391D65146D58B6, 0x75B6726983066D12 }, /*96*/
488+ { 0xF7E784F55B126999, 0xF5B7E58D24A3DA95, 0xB6981236C66D0F52, 0x0D44B10C88E736A1, 0x060A25EDFAB45A76, 0x3CCAE89FF2D88BE7 }, /*97*/
489+ { 0xCBC4B3EE83E356FF, 0x3783369DE63EB7D4, 0x6A310DDEAEC3396F, 0x814D399E294EC44C, 0x4B417B42926E855F, 0xA61BFBFF8FCC59F2 }, /*98*/
490+ { 0x0E0A7D90E6844DC9, 0xC870E60D5DFB6783, 0x63E90F52BD262DED, 0xD2A20DE1A685D4D8, 0xC307AC6628425EB3, 0xA4B2D411F6207D65 }, /*99*/
491+ { 0xA795A18DC574F004, 0xC4209A366244C78A, 0x8EDCE1C5273AF12A, 0xDD84593E08F74270, 0xB6AB7BFB29530513, 0x6BD7849206552A47 }, /*9A*/
492+ { 0xE49FA24FE6FD4577, 0xC637DFF8968F5D9E, 0x13677E14C51A130C, 0xD17DAB9D96FA8853, 0x0C0608E1185D42DE, 0x33FB328304CA93CC }, /*9B*/
493+ { 0x8DA0961B29675077, 0x7E47E2C260B350B6, 0xEB3FF461D163E926, 0xD6F748675A8CFF3A, 0x1887D161919F65E6, 0x81633132F35CD84F }, /*9C*/
494+ { 0xAA9988566F29F8C4, 0x8CC55C13E5CE1E80, 0x603A6F04724D3822, 0x7470FF2B8E81C26C, 0x8831AC0C9BC2FCBE, 0xB065FB970E730227 }, /*9D*/
495+ { 0xD27A7737E059C046, 0x27E5B10C9BDCE6A6, 0x735F82565D36C77F, 0x8E6B4A4F545C0B0D, 0x0BD2ACF5F8A1A584, 0xE4B7A499DAFB4A33 }, /*9E*/
496+ { 0x2013C2654E67A3A2, 0x3A778A90F6943C18, 0x03FEA3FAA0282189, 0x1808A150645E1DD3, 0xED9DF15005A9D48A, 0xA05A65F7BA562A25 }, /*9F*/
497+ { 0x16C78B90F574B969, 0xAAA54454B18375B0, 0xB32F6B432283644D, 0x72E506CB0F3ADDAD, 0x3F25CFACFC30C0ED, 0x594F225D77641B52 }, /*A0*/
498+ { 0x3D8A338E34E0A73C, 0xFB2991B5E7A95529, 0x93BC4F7EC0AA813E, 0xFC7273C5CB0DD2D8, 0x6FD8AAFEB3E871DC, 0x15884FB7E22B8D96 }, /*A1*/
499+ { 0xEBCD4F36BB1FA30B, 0xDA6512FBC79CFA88, 0x290DB13C9C2F8B8A, 0x4397DE0D71E91181, 0x92C72AC60F0EA0E8, 0x6BD53E93FB21B325 }, /*A2*/
500+ { 0x01A7E269EA27FC44, 0xB9EE9A6D27E2CE14, 0x9CE539B0F44DC8EC, 0x93760B66A3912048, 0x8940A4DE651422C7, 0x479325E2376ABC43 }, /*A3*/
501+ { 0xB978D1AF3EE870AD, 0x1A102039BCC2BFB4, 0xFE26E467F82FB5A7, 0x7AA2AAE78A371518, 0xA6C049980EFE030C, 0xCE5B165A31B9CF55 }, /*A4*/
502+ { 0xE079A70EFA5E7BF3, 0x591215F801CC7032, 0xC6EB485231416A2E, 0x79015550313DF7B4, 0x6DBEE87A70C69171, 0xB3A9223B8FAD9830 }, /*A5*/
503+ { 0x1E65C5246BF32C0A, 0x746F71887112AC88, 0x3768EE0D1E4C803A, 0x13285A9217D9472A, 0x50D3653EC5B92FDA, 0xD3D08125121C1B16 }, /*A6*/
504+ { 0xB26658B8A7D7C6E0, 0x98BABAB8F6A75826, 0x0C5CDC5B7C571E2F, 0xA0757C35E27C3C15, 0x5A4CA5EC989F5323, 0x12040917D1353181 }, /*A7*/
505+ { 0x283C3F5D1D0F20CE, 0x35EFFEF7A76E80FA, 0xC284C26FB60A607B, 0xF45C41973151D4AB, 0xDF0449DFC681E6A4, 0x9F4E923144BE2940 }, /*A8*/
506+ { 0xA37EBA8348C56B09, 0x1BA4A5AF2150A1BB, 0x8538E2ECA1865E02, 0xEC70C5F094E6B54F, 0x28532F0E3E2F1CCC, 0x6AA481AB8C522467 }, /*A9*/
507+ { 0xCB6BCBCC64F474EC, 0xB06AC92DA299C98E, 0x6703AAD7D1EF4018, 0xF674C9C07943BFE2, 0xF39AF9B962D69A7B, 0x2C563C88D9FA4631 }, /*AA*/
508+ { 0x919FEF03EB6ACF89, 0x6C7E22DA8609DBE3, 0x1FA1E2E6B8DFAD9E, 0xAB95CC3584E76CCE, 0x1D04DAA8C2B3FE15, 0x1D43007A1F9F889A }, /*AB*/
509+ { 0xE7818E5789081774, 0xC0704429AF659E0E, 0xA373CAECB9D9966D, 0x09B15BFB604EF493, 0x37416D1C8D30D8EB, 0x14E79C0CC95BB0C1 }, /*AC*/
510+ { 0x524F475F142A020B, 0x1C6451BA2E4BAF9A, 0x9B539D994A1AAF6E, 0xF4275FE42F97D113, 0xC427C07D61E709C3, 0x24CCDF222FF915B2 }, /*AD*/
511+ { 0x14DE747F8D1669B8, 0x4E0E531B85D62D43, 0x78E2A7D71BA2E18D, 0x1D946B89B1433FBF, 0x00E387ED73F89378, 0x52992A8283A832C6 }, /*AE*/
512+ { 0xCBDB69FBCB21009D, 0x0EC6FDEC4E8269EA, 0x79D908AA89FED13F, 0x7548E553A1103EF0, 0xBBE4048A115EC944, 0xE1C60EBF7FBDDFD1 }, /*AF*/
513+ { 0x24522AA6EC219FB7, 0x78C952E8A5DEDDDA, 0x2822F9EF97929DF0, 0xA70C9D1D8258B682, 0x8B37AC646D341E93, 0xD67C34FF4BBD5E0E }, /*B0*/
514+ { 0xE770CD22FABC425A, 0x7E9C34D3ACC5075C, 0x0AFFA78C7BC76623, 0x4EED9851852C03F2, 0x7203EC6EE60426FE, 0x6517CFB85022DC4E }, /*B1*/
515+ { 0x1581F89650F997A1, 0xDB9CE979F407D39E, 0x0AD4800E39347F3F, 0xC0C35B8D9FD1392F, 0xE74D894A6167AE43, 0xD462E2F4E3CA9AC1 }, /*B2*/
516+ { 0x05EA545C5B41C787, 0xCECD2DC56104C690, 0x7337C0746CC963CB, 0xFDF08B81F136B8B1, 0x7F7A862159C72990, 0x0AD9111B6CB0ED2E }, /*B3*/
517+ { 0x6FE578032A920367, 0x49EFAEE55C832164, 0xB3157997365AEF57, 0x98F84917C903C67B, 0x75CF75DA2AA67BF3, 0xD2CD8AB69E83D8A4 }, /*B4*/
518+ { 0x65B99EB5C4E335A0, 0x486A759227255280, 0x4F7A3B558F86EAC0, 0x03DF89CC2686DBF0, 0xA95693164EEAA311, 0xD3149307EF5BDB09 }, /*B5*/
519+ { 0x653261B529527041, 0x9A559ECA9A789241, 0x5931FF0E09E8677A, 0xF6D53AFDF41458EC, 0x02B94442E96BF81E, 0x5C4A1B461FA95C7D }, /*B6*/
520+ { 0xB6FA3DB3F3096A56, 0xAD1E678369F141A0, 0x81708DA9ED5E5188, 0xE2EE29D337A81DED, 0xD7EC74F0AC9B37C0, 0x1B785A6FA3C76037 }, /*B7*/
521+ { 0xAE153D618202ED33, 0xE8E91115185E46DD, 0x05D9BA34364372BC, 0x672EE1629BDBE13D, 0xFC2F5EA8624A61CB, 0xD843198BE3925035 }, /*B8*/
522+ { 0xBCE8F7C1FC130582, 0xA571AEBDC5C5B472, 0x7F08C70583911E9C, 0xF4BC16EA95A9D958, 0xA9EE3D6BDDEA2C72, 0x1B651B74994DF683 }, /*B9*/
523+ { 0x13A7D9DA16EA461D, 0x7FCF04FC4EDC32B1, 0x66607C39138582F8, 0x8831546EAD73A091, 0xD8A4C4F349D1F5FD, 0x4975C9D5701638DB }, /*BA*/
524+ { 0xBF0AA6A41F0EC78F, 0xDC2BF64F490226F3, 0xCDA313AAF2D03538, 0x04B8DA4460595A63, 0xA23F1B729BB763BA, 0xF793736A73F77272 }, /*BB*/
525+ { 0x3BA334AEBFDF6E3A, 0x212037EAF6A1E5B2, 0x004B3C1920BF41E0, 0xD8A11B5BA862706A, 0x6579E5027315F8AB, 0x3C1F9CBB6D54E13D }, /*BC*/
526+ { 0xBE24DE02BDA2A2D7, 0x4D69A648E027E9DE, 0xFEBC2A5373BD90C5, 0x42C7AC0E55A414DB, 0xD65962B721659EDC, 0x53831B2E73FB0D23 }, /*BD*/
527+ { 0x3DE68C3D94080E94, 0x1D9E0BC868E087DC, 0xE7AD1EF14270B35C, 0x9A14CF373E0F67E5, 0x00EF98ABE6B7E600, 0x82353F1F18234EAA }, /*BE*/
528+ { 0x6034549E932CF51C, 0x3CE2E36E3EB4D407, 0x9FBA80CA22B31E3F, 0x142EAEAC8CAD93F8, 0x5D3D5CA6E5909CF2, 0x1B2C70B482B625B5 }, /*BF*/
529+ { 0xBC212277FE451938, 0xE21637EF3A3EF4DA, 0xC39C70D155CE7AD5, 0x5C3EDC78491F3AF8, 0x1A405C9B847D16DF, 0x0F446B056E291875 }, /*C0*/
530+ { 0x69D791C758B8E1DC, 0x49D8A84512B8B0CA, 0x2474F7B05E061DBC, 0xA79C97FFB1493F6D, 0x6FB9E77B764A9772, 0x311593614CB6D8FE }, /*C1*/
531+ { 0xF67F8D77D5A45E27, 0x17A3287F58D26572, 0x182792E595E52080, 0x7D15B7052C373A90, 0x536CF2976B910733, 0xF0E483B43ACBD504 }, /*C2*/
532+ { 0x9F1EE351D08E27EE, 0x76158F0101251C50, 0xC1269FD22FDE67FA, 0x6C1930A26E6F3F5E, 0xA32AA0AAA396B071, 0x497A599416938BD9 }, /*C3*/
533+ { 0x569916F08E7D1767, 0xAB20F046F165C725, 0xBD4C1CAFC3DE32DA, 0xCF19F61CCA274CDF, 0x4DEBBDC90446F779, 0x0D07522E07429B0E }, /*C4*/
534+ { 0xB0F295FB72F3921F, 0xC692DFA79FAD80EE, 0x69011629E0238DA6, 0x0046AF22910AEE2C, 0x77DEBB94C94A9DBD, 0x4B401110EE8A03A8 }, /*C5*/
535+ { 0xFF6D2FCA08D69F8B, 0x97592AF1712A5ACF, 0x9D540AF103BB0CA6, 0xD55933E572328F10, 0xEC7218CA2FB0F7A7, 0x8D154ECE583152AD }, /*C6*/
536+ { 0x6CEFB6A3BBB18EFA, 0xE47A0437AD48BB5D, 0xAC9695D38CEB73B4, 0x4E5468B6CEB06906, 0x3A57007B43F1591F, 0x16EDF10ED21C2651 }, /*C7*/
537+ { 0x3012A14CAEE92A6B, 0xC7CE2D0A16397B6E, 0xB2CE1D676CDD36B6, 0xF563F9683F8C3E45, 0x3C112343EE739443, 0xD2FD36380C31457B }, /*C8*/
538+ { 0x1082D7EDE79C89E8, 0x57D1C088D807C597, 0x9E5CE9CCC772F2AF, 0xD30AD1CAF61BB8D9, 0x1E40D024A6939CA4, 0x4985DBEB358DF104 }, /*C9*/
539+ { 0x616EBF3FC09BC5E4, 0xA949C7DA50B367ED, 0x0C289EF8AF79CDB9, 0x5C23303A5F396469, 0x3316727F556A9DB8, 0xB7CCEC943229C3FC }, /*CA*/
540+ { 0xB9B4B8C04D465EAE, 0xED44836D54AA7798, 0xA6F7DC5F0FF5918E, 0x700DD1C0F68E4E23, 0x4BF2FAA0516222AC, 0x3C2AE26002348642 }, /*CB*/
541+ { 0x8A7ECE878B79532A, 0x23613836116B497D, 0xFE665E9804C10AC7, 0x45E6B949601D50DB, 0x5B2A9E4887F1AE92, 0x447FF94BA4FF2079 }, /*CC*/
542+ { 0xE31CED1B1F588060, 0xE60A18CE70D51BE7, 0x62C08A1E01A2E1F3, 0x008EB3D687EAE77C, 0x1D01A7F254134224, 0x7E007BE76E56F3A0 }, /*CD*/
543+ { 0xE31995299E1D8C4B, 0xD1FBE650613BCD97, 0x1D3C3F36A806C06D, 0x49F278C3D9F4A9C6, 0x0EAC518E5FEA0B19, 0x7D37A390C9A06EDA }, /*CE*/
544+ { 0xE38F2A3ED827813E, 0xC5CD4C09D275547E, 0x1CF0E8313F2ABED6, 0x9ECFE847ECCF6C5E, 0x60E68184C974253D, 0xED6AB7636CDD66F8 }, /*CF*/
545+ { 0xB6C9DC4E954DEC83, 0x337A86D43C1E137B, 0x611A5CECFD4FD4F2, 0x4FABE0C6259F490A, 0x274393117710FEF9, 0xF80A64FFDE29B591 }, /*D0*/
546+ { 0xCAB995B447838136, 0xF8BAEE20D66998C9, 0x037F8691364D2B07, 0xF711FE824949F810, 0x0D1B4E2773B4E944, 0xFABA24FEC54F5E29 }, /*D1*/
547+ { 0x308C0B2974968FCE, 0x305CE82B64FDE7FA, 0xCBB957FA7AC79C07, 0x938BB1699D7C5FB1, 0x4DFC5FD652B4D859, 0xC76D7FC21D9AB354 }, /*D2*/
548+ { 0x213F9D2ADEB6B2B9, 0x0A501ADE808BA7E6, 0xE1F1A9F9AD58121D, 0xE1DA4CE9E3D30307, 0x4F8FF0EEBD51C22E, 0x5EAF5D79C0C902F0 }, /*D3*/
549+ { 0x66D86B9486FA29FD, 0xAC59FAC357C6881B, 0x6BC55595A36E36A6, 0x162BF06D315103EC, 0x126CF6AA5E1F26F7, 0x9DF080C49CCA232A }, /*D4*/
550+ { 0x26A2DBCA3C8D42FE, 0xA09DCB40FB746B29, 0xCB007706B3E9B9B7, 0xABCE248527C87837, 0x825E3DF5D74B619E, 0xF2D7FC9D9CB58C30 }, /*D5*/
551+ { 0x5CA546BA21141BE3, 0x4588716BD734AA98, 0x4AEEE69AAF4D57A5, 0xE01ED8CBD87F4734, 0x243AA59D601A4FB6, 0x3EACC74DBBE7E0F5 }, /*D6*/
552+ { 0x123DCC7D18D37E12, 0xA9D7BD9B59849E03, 0x8944A203A613C897, 0x17612271EE2EC452, 0xCFC11C233E5F2219, 0xF0A47DE1B0F8FDF0 }, /*D7*/
553+ { 0x4D84263BE85828AC, 0xC45768F30F7393CF, 0x0D4CC4C0F7F80A70, 0x017880DD846965FE, 0xC3BC9F2DBBE68DCC, 0xC236C7E247AA3536 }, /*D8*/
554+ { 0x8EB4E4B8B7DA54C3, 0xFA1427A6D1389409, 0x744449AB8B19F0B9, 0x6BFBE32B2D0BDB94, 0x91313EB6E06C4FF5, 0x0170A64FE878578D }, /*D9*/
555+ { 0x179E05C17E3694F5, 0x31599DAEA9E72F8B, 0x028704B1352027F3, 0xDAB6F4975B6EF09A, 0x5E3E730ABC6E8FE7, 0x41753647414763D1 }, /*DA*/
556+ { 0xDDBA4F2D0434B98A, 0x0FBAC522F3DAEAAC, 0xD315AED4BB31715E, 0x5C1F3D78EF9E5425, 0xB8DD542D8BF637EB, 0x5FA8A2EEE095CE1C }, /*DB*/
557+ { 0x87519C3B117EDF1A, 0xF7C469924B306E46, 0xD2C859D56EE93FD6, 0x7E43975DB42844FB, 0xB6ECE5FF0483394E, 0x02D62595E91E3398 }, /*DC*/
558+ { 0x326812111FD4C7BC, 0x099544A2C2D81A7D, 0xB429BB12ACEECF49, 0xF916080CAAD15FC8, 0xE814BE190473E0C0, 0x8245A66C5FA6F410 }, /*DD*/
559+ { 0x7C28F51D33181D06, 0xC2E1BFACD6F225FD, 0x6D7477373FB058CA, 0x273120A4ACBA0FB4, 0xE740E22190BC3F2F, 0xEBF7F50765758830 }, /*DE*/
560+ { 0xA9D4BB665C151EB1, 0xC6A1EA32577F1B57, 0xF12A0091BBD1C87A, 0x52EDEB266D0D06A5, 0x6682457922D38306, 0x9E208003AC81FFE1 }, /*DF*/
561+ { 0x88456DFF8FCC14EE, 0xB7DC6813F9D16338, 0x774C779B6719CD40, 0x421EAD66567CB6CE, 0xEF04E66F4FB17361, 0x708C07F995B8EE67 }, /*E0*/
562+ { 0xFD516C065215660A, 0xBC97FC5E0F7C426D, 0x3D72E2DAB55CE389, 0x48BB97924B7289FD, 0x01DBC3476578FDA5, 0x5464B44925146D56 }, /*E1*/
563+ { 0x12B45F28FE734036, 0x2BAB852D174B4C3C, 0xF0D3F5F0A0D12AFA, 0x3E09CE8FC0F88FB1, 0xBA2BE405CF690227, 0x3100CDADAD5E9BAC }, /*E2*/
564+ { 0x43C5DB2C16CBF0F3, 0x4158F77B00AF1683, 0x048F4888D0AE4B4A, 0x36AD98F815351E5F, 0xC7D6309CAF1F7A02, 0x4EFC524D45B4F6C4 }, /*E3*/
565+ { 0x254F60E0A929D2C3, 0xAEAAE6B4C271D87F, 0xD0DC0C713AA202AA, 0xD75004DAB803027E, 0x822FFE90F2BDF421, 0x9998FF9D9599BE72 }, /*E4*/
566+ { 0xF4F26F3D3DAA4018, 0x63A3CC4733CFEB16, 0x596209EB60AE0BDD, 0x43BCB7F9F0D863E7, 0x6505D0951F747F58, 0x9A34D71F7A102D47 }, /*E5*/
567+ { 0x6A06660A549ABA78, 0x263EF1081353B190, 0x096735234BA57B0D, 0x1D4E120293CE8CC0, 0x4E4A3CD82A707C44, 0x699027EE00372934 }, /*E6*/
568+ { 0x0E0D83FCE670DBDA, 0x9F04D71D37DF79DE, 0x9443D35035446607, 0x101FB87DCE888457, 0x627BF79224057C18, 0xDC4000FD953FCCCB }, /*E7*/
569+ { 0xFF6901D6C9FFE0A5, 0x2CDAADDF05DF6DEF, 0x98DAF476D3EBBBDE, 0x92D37135CE42C5B2, 0x45187D72CB51905E, 0x9B34C328AC445E42 }, /*E8*/
570+ { 0x593B4F221871A532, 0x5B58EEC73E4A07D9, 0x14A3579B51593BA6, 0x2D7C1D6AB98636FB, 0x9B51F3C6582D4171, 0x482BE23EC7FBBF93 }, /*E9*/
571+ { 0xCF88AA1D3E0FC932, 0x2118F037989B0264, 0xB37DAC83C4AD9E9C, 0xACDE94CC47AA2BAA, 0x118839C26BCD83CD, 0x32B5843A3193C9DB }, /*EA*/
572+ { 0x273694EBF59C4C26, 0x43E86EDEE50D48C2, 0x67F97093ED643CDB, 0xA4AF5201D787AFCE, 0x88E89F3243AC55FA, 0x48CA4CCA84975E2F }, /*EB*/
573+ { 0x07F23D3790D99634, 0x5352170C09973E9E, 0x4FF7EBEFD208181F, 0x5D097ED48E177DB8, 0xC83233D54225EDD5, 0xBDB2981A360C76CD }, /*EC*/
574+ { 0xBF7BB735C21F63AD, 0xD42AECB81B9AC971, 0x4184209556619D2B, 0x56FB088DB24AB737, 0xEF459017CC4ED7CD, 0x68894E750102D4F3 }, /*ED*/
575+ { 0xEC3009E11646864C, 0xABB76EBE218996B3, 0xA44366E48B433684, 0x0250CD9B5F8F205B, 0x37F4022177866A6A, 0x21DC8EB446BD99DF }, /*EE*/
576+ { 0x0EA6152DA50313DB, 0x4B18FCBD7B7F2AA2, 0xA520BD2EA4D34091, 0x9293C20836323441, 0xF72FAA3F44FC8B1F, 0x1AE7A9220C877A87 }, /*EF*/
577+ { 0xA2F2E7EC8BA8BE87, 0x99784F38EAC42DF6, 0xD018F5FB1F54A5DE, 0x8EDB8A128F89A8EA, 0xE9F4FD01005F0A25, 0xF6865090F443A384 }, /*F0*/
578+ { 0x648DF1028E44B6C8, 0x239AAE12588EA54E, 0xC73245098AEC57B2, 0x39B69938F8D4B60E, 0xE98CCDA118CC7F99, 0x6564349C25C899AD }, /*F1*/
579+ { 0xEEBA071910AE8CD7, 0xAE13D4E444718CEB, 0x5A38CCEA27116EC0, 0x6626F950B9449503, 0x4D20BE0C08D92A2D, 0xC099D6E99A849DDB }, /*F2*/
580+ { 0xB96DF109572B1DEB, 0xCD4EFA1EEF503627, 0x2092C32B138766AE, 0x5F738409FAFC1CCB, 0x48CEEF9F8712DBD0, 0x4A20E8766AF8C679 }, /*F3*/
581+ { 0x13FA0D8677476531, 0xF6560311FA218AFF, 0xDD829DF52780CE19, 0xA82A13DF3D99E4F5, 0x5570CF897B7844C8, 0xB4E0BA76CD6CCCCA }, /*F4*/
582+ { 0x5E6358BD596DCA88, 0xC480A84997C11DC4, 0x44BDFDA1C4162793, 0xEA575920359081B6, 0xCF404DBDDE42A8B1, 0x6DB72A06F75FE7FC }, /*F5*/
583+ { 0x2FFE4156076B8F69, 0xBE08BD673985DB1B, 0x2EFBB12338712477, 0xC3DAC6CA86CBC223, 0x00F0141DC65C1921, 0x694B556816B81608 }, /*F6*/
584+ { 0x590CEF2457F28B3C, 0x09B6C56115EC28B3, 0x3D38681EF0B9A6B0, 0x5D6EE687F269E86E, 0x36E01FE904D7F496, 0x7A384C59557A56E7 }, /*F7*/
585+ { 0x1C06EC0F2387A7F4, 0xA1C441581DDF954D, 0x61FA1425D4E1CC47, 0xBA7C9CA7801198BD, 0x309C7389F48046B8, 0x6CC511F3581F3A56 }, /*F8*/
586+ { 0x50F49296D440C856, 0x972CDAF27319B835, 0x2D355D862AA6B78B, 0xAF1BC5AFDAB3343A, 0x4B421C12E8AE0F14, 0x37592D957F1AC660 }, /*F9*/
587+ { 0xA0A45CA6265E0FD3, 0x4623CF6A78E8CB75, 0xD055864C565E57B7, 0x9B1487DC5803BF9E, 0xD9B85F561B55CB24, 0x4139E1014A64E67F }, /*FA*/
588+ { 0x2634AABA637740C3, 0xEB490F3ADFEBFECA, 0xB968932FDDF0AB43, 0x4A481F40FCFDE9B2, 0x4E26D3F72A9CA725, 0x59B90F4C85A3389A }, /*FB*/
589+ { 0x2D859DB3E1C4F01F, 0xF78DCB6825F90549, 0x5E639D6F79843CBC, 0x063866DA32B0E564, 0x1DC17D7032F46923, 0x64CF9FD8F825A61C }, /*FC*/
590+ { 0xD2DE7DBA02DC8648, 0x70860B4EFE423C78, 0x130846413C803BEE, 0x97EFE51BD7370CD7, 0x677250C63776F48B, 0xBBD1BB68B76A158D }, /*FD*/
591+ { 0x3A9EE16977A19B3B, 0xF229BE1E11B2120E, 0xB5B4E6E443C31DB1, 0x3DD07F9C6595FDBE, 0xB4498DAB67547C34, 0xAB43F4D1B9166314 }, /*FE*/
592+ { 0x08FC179DE2DDE233, 0xBCA1827680C614BA, 0x2C5229280DAF459C, 0x1B522BC4EC0527A7, 0x84125C25BF23DBCD, 0x7850D044113F83FB }, /*FF*/
593+ { 0x1D968E3B41E8C8BD, 0x52F0B3C77BEED767, 0xB916233D479F860A, 0xCEEB3FDA20E4BE56, 0xEB8F74A25AF28C6B, 0xBFC13FA4B59E4E49 } /*ZZ*/
594+};
595+
332596 /* Table MIX
333597 * 257x6 matrix containing pre-computed mixing indices with HamD(a,b) >= 2 for each possible pair (a,b) with a != b
334598 */
@@ -592,278 +856,14 @@ static const byte_t MHASH384_MIX[256U][MHASH384_WORDS] =
592856 { 0x01, 0x04, 0x00, 0x05, 0x03, 0x02 } /*FF*/
593857 };
594858
595-/* Table ADD
596- * 257x24 byte matrix containing pre-computed random 32-Bit numbers to be used as addend
597- */
598-static const ui32_t MHASH384_ADD[257U][MHASH384_WORDS] =
599-{
600- { 0x13B2C18C, 0xAF30E30D, 0x5F10AD61, 0xE8F5FFA6, 0x7952A3AC, 0xF215E976 }, /*00*/
601- { 0xA7C9CBBA, 0xBF3C579D, 0x8C2062B3, 0x55AAFE8D, 0xF8151801, 0x281703B4 }, /*01*/
602- { 0xEE69CC38, 0x74AC54A9, 0x84C8483B, 0x059B5078, 0x3F3319EE, 0x4B248CD1 }, /*02*/
603- { 0xEE7E0264, 0x3D788335, 0xD4865073, 0x1B74418F, 0xC65AF6E0, 0xA30D5853 }, /*03*/
604- { 0xA2C86BBD, 0xB7A852D3, 0x5F97613C, 0x5F75197A, 0xD78805E8, 0x153532A9 }, /*04*/
605- { 0xF2D5318B, 0x5C30FD1E, 0x3877136D, 0xC46F4EDD, 0x97A40BBE, 0x9FCFEE6E }, /*05*/
606- { 0xDAB8050C, 0x651C9456, 0x7210B2E0, 0xEAB621CF, 0x60F2036E, 0xDBF9CFC0 }, /*06*/
607- { 0xD8575E14, 0xF084AA1C, 0x9C1E76C0, 0x336F6CA9, 0x8771CBFE, 0xC2132D38 }, /*07*/
608- { 0x86A377A0, 0xBFF921DA, 0x16AD6B57, 0xC8880A45, 0xAEA6CEDD, 0xF79BA939 }, /*08*/
609- { 0xA008749B, 0x293CFB8A, 0x7E8A4C92, 0x5E84F211, 0x3CCF7485, 0x8E54C33E }, /*09*/
610- { 0x9A78176F, 0x7872ECAB, 0x7EE61199, 0xF739F0CD, 0x8B2BA20D, 0x72B339A5 }, /*0A*/
611- { 0xF9B79F6C, 0x27F44D63, 0xD0E5A65B, 0x06092C7E, 0xC4EB60E6, 0x8304D410 }, /*0B*/
612- { 0x9C9A92DA, 0xF8E68CD1, 0x6DA77F4A, 0x2013EB87, 0xD5D48685, 0xD0D7A557 }, /*0C*/
613- { 0x12608877, 0x5B6310FD, 0x41296D3D, 0x57435D83, 0xA906DFDC, 0x3A1A6D72 }, /*0D*/
614- { 0x5112C7E6, 0xEBF6D751, 0xFD3026A5, 0x08A39D23, 0x54134FF1, 0xEC5B2C8A }, /*0E*/
615- { 0x2F52EEE6, 0x40A853D3, 0x358BED81, 0xC76B62DF, 0x8E786E4F, 0x75F63677 }, /*0F*/
616- { 0x54ABD27E, 0xB7EE2BB8, 0x17756DC1, 0xB6DE3BBB, 0xA992B540, 0x66A4E44A }, /*10*/
617- { 0x9B8C6F0B, 0x3CA2CEB1, 0xBD583C09, 0x14713651, 0xAA79A7DE, 0x28C3D1C5 }, /*11*/
618- { 0xABB4F78B, 0xD3E194D8, 0xAA0A85E3, 0xC9C7B196, 0x3885710F, 0x0392E30B }, /*12*/
619- { 0xA122EA90, 0xC71A2436, 0x223F5C82, 0x8CB0A4FF, 0x5B9B57D1, 0xF16A689D }, /*13*/
620- { 0x7AFA3B0D, 0x75E05D93, 0xBE7D07A1, 0x89C88598, 0xFBDBF0C1, 0x6C47F63E }, /*14*/
621- { 0xD3D2BA3F, 0x61C4F0CF, 0x9F4B127D, 0xEAAFA57A, 0x08CE931D, 0xC9EC6985 }, /*15*/
622- { 0xB0792CA2, 0x39D65B2C, 0x7D2FE4DD, 0xF4C6E55F, 0x6F26B34B, 0x392C16F2 }, /*16*/
623- { 0x59EFBF60, 0x056FAD5A, 0x206CBB30, 0xDCAE65BE, 0xD679DCAE, 0xDD4EE6DB }, /*17*/
624- { 0x3FE0CBE3, 0x3D16C1AE, 0x2E10E8AA, 0xEC4D3C7F, 0x3EC26B8C, 0xC1952F33 }, /*18*/
625- { 0xD515AA2F, 0x2400E7A5, 0x4E71FE3A, 0xD78DFE09, 0xB3CD989D, 0xA031E3EB }, /*19*/
626- { 0x684B950C, 0x1F449B7A, 0xD5BDEF26, 0xEB6562AD, 0x2B28F5F3, 0x0A3DF9F9 }, /*1A*/
627- { 0xEC3811B9, 0x7F53DD87, 0x0BA9B287, 0xB3D46AAF, 0xD30D9034, 0x8F0AEEF9 }, /*1B*/
628- { 0x76366768, 0x81F9D6A1, 0x3386DB56, 0xD9B20BBF, 0x5601E297, 0x30646236 }, /*1C*/
629- { 0x7FDA5C84, 0x953B0881, 0xAC4ACC72, 0x35565AEE, 0xD3540FDB, 0x072C64DD }, /*1D*/
630- { 0x5F19ABAA, 0xC91EE5F5, 0xF5AFB55E, 0x2BE896A1, 0xE1C409D5, 0x74E9FA0F }, /*1E*/
631- { 0xD372CD9F, 0x5B676E7C, 0x4CFB5AF8, 0xAF377F22, 0xC931858C, 0x5445CE0D }, /*1F*/
632- { 0x423B2C7F, 0x58695641, 0x53F7F865, 0xDD8FF14B, 0x3787B012, 0x769070D6 }, /*20*/
633- { 0xDCD0417D, 0xF914813A, 0x3841DBBF, 0x601B29BE, 0xB4B7B901, 0xDCC3A649 }, /*21*/
634- { 0x3BE29DEB, 0xEDF9A0D0, 0xF2DDFA0F, 0x922F23CC, 0xC4563BC3, 0xE4122F72 }, /*22*/
635- { 0xE88B4666, 0xDDCEBA90, 0x5B7B313D, 0xBE0FDC0A, 0x5D4431D9, 0x6D05CEB5 }, /*23*/
636- { 0x6BF2646B, 0x9E4BEF14, 0xB17DAA68, 0x731EB896, 0xB47996F6, 0x3C0699E9 }, /*24*/
637- { 0x3E88E294, 0x66F97202, 0x701DBD04, 0x91CF6F7E, 0xBC81A5D4, 0xD5B632EB }, /*25*/
638- { 0x5F0C32D5, 0x0118B38F, 0x7C72778B, 0x45E251C9, 0x0EE9A676, 0xE18CED9A }, /*26*/
639- { 0x0DEC4615, 0xBCFACA34, 0x7A33CF9B, 0x7FFC4202, 0x3C036C98, 0x2FB0117F }, /*27*/
640- { 0x4BE81882, 0xD12BC6B9, 0xFAAC1942, 0xC825B793, 0x3D235059, 0x0C0DB0B2 }, /*28*/
641- { 0x1D4049E2, 0x2A84B86A, 0x537FDB7E, 0xEC81B40E, 0x7DDA393F, 0xAFA3D7D0 }, /*29*/
642- { 0x036B6D44, 0x9BDE4C03, 0x805ECC65, 0x2FB48667, 0x894CB979, 0x8B79B9CF }, /*2A*/
643- { 0x26A1E724, 0xC041E47B, 0xC552045C, 0x5DF502CC, 0x86B77E47, 0xCC37F33D }, /*2B*/
644- { 0xF8733714, 0x8049E9F7, 0x00262BDF, 0xD6E324DB, 0xA286C1A4, 0xF44E998B }, /*2C*/
645- { 0x2AB8AD83, 0x71FE5EF6, 0x4905D6E8, 0x16DAAD77, 0x04750CAC, 0x00EE14E7 }, /*2D*/
646- { 0xC9E482E1, 0x54B04F45, 0x05C6636B, 0xA3501ED2, 0xF9FB2A23, 0x895FBECC }, /*2E*/
647- { 0xAD3D24C5, 0xD0017ECC, 0xDFA881B8, 0x48DC3C52, 0x97E69D2D, 0xEFC5D21C }, /*2F*/
648- { 0xCC56C844, 0x875BF026, 0x8AF0DB7A, 0xC8AA9F7B, 0x7977E1D8, 0x96557C38 }, /*30*/
649- { 0x51704FD2, 0xC451174E, 0x1DC0C5FC, 0x3C690432, 0xEE113D49, 0x1C2F3BE1 }, /*31*/
650- { 0xE67BA4D2, 0x1CA12AD0, 0x4C5E09B0, 0x8CC90A26, 0x6BB15CEF, 0x04A20BCF }, /*32*/
651- { 0xF3A8861E, 0xABA8B64B, 0xA71D73C1, 0xB33F5566, 0xD780C2BB, 0x35A4F1B3 }, /*33*/
652- { 0x3AC6E50E, 0x058237EE, 0x28CCD3E2, 0x65C138E9, 0x36165F62, 0xBA461352 }, /*34*/
653- { 0xC190A454, 0x3BB14A4B, 0x6EAA4F8B, 0xC454F8AF, 0x23FB09D9, 0xCC8B3B7A }, /*35*/
654- { 0x9A7B55A8, 0xB97F3D39, 0xBD95F71C, 0xF8765FE4, 0x60E434BF, 0x4D43C8E3 }, /*36*/
655- { 0x7449A794, 0x17C054E4, 0x031E4411, 0xCB8AD1A1, 0x49ADAE58, 0xBBC53D1E }, /*37*/
656- { 0x44D4328B, 0x609D1567, 0x1D278E05, 0x5ADD1AA9, 0x98C8FD64, 0x56B954FF }, /*38*/
657- { 0x22BF5E54, 0xDAF9D8A6, 0x6D232343, 0x488EF3C1, 0xF0147776, 0x4185C674 }, /*39*/
658- { 0xBEBF70A3, 0x1EC08D69, 0x404E9F1B, 0x445D9117, 0x3CB72E80, 0x475685E5 }, /*3A*/
659- { 0x563E64AC, 0x71D3014A, 0x72741CFB, 0xF22ECB26, 0x4551C41A, 0x0023EC43 }, /*3B*/
660- { 0xE3E9DD2B, 0x37C31996, 0xE55E66A0, 0xD12D1F0D, 0x342599B5, 0xC56F482F }, /*3C*/
661- { 0xF1A9E9E3, 0x770E2D8D, 0x4B0BA236, 0x797D4C71, 0x5514E96F, 0xBD938686 }, /*3D*/
662- { 0x2A55DF59, 0xCC18982D, 0x093B8D26, 0x78F7470A, 0x4F719A03, 0x4A437F9E }, /*3E*/
663- { 0x97AB2269, 0xAC22A233, 0x5D3D1D17, 0x7906351E, 0x3DC9583A, 0x7FEB2192 }, /*3F*/
664- { 0x7911E3A5, 0xD3BC66BF, 0x70B96F33, 0x13C364F7, 0x6BE4373D, 0x95EE1CA3 }, /*40*/
665- { 0x624B1BB9, 0xB1D57F69, 0x23D6BEDA, 0x14C47359, 0x53C61BBE, 0xA2630CBA }, /*41*/
666- { 0x8614B657, 0x30CD13F1, 0xDCFFBAC2, 0x091A6966, 0xD18999EC, 0xAEA3C354 }, /*42*/
667- { 0xCEBB00CB, 0x44C14586, 0x97BA2ADE, 0x58E0E16F, 0xEFD68B88, 0x757742C8 }, /*43*/
668- { 0xADD6619B, 0xC64480CE, 0x9A15BE92, 0x7E2C055C, 0xE0E34FFF, 0x53B744DD }, /*44*/
669- { 0x18598EB8, 0xB9108E1F, 0x94B5C815, 0x79FA3053, 0xE01C1377, 0x7967D7F2 }, /*45*/
670- { 0xAFFFBD10, 0x0DEAAEF3, 0x1C66243F, 0xDD6601F3, 0x2012069B, 0x43045C84 }, /*46*/
671- { 0x542CCA4B, 0x5878A842, 0x292F30B6, 0xAABB827D, 0xD8230B3D, 0x3262082F }, /*47*/
672- { 0xD964DDF0, 0x4D8351A6, 0xFC140DD6, 0x2D6B8672, 0x0532D394, 0xCA677441 }, /*48*/
673- { 0x9B58B961, 0x9BF99AF4, 0x478A9887, 0x4A77DE7C, 0x0560B7D4, 0xB1A31887 }, /*49*/
674- { 0x3C3415CC, 0xAC4B8189, 0xB06793FA, 0xC0B9C0F2, 0x479D1B15, 0x1FA353D8 }, /*4A*/
675- { 0x5307D37A, 0x8E7684EB, 0xE9392362, 0x6D06BA38, 0xC1843AB6, 0xA7ECDDCE }, /*4B*/
676- { 0xAB93AC3F, 0xB8C34E0D, 0x17479CBE, 0x39B9FF22, 0xCB2532B3, 0xB4169E93 }, /*4C*/
677- { 0x6C7B4787, 0x295048F3, 0x27401801, 0x592ECAB0, 0x8D36903A, 0xCDC7255A }, /*4D*/
678- { 0x1BE412A4, 0x726A831D, 0xEB00B75F, 0x173BFCCA, 0x952FAEDB, 0x43EA817D }, /*4E*/
679- { 0xFBC40010, 0xD10BDB17, 0xAE3D20AE, 0x20347FD2, 0xAFF07636, 0xA586CC6E }, /*4F*/
680- { 0x03000F48, 0x2C7332CC, 0xB0020AAD, 0x09ECB64D, 0xDBB82864, 0x8A9CF7C0 }, /*50*/
681- { 0xC0D05E64, 0x11921D7D, 0x92F79AD0, 0x4C1F5EC5, 0xB38AA2C9, 0x0511831C }, /*51*/
682- { 0x8D190938, 0x6F3AE8FB, 0xC8EDF48F, 0xF26CAB54, 0xB0E7FAA4, 0x16C2AA21 }, /*52*/
683- { 0x359C9C58, 0x889140C3, 0x5E70BCB7, 0x58ACF356, 0xC3BDB2FB, 0xA888D5D5 }, /*53*/
684- { 0x84F6B9EF, 0x5C554168, 0x4A8DCAB7, 0x5DEDC340, 0x44C57BF7, 0x31BFADDB }, /*54*/
685- { 0xC42C7720, 0x94DAD11B, 0x29FC745D, 0x3C1F4639, 0xE52F6DFC, 0x97DDAE2E }, /*55*/
686- { 0x0C8B14C2, 0xB0D980FE, 0x135623B6, 0x5C72D71F, 0x5B5B8DCA, 0xDB4A99C0 }, /*56*/
687- { 0x5E7BDF3F, 0xD2885F09, 0xCF46F88F, 0x1EB9EFCD, 0x3CBB6BE0, 0x907C7544 }, /*57*/
688- { 0xBD9BD888, 0xA6806C72, 0xE6C0B60F, 0x7B5B2DCE, 0xE7AB0E6C, 0xE220CDC2 }, /*58*/
689- { 0x8C55577B, 0xA5023515, 0xC6630DE7, 0x3D3C780A, 0x3650EECC, 0xC14EEBCB }, /*59*/
690- { 0x709661B9, 0xAE770422, 0xA6CF70C5, 0xB33FA2FE, 0xEB3AF10A, 0xF4228B91 }, /*5A*/
691- { 0x244EA452, 0x1580EB30, 0xDFC147E7, 0xF96FC12E, 0x17F51E9B, 0xE0E70E7D }, /*5B*/
692- { 0x344FD50E, 0x8F84DFB7, 0x8539197A, 0x2FFA298A, 0x58E522A5, 0x6B46761B }, /*5C*/
693- { 0x00047013, 0x4663B6F3, 0x58184E79, 0xCA5F3449, 0x9607C508, 0x27FA414C }, /*5D*/
694- { 0xEFC168C3, 0xDC017B33, 0x7F31A48D, 0x6B4B3C6E, 0x3CD05242, 0x653C3728 }, /*5E*/
695- { 0xAAC9448A, 0x25BFB909, 0x42213EB3, 0x0B6EE0F7, 0x70321152, 0x40B5B6EA }, /*5F*/
696- { 0x4F2547E3, 0x84C88B48, 0xC789D44C, 0xE8317D46, 0xFB1E318E, 0xA3338DD8 }, /*60*/
697- { 0xD80FB73E, 0x8144D28C, 0x33A441CC, 0xB7736354, 0xA91B2A6E, 0x3C973147 }, /*61*/
698- { 0xD0C2FF1D, 0xF80BAB81, 0x7E006359, 0x5A050090, 0x928374BC, 0xE636C5E9 }, /*62*/
699- { 0x29C96D66, 0xAEE27C6C, 0x267CE151, 0x40747378, 0xB04CD4D9, 0x5140C1F3 }, /*63*/
700- { 0x156B775E, 0x9A4D35D0, 0x84DA5F3B, 0x1E794E7A, 0x6C15952D, 0xBE34D677 }, /*64*/
701- { 0x95FBF1EB, 0x4BCA6744, 0x72F0776C, 0x7C11B4CD, 0xA5674E3C, 0xA7022DA4 }, /*65*/
702- { 0x6C7098F6, 0x3535A203, 0x63224F93, 0x4FE5F6F1, 0x4FD60AC0, 0x6284F031 }, /*66*/
703- { 0xB5F1757D, 0xF0A2E1A9, 0x4046267D, 0x2365E6CA, 0xF01C84B7, 0xA27177F5 }, /*67*/
704- { 0xF7A8A55F, 0x28E4D223, 0x6933DBB2, 0xC06E657C, 0x404C94B7, 0xCDC9278E }, /*68*/
705- { 0xB88FDB49, 0xDB3C1CB0, 0x6643719A, 0xA78A1157, 0x74895649, 0x9B35EA26 }, /*69*/
706- { 0xE05200A6, 0xAF8CBC8F, 0x76366935, 0x8C653672, 0x10A3F99B, 0x382F29AA }, /*6A*/
707- { 0x29AB3900, 0x289C44C4, 0x1563E45F, 0xA90A65DE, 0x30A0BFEC, 0xAB9FDCCE }, /*6B*/
708- { 0xE1F20AA6, 0xEC9D69CA, 0x03256EA4, 0xD7BFB23B, 0x9A838907, 0x2CAD4277 }, /*6C*/
709- { 0xDD6B37C3, 0x816E8914, 0x50F5D946, 0x392C3B93, 0x3F2362CD, 0x5BFEF741 }, /*6D*/
710- { 0x6D758401, 0xDACC8B90, 0x290771BB, 0xED79A318, 0x1A87526F, 0x2F2E3E76 }, /*6E*/
711- { 0x3383AD16, 0x0F4744FA, 0x8A1C7B37, 0x8ECC2413, 0x7732295A, 0xA3F6A1AF }, /*6F*/
712- { 0xF1B25367, 0x233EEB5B, 0x279D52B0, 0x9A046CCA, 0xB0D76507, 0x885963AB }, /*70*/
713- { 0xEC73E1F9, 0x6FAED772, 0xEC780F72, 0x46C50E26, 0x6221DB5B, 0x89CA75E6 }, /*71*/
714- { 0xDAD89F5D, 0x59DB2678, 0xA579C018, 0x90DA08F5, 0xBE9E795E, 0x11E4D988 }, /*72*/
715- { 0x2373AF1F, 0xCCCFD9AD, 0x365E9E15, 0x743A1FF1, 0x13057CED, 0x6DD11662 }, /*73*/
716- { 0xE32ACFAB, 0xEC659E78, 0x0CB472F2, 0xDD02907E, 0xFFCE3802, 0xB91F1963 }, /*74*/
717- { 0x43CC1C2D, 0xA4239D99, 0x776E306B, 0xF5749A88, 0x9CED6490, 0x2D9DF0DC }, /*75*/
718- { 0x3D8A32E9, 0xF3DB557E, 0xA7D3EEF1, 0x329C6341, 0x3A6D3C73, 0x09D021F8 }, /*76*/
719- { 0x74DE7662, 0x8FB0F13A, 0x6793D109, 0xEFE86A86, 0x9A396326, 0xEF96D376 }, /*77*/
720- { 0x7C921DE2, 0xC24C55D5, 0x3544D45B, 0x5686D9A2, 0x5DF25635, 0xEFC7E954 }, /*78*/
721- { 0x6C48781D, 0xEA8C8306, 0x757AAD29, 0x40115C87, 0xA92EC03D, 0xF36D3EC2 }, /*79*/
722- { 0x8A48EC01, 0x6AC7EEC6, 0xE0FF1268, 0x0A5127C7, 0x0244071E, 0xAFB6D0ED }, /*7A*/
723- { 0x99B29D33, 0x5E8DCDCB, 0xDA2ED4A8, 0xD9CCFD7E, 0x668BE4DA, 0x081858C3 }, /*7B*/
724- { 0xDDDC6207, 0xB52329C3, 0x341DB972, 0x4FAB30E8, 0xFF821F4D, 0x47B68C9D }, /*7C*/
725- { 0xD59521A6, 0xEB85350D, 0xCCF547C6, 0xEF50E0A2, 0xB549AF5A, 0xFBB0C484 }, /*7D*/
726- { 0x5217E9F4, 0xB27C2313, 0xC82B22AF, 0x619A46D0, 0x4E0FF4FA, 0x1AB7FED5 }, /*7E*/
727- { 0x913EBFA5, 0xBE552440, 0xB81E27A5, 0xFEF80DA9, 0x5C100864, 0xBC3F8EEE }, /*7F*/
728- { 0x27627613, 0xDD53D691, 0x19BAA1BD, 0xD179E811, 0x921BFDA0, 0x3E1AC539 }, /*80*/
729- { 0x17CAC507, 0x6AA98FE0, 0xFB02E085, 0xF6D0EEFB, 0x676799F4, 0x12359D40 }, /*81*/
730- { 0x554D9AEE, 0xDEA25249, 0xC4BC501C, 0xF011B4B2, 0x58B984DC, 0x929C6B5A }, /*82*/
731- { 0x3217ADC8, 0xFD9A6DEE, 0xC3921E15, 0xABD659C1, 0xABD33969, 0x93306767 }, /*83*/
732- { 0x35328CAF, 0xF3C4D7A2, 0x07B0347E, 0x3DF627E5, 0xB273C78C, 0xADF208CD }, /*84*/
733- { 0x2BD7721F, 0xF5783803, 0x1BBB9624, 0x55B4B105, 0xFFB3F3CF, 0x4CF2E1B3 }, /*85*/
734- { 0xD165DD68, 0xB1C01D6D, 0x1D101E62, 0x3A0A5662, 0x3C8722D2, 0xB744FF5A }, /*86*/
735- { 0x449B8418, 0x29C5CEEB, 0x974403CD, 0xE49660AB, 0x82145199, 0x20CEB67B }, /*87*/
736- { 0x7C2BA473, 0xE7AE8079, 0x31432DD8, 0x8787F5A9, 0xE04228B5, 0x33392F2F }, /*88*/
737- { 0x962716FA, 0x0A6F1D12, 0x46B3F858, 0x62E219C7, 0x861E2AF1, 0x5866B232 }, /*89*/
738- { 0x57B30251, 0x62F51A37, 0x59324168, 0xF0836E30, 0xC083BC01, 0x778BB1AE }, /*8A*/
739- { 0x71A1C89E, 0xECAC3A4C, 0x3CBBCE64, 0xD1F58D2F, 0x6A5C6E06, 0x61C64195 }, /*8B*/
740- { 0x7C05A21C, 0x155BEAD9, 0x7EDDFF5C, 0x78BB8C98, 0xA8E84E11, 0xC5EEB1F9 }, /*8C*/
741- { 0x439FFFB3, 0xF1AD1346, 0x9C898BB1, 0xFAB4D098, 0x30EF7863, 0x8B7646E8 }, /*8D*/
742- { 0x07B9817C, 0x96A9A389, 0x4698863E, 0x024356E1, 0x38AFF21A, 0xF4117D09 }, /*8E*/
743- { 0xA70B2873, 0x488A3145, 0x43A5C731, 0x12A49FD3, 0xBD0000E5, 0x9B5E9001 }, /*8F*/
744- { 0x17D6630F, 0xF3AE0FCC, 0x36D04FEB, 0x20B8C4A8, 0x717582B9, 0x48538D7C }, /*90*/
745- { 0x91B045FE, 0x3FDCF695, 0x356D0D5C, 0x2EB8808E, 0xFD4E4CE3, 0x1DC99A76 }, /*91*/
746- { 0x44F1E72A, 0x4530F446, 0xB25545D6, 0x5080498D, 0xB8C6D8B2, 0xCB32B8F4 }, /*92*/
747- { 0xA8062C57, 0x3F3EDD44, 0x48EEE98C, 0xE25EB954, 0x1712BDDB, 0x5270DFE1 }, /*93*/
748- { 0x12F901C2, 0x9DE6D999, 0xC5728969, 0x062C5DE5, 0x3C49C5E4, 0x5B344AAD }, /*94*/
749- { 0x7B41A9D4, 0x0017D3BD, 0xAC5A46D5, 0xAFAF2284, 0x45EFCEA8, 0x33CEC63F }, /*95*/
750- { 0xB3EAA2A4, 0x15908324, 0xDCB5FE00, 0xD0F1E9D7, 0x51E362BC, 0xFECBB788 }, /*96*/
751- { 0x2FD5E605, 0xC6FDCADA, 0xE4DF9EEB, 0x22A39E17, 0x94EE60C9, 0xF2CE4D87 }, /*97*/
752- { 0x5E627410, 0xDD58EAC8, 0x76FF0DD4, 0xA51ACFF9, 0x406E5D9A, 0x41F6C488 }, /*98*/
753- { 0x910860F9, 0x8C88E2FB, 0x6F3E3B4A, 0xB563F5D9, 0x3F0FE042, 0xF3BB7251 }, /*99*/
754- { 0xC4720898, 0x174B8899, 0xD027627E, 0xC75E54E5, 0xFE3A0F70, 0xB83A697C }, /*9A*/
755- { 0x97B3FDFB, 0xDE80D5E2, 0x974DAFD3, 0x83506833, 0x51AA7EF0, 0x2751E9A9 }, /*9B*/
756- { 0x486AB0AE, 0x39C74A47, 0x8BE5059E, 0xD306D21F, 0x466C2587, 0xB0C35B18 }, /*9C*/
757- { 0x53D44A4C, 0x4D5C4EDD, 0xEF47022B, 0x03F49875, 0x58EA6784, 0x1DB8F4A6 }, /*9D*/
758- { 0xF36D6C63, 0x283FCE64, 0x1F277678, 0xDA4D0B72, 0x4EEC07D6, 0x8BED9511 }, /*9E*/
759- { 0x5125D019, 0x31DF9C3D, 0x558F39A8, 0x2E823985, 0x360F63D9, 0x61FEB82F }, /*9F*/
760- { 0xE47C41B8, 0xA70EADF2, 0xEE5A94B4, 0x9AA96718, 0x467AF85B, 0x46A2071D }, /*A0*/
761- { 0xEE121014, 0x2EF7A126, 0x63B12F85, 0xAA52F030, 0x8CCF5A69, 0x2EF4C5D0 }, /*A1*/
762- { 0x56E30275, 0x9C3EC92D, 0x03C0ABA6, 0x10816DEA, 0x75ABE59E, 0xA9060355 }, /*A2*/
763- { 0x8C319B84, 0xCDFFB55A, 0x9602A044, 0x4183058F, 0x6C50CAC6, 0x76A12BBC }, /*A3*/
764- { 0x1C25A145, 0x041EF5B5, 0x07420A60, 0x30A79DCE, 0x9AC49851, 0xBA509884 }, /*A4*/
765- { 0xC076D4D4, 0xD5E8731E, 0xAEF1C167, 0x52CE4D69, 0x461243C2, 0x59124BE8 }, /*A5*/
766- { 0xD179B2C7, 0x06EE1498, 0x86EF65D0, 0xC447768F, 0x87F4BF53, 0x00D002C5 }, /*A6*/
767- { 0xFBB7BFA7, 0x83E7FE96, 0xC08A6777, 0x05F43892, 0xB0217F85, 0x2CC91FC3 }, /*A7*/
768- { 0xE8032675, 0xA17040D9, 0xA98BD110, 0x7B746D5B, 0x71AAAD57, 0xCF70C5C0 }, /*A8*/
769- { 0x0732A5B6, 0x08A88647, 0x63EA848B, 0x8922AE62, 0x00377824, 0xE6B642F0 }, /*A9*/
770- { 0x941FF159, 0x0C6FA82A, 0x55D7B637, 0xD5A512AE, 0x47A6A530, 0xB36D7D46 }, /*AA*/
771- { 0xCA49B481, 0xF3788B26, 0x16C0E515, 0x2DAEF7D9, 0x6247A75B, 0x78484BB5 }, /*AB*/
772- { 0x65104E93, 0xAA602717, 0x36EECD02, 0x843F8EE5, 0x29A1ACCE, 0xBDC90BD5 }, /*AC*/
773- { 0x0F62269D, 0x6D370AC7, 0x1A16E7F8, 0x463448CB, 0xB8B864FB, 0xCC9EAA14 }, /*AD*/
774- { 0xA05ADD64, 0xD1544F88, 0x808E890E, 0xAD4307FE, 0xDB9DA315, 0x0A3C9088 }, /*AE*/
775- { 0xDBB49743, 0x821DC0E2, 0xE57A2CD8, 0xE9F06FC7, 0x363E1070, 0x295AA9D5 }, /*AF*/
776- { 0xA326B444, 0x621F4637, 0x92616801, 0xFD1F5FBB, 0xDC6FFEAC, 0x58B11C80 }, /*B0*/
777- { 0x212E49C7, 0xD151D095, 0x4B36A276, 0x2AD77D66, 0xCF1AAC37, 0xF77B7920 }, /*B1*/
778- { 0xA2AB4280, 0x3971A920, 0xB906F07C, 0xD913BA8C, 0x0429D1C6, 0x070BB87C }, /*B2*/
779- { 0x34ABFAAD, 0x8D662459, 0x9C5D03C9, 0xB386D713, 0xAD737CE3, 0x72F9F913 }, /*B3*/
780- { 0x2E8D78B7, 0xA30453D0, 0xF4C54371, 0xD18E0B82, 0x2B2D1995, 0x0333AC78 }, /*B4*/
781- { 0xE1E6FE04, 0x9804A75D, 0xFB1F11DE, 0xD220B6D9, 0x7CB4BC91, 0x6EF76861 }, /*B5*/
782- { 0xBE87A55A, 0x00D797E6, 0x0F6281D1, 0x242235BC, 0xF7A4054F, 0xEA57BBDB }, /*B6*/
783- { 0x987D0049, 0x03C098D8, 0xC0C966D5, 0xD68B7202, 0x0EC76AA0, 0xCE4A6659 }, /*B7*/
784- { 0x701714D3, 0xCC2B4D3A, 0xCA8E5A83, 0x1AE4DF4C, 0x59EDB778, 0x33C0ACF9 }, /*B8*/
785- { 0xE90B0122, 0xE8002693, 0x152B3944, 0x22F42540, 0xC6574494, 0x46C28CE2 }, /*B9*/
786- { 0x72B182AC, 0xA901F7F6, 0x5CFDD45B, 0x39A97979, 0xC1E75D8D, 0x7B3C5A41 }, /*BA*/
787- { 0x639C71B4, 0xBE0FCFF8, 0x526CF104, 0x54FAE329, 0x032098BB, 0xE7B55777 }, /*BB*/
788- { 0xFEAB769B, 0x296C0749, 0xA63BF06F, 0x0C2D627C, 0x84607425, 0xA4F94069 }, /*BC*/
789- { 0xF2C938A7, 0x27D41E44, 0x7E56AA59, 0x6DE46E6C, 0xDBEDFC6D, 0x04401409 }, /*BD*/
790- { 0x32FC8801, 0x8516D260, 0x64D61AFE, 0x96594532, 0x1EBACA12, 0x6F093C6B }, /*BE*/
791- { 0x4DCDBDAC, 0x4DE66599, 0x2794AABC, 0x93FF2F9D, 0x7E2AA11A, 0xF0CF874A }, /*BF*/
792- { 0xDE166A6B, 0xBAC8ED71, 0x36FE1A68, 0xC0F096DF, 0x85B741C5, 0x96BB9548 }, /*C0*/
793- { 0xF1DAF2D2, 0x8BD22114, 0xE6909F91, 0x767E60EF, 0x4CF7FAF2, 0xBB801A57 }, /*C1*/
794- { 0x46BAA05B, 0x20DD6D7A, 0x4B6774B5, 0x9D9DDDED, 0xFDD60142, 0x5351A50A }, /*C2*/
795- { 0x1154D2B9, 0x6243A3C8, 0xEFBA1A3C, 0xD880D653, 0x59CD5256, 0x4BEF63AC }, /*C3*/
796- { 0xBB7F0FCA, 0x8BCF3DEE, 0xEF7CD3E8, 0x409A6EA5, 0xD05B2A11, 0xCB3F8B7D }, /*C4*/
797- { 0x5CDF0286, 0x15AA322B, 0x82F74519, 0x19762535, 0x10AEEA00, 0xA6C6BB13 }, /*C5*/
798- { 0x4F8CCF64, 0xC175F9A2, 0x458A2088, 0x334E560B, 0x3ED94A31, 0xC36FFEA0 }, /*C6*/
799- { 0x2A749029, 0xA780E916, 0x32183706, 0x932F528E, 0x1D50C3E4, 0xE089FC18 }, /*C7*/
800- { 0xAA26728F, 0xC29D086D, 0x61F88E5C, 0x2CEFEA8D, 0xEE88F1DD, 0xC89BBA0F }, /*C8*/
801- { 0xA5E2CD57, 0x629DC4B7, 0xC7726079, 0xEEA440B1, 0x507D7674, 0xA03EED7F }, /*C9*/
802- { 0x23B73098, 0x7BE996C7, 0x6C8BBDDA, 0x7D881A37, 0x12447B37, 0x112E9D40 }, /*CA*/
803- { 0xC21D0A92, 0xD09A010A, 0xCD357AF3, 0x0526B63F, 0xD1E2DF26, 0x4FF48234 }, /*CB*/
804- { 0x950D59CD, 0x0639DBE1, 0x9C332783, 0xFA49C746, 0x953DC7EB, 0x8EB136E4 }, /*CC*/
805- { 0x99A8F4FE, 0x896A1686, 0xDE1BE583, 0x20E3A642, 0x0E65E5D5, 0x0FACDACC }, /*CD*/
806- { 0x4F8ADD7D, 0xC27A7DFF, 0x65438661, 0x04BE6BB2, 0xDF80958C, 0x67369A32 }, /*CE*/
807- { 0x104E92CE, 0x94E19F20, 0x6FAA86F3, 0x9A25E48D, 0x0482204E, 0x912C2D1B }, /*CF*/
808- { 0x28AC8824, 0x81DD3CBF, 0xD4003B0A, 0x5FA83632, 0x5F485E0A, 0x5F819A8A }, /*D0*/
809- { 0xE6D0E6AB, 0x09E97DC8, 0x5E946DBE, 0x7DD90573, 0xF5ECA786, 0xB0BBD0BC }, /*D1*/
810- { 0xB8D377F1, 0x8FA2B637, 0x2B35180A, 0x28464162, 0xC455D035, 0x7DFA9021 }, /*D2*/
811- { 0x6AC52907, 0x2749E4C6, 0x6AD6A4D0, 0x3B7174DA, 0xFE19E3EF, 0xF9F1F40A }, /*D3*/
812- { 0xDB100345, 0xF5D5FFFE, 0x5AAF4546, 0xA95A6CC5, 0xB172E231, 0x92B8E45F }, /*D4*/
813- { 0x617D2C5B, 0xE133BB0C, 0x95CE7C6F, 0xE859BBF1, 0xE12576F7, 0x74D28A61 }, /*D5*/
814- { 0xC284CA4E, 0xCCF3DCDE, 0xC69CF9DB, 0xD397A5D3, 0x02809CDC, 0x7FBC873F }, /*D6*/
815- { 0x177158DC, 0x2B30DC6A, 0xAF526BD8, 0x79E783CB, 0xC8D635C5, 0x68B89A41 }, /*D7*/
816- { 0x350FDBE3, 0x909AA71C, 0xC199C6F3, 0x970566A2, 0x58BF37DA, 0x62CA0756 }, /*D8*/
817- { 0x8B629171, 0x83C60BD9, 0x55E7DE9D, 0x0A87FD89, 0x63165A91, 0xC4BE5C85 }, /*D9*/
818- { 0x7B8B02E2, 0x98B5A8CC, 0x97BE12B3, 0xEFC17CC8, 0x620E1180, 0xBBE6B9D2 }, /*DA*/
819- { 0x97936B90, 0x3059A8D7, 0x99242C99, 0x5212715B, 0x3B40E4A2, 0x47B330FF }, /*DB*/
820- { 0xDEE82F48, 0x9C5862A5, 0x46C98152, 0xDE26C0C1, 0xA07CDCE2, 0xBC69F20C }, /*DC*/
821- { 0xAAEA3141, 0xF840354A, 0x7EE1A095, 0x498F6DAC, 0xEAE8216D, 0xB65E96A0 }, /*DD*/
822- { 0x12D75D9C, 0x6AAA1531, 0xAE20DF76, 0xFE257981, 0x434EE77B, 0x549C7579 }, /*DE*/
823- { 0x1B2FC468, 0x0940E108, 0x60DE1A9E, 0x41D46F89, 0xCF0DD612, 0x7AA0386B }, /*DF*/
824- { 0xA56433F6, 0x789100BA, 0x50CDB7E9, 0x3A11AE6C, 0x8224361A, 0x1F8B3C14 }, /*E0*/
825- { 0xFD6D3A1C, 0xE92DA632, 0x08B35A14, 0x6DF921CD, 0xBE887850, 0xEE1AD2A4 }, /*E1*/
826- { 0x772C59F4, 0xB9570E21, 0x7448E01C, 0xA632B61E, 0x4A0218E4, 0x48D4936B }, /*E2*/
827- { 0x001CB7C4, 0x642511D7, 0x5E1457A9, 0x1BD71C53, 0xF88EBB30, 0xAAF79F12 }, /*E3*/
828- { 0x3B29999C, 0x61F2A87B, 0xA71C8C84, 0x0B3FD74B, 0x991AC230, 0x1CD5189C }, /*E4*/
829- { 0x97F0DB05, 0x4166DBCB, 0xF9CD085B, 0x083FF569, 0xCD95CEBD, 0xA0A4AC2C }, /*E5*/
830- { 0x8C28FED9, 0x0BA76739, 0xD7C81E03, 0x28EC9369, 0xF47EB379, 0x4E03C624 }, /*E6*/
831- { 0x88EF27AD, 0x17971236, 0x4DE8CC38, 0xD468926B, 0x8BE392B3, 0x56394091 }, /*E7*/
832- { 0xAD7B6B0C, 0xE6086D38, 0x74CC103E, 0x734FC4AB, 0x18963383, 0xF5D7FD09 }, /*E8*/
833- { 0x36B40975, 0x7E419219, 0xD109DB23, 0xDD569F6F, 0xCC5DF3F2, 0x637C2AAC }, /*E9*/
834- { 0xC354E0FF, 0x711DABE3, 0x3808EEEA, 0x6C206679, 0xD75040EA, 0x40FB6C41 }, /*EA*/
835- { 0xDD9AAB46, 0x41E64E67, 0x261A425B, 0x80CB3F7C, 0xA531A139, 0x75934DFA }, /*EB*/
836- { 0x14E44A08, 0x1F8CA28B, 0xFFC69542, 0xB3511A69, 0xF8AA034C, 0x26E52E01 }, /*EC*/
837- { 0x5C5B2089, 0xB37C0B0F, 0xD8D0BD18, 0x40932C2F, 0xDCEE2FEF, 0x52829953 }, /*ED*/
838- { 0x37EA566F, 0x089C4DD1, 0x9F60D762, 0xF2785486, 0xA93A6B0D, 0x6503063D }, /*EE*/
839- { 0xC0CBE2C7, 0x4E23C526, 0x606B72F0, 0x884B7A05, 0xA66EF67B, 0xF30DD80A }, /*EF*/
840- { 0xF3F276E0, 0x3591C692, 0xB2BB885B, 0xDBC22E58, 0x786DCA29, 0x15EA0D06 }, /*F0*/
841- { 0x90B7A296, 0x2CC1EC9D, 0x20922AE6, 0x350B8EDF, 0x580DB6C1, 0x901E6725 }, /*F1*/
842- { 0xC099DE21, 0x1DE1594E, 0x48D23351, 0xD1CE1FE8, 0x76E26671, 0x805E744A }, /*F2*/
843- { 0x89071E13, 0xE8E8A47A, 0x2CE727B9, 0xBEFABBF6, 0x3F74A756, 0x5AE23E2D }, /*F3*/
844- { 0xFD08E5DC, 0x8B66E48C, 0x49CD25B2, 0x356BD7E7, 0x932AE9BA, 0xC0CF4D42 }, /*F4*/
845- { 0xAD61073E, 0x146D10C0, 0x15B984C6, 0x07EB3FA4, 0xAFBCA5F1, 0x0AA183BF }, /*F5*/
846- { 0xF82147A4, 0xDF3D897C, 0xAA3B554A, 0xE36AD282, 0xADB5E14B, 0x554584CA }, /*F6*/
847- { 0x84EC67B4, 0xD84B3426, 0x2BF0A6C9, 0x8BA3F8EF, 0xD62D5A8B, 0x17D965CA }, /*F7*/
848- { 0x03B5AB0C, 0x286A2AF1, 0x3DB59FB3, 0xFD8F8BF1, 0x68BE8B49, 0x5202D21E }, /*F8*/
849- { 0x214C307C, 0xD465D180, 0xC48070A1, 0x94677855, 0x5C6718B7, 0x7D664FB3 }, /*F9*/
850- { 0x0BADDFF8, 0x4CCC4ECC, 0xE1316FCC, 0xCA0A5855, 0x1E0D8CF4, 0x0C1EE3D8 }, /*FA*/
851- { 0xF36A2187, 0x9C5E64DB, 0x4C5AF0E2, 0x8A45458F, 0x8204D381, 0x4CE31874 }, /*FB*/
852- { 0x4F76AFA5, 0xFF63720D, 0x1F09FE8C, 0x88D7E902, 0x6FC04CD8, 0x5529EB97 }, /*FC*/
853- { 0x63844962, 0x85F09D22, 0x10E25062, 0x9C0BE84F, 0x039440B5, 0x8FBEBA32 }, /*FD*/
854- { 0xC447A427, 0xBADC88EB, 0x3EC48572, 0x294CE83C, 0x43E4CA7D, 0xD5AFDCFE }, /*FE*/
855- { 0xCC7D264F, 0xDB754D7E, 0x0D20575C, 0x0DD2BA81, 0x8B6ED8AA, 0xAE865123 }, /*FF*/
856- { 0x636A5244, 0x203CB521, 0x06F933FF, 0xB99B48DC, 0xB765E439, 0x8BA82256 } /*ZZ*/
857-};
858-
859859 /* Table FIN
860860 * 48 entries vector containing pre-computed indices to be used for extracting the final digest
861861 */
862862 static const byte_t MHASH384_FIN[MHASH384_SIZE] =
863863 {
864- 0x19, 0x12, 0x23, 0x16, 0x01, 0x1F, 0x09, 0x00, 0x0C, 0x2A, 0x05, 0x11, 0x07, 0x13, 0x0D, 0x02,
865- 0x14, 0x2E, 0x0A, 0x26, 0x2B, 0x1C, 0x20, 0x17, 0x2D, 0x04, 0x29, 0x1A, 0x21, 0x06, 0x22, 0x28,
866- 0x0F, 0x1E, 0x25, 0x10, 0x0B, 0x2F, 0x1B, 0x0E, 0x15, 0x2C, 0x1D, 0x27, 0x08, 0x03, 0x24, 0x18
864+ 0x13, 0x19, 0x15, 0x1B, 0x00, 0x11, 0x08, 0x1A, 0x2C, 0x1E, 0x12, 0x0D, 0x1C, 0x0E, 0x17, 0x26,
865+ 0x14, 0x2A, 0x1D, 0x03, 0x20, 0x2D, 0x01, 0x1F, 0x05, 0x24, 0x06, 0x10, 0x2E, 0x27, 0x09, 0x07,
866+ 0x16, 0x28, 0x0B, 0x04, 0x22, 0x0F, 0x29, 0x18, 0x21, 0x0A, 0x2F, 0x0C, 0x2B, 0x25, 0x02, 0x23
867867 };
868868
869869 /* ======================================================================== */
@@ -885,7 +885,7 @@ static ALWAYS_INLINE ui64_t mix128to64(const ui64_t u, ui64_t v)
885885 /*
886886 * Extract output byte from the context array
887887 */
888-static byte_t ALWAYS_INLINE get_byte(const ui64_t *const hash, const ui32_t idx)
888+static byte_t ALWAYS_INLINE get_byte(const ui64_t *const hash, const byte_t idx)
889889 {
890890 return (byte_t)(hash[idx / 8U] >> ((idx % 8U) * 8U));
891891 }
@@ -927,8 +927,8 @@ void mhash384_update(mhash384_t *const ctx, const byte_t *const data_in, const s
927927 for(i = 0U; i < len; ++i)
928928 {
929929 const ui64_t *const p_xor = MHASH384_XOR[data_in[i]];
930+ const ui64_t *const p_add = MHASH384_ADD[data_in[i]];
930931 const byte_t *const p_mix = MHASH384_MIX[ctx->rnd++];
931- const ui32_t *const p_add = MHASH384_ADD[data_in[i]];
932932 MHASH384_UPDATE();
933933 }
934934 }
@@ -938,14 +938,15 @@ void mhash384_update(mhash384_t *const ctx, const byte_t *const data_in, const s
938938 */
939939 void mhash384_final(mhash384_t *const ctx, byte_t *const digest_out)
940940 {
941- const ui64_t *const p_xor = MHASH384_XOR[256U];
942- const ui32_t *const p_add = MHASH384_ADD[256U];
941+ ui16_t prev_value = 256U;
943942 size_t i;
944943 for(i = 0U; i < MHASH384_SIZE; ++i)
945944 {
945+ const ui64_t *const p_xor = MHASH384_XOR[prev_value];
946+ const ui64_t *const p_add = MHASH384_ADD[prev_value];
946947 const byte_t *const p_mix = MHASH384_MIX[ctx->rnd++];
947948 MHASH384_UPDATE();
948- digest_out[i] = get_byte(ctx->hash, MHASH384_FIN[i]);
949+ prev_value = digest_out[i] = get_byte(ctx->hash, MHASH384_FIN[i]);
949950 }
950951 }
951952
@@ -977,6 +978,14 @@ void mhash384_version(ui16_t *const major, ui16_t *const minor, ui16_t *const pa
977978 #ifndef MHASH384_NOSELFTEST
978979
979980 /*
981+ * Minimum of three 32-Bit values
982+ */
983+static ALWAYS_INLINE ui32_t minimum3(const ui32_t x, const ui32_t y, const ui32_t z)
984+{
985+ return (x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z);
986+}
987+
988+/*
980989 * Population count of 64-Bit word
981990 */
982991 static ALWAYS_INLINE ui32_t popcnt64(ui64_t u)
@@ -1012,11 +1021,9 @@ bool mhash384_selftest(void)
10121021 {
10131022 if(i != j)
10141023 {
1015- const ui32_t distance = hamming_distance(MHASH384_XOR[i], MHASH384_XOR[j]);
1016- if(distance < min_distance)
1017- {
1018- min_distance = distance;
1019- }
1024+ const ui32_t distance_xor = hamming_distance(MHASH384_XOR[i], MHASH384_XOR[j]);
1025+ const ui32_t distance_add = hamming_distance(MHASH384_ADD[i], MHASH384_ADD[j]);
1026+ min_distance = minimum3(min_distance, distance_xor, distance_add);
10201027 }
10211028 }
10221029 if(min_distance < 182U)
Show on old repository browser