tiger_digest/
lib.rs

1//! The [Tiger][1] hash function, implemented through [Digest][2]
2//!
3//! [1]: http://www.cs.technion.ac.il/~biham/Reports/Tiger/tiger/tiger.html
4//! [2]: https://crates.io/crates/digest
5
6pub use digest::Digest;
7
8extern crate byte_tools;
9extern crate block_buffer;
10extern crate digest;
11
12#[cfg(test)]
13#[macro_use]
14extern crate hex_literal;
15
16use block_buffer::{BlockBuffer, generic_array::GenericArray as BB_GenericArray, generic_array::typenum::consts::U64 as BB_U64};
17use byte_tools::{read_u64v_le, write_u64_le, write_u64v_le};
18use digest::generic_array::typenum::{U24, U64};
19use digest::generic_array::GenericArray;
20
21type BlockBuffer512 = BlockBuffer<BB_U64>;
22
23const PADDING_BLOCK: [u8; 64] = [
24    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
26];
27
28/// The Tiger hasher
29#[derive(Clone)]
30pub struct Tiger {
31    length_bytes: u64,
32    buffer: BlockBuffer512,
33    state: [u64; 3],
34}
35
36impl Default for Tiger {
37    fn default() -> Self {
38        Tiger {
39            length_bytes: 0,
40            buffer: Default::default(),
41            state: [
42                0x0123_4567_89AB_CDEF,
43                0xFEDC_BA98_7654_3210,
44                0xF096_A5B4_C3B2_E187,
45            ],
46        }
47    }
48}
49
50impl Tiger {
51    #[inline]
52    fn fill_up_to(from: usize, to: usize, modulo: usize) -> usize {
53        let _from = from + 1;
54        let _to = to + modulo;
55        1 + ((_to - _from) % modulo)
56    }
57
58    #[inline]
59    fn finalize(mut self) -> [u64; 3] {
60        {
61            let self_state = &mut self.state;
62            let pad_size = Self::fill_up_to(self.buffer.position(), 64 - 8, 64);
63            self.buffer.input(&PADDING_BLOCK[..pad_size], |d| {
64                Self::compress(self_state, d)
65            });
66
67            let mut length: [u8; 8] = [0, 0, 0, 0, 0, 0, 0, 0];
68            write_u64_le(&mut length, (self.length_bytes << 3) as u64);
69            self.buffer
70                .input(&length, |d| Self::compress(self_state, d));
71
72            assert_eq!(self.buffer.position(), 0);
73        }
74        self.state
75    }
76
77    pub fn consume(&mut self, input: &[u8]) {
78        // Unlike Sha1 and Sha2, the length value in Tiger is defined as
79        // the length of the message mod 2^64 - ie: integer overflow is OK.
80        self.length_bytes += input.len() as u64;
81        let self_state = &mut self.state;
82        self.buffer.input(input, |d| Self::compress(self_state, d));
83    }
84
85    #[inline]
86    fn compress(state: &mut [u64; 3], input: &BB_GenericArray<u8, BB_U64>) {
87        let mut inputs: [u64; 8] = Default::default();
88        read_u64v_le(&mut inputs, input);
89        let mut a = state[0];
90        let mut b = state[1];
91        let mut c = state[2];
92
93        Self::pass(&mut a, &mut b, &mut c, &inputs, 5);
94        Self::key_schedule(&mut inputs);
95        Self::pass(&mut c, &mut a, &mut b, &inputs, 7);
96        Self::key_schedule(&mut inputs);
97        Self::pass(&mut b, &mut c, &mut a, &inputs, 9);
98
99        state[0] ^= a;
100        state[1] = b.wrapping_sub(state[1]);
101        state[2] = c.wrapping_add(state[2]);
102    }
103
104    #[inline]
105    fn pass(a: &mut u64, b: &mut u64, c: &mut u64, x: &[u64; 8], mul: u8) {
106        Self::round(a, b, c, &x[0], mul);
107        Self::round(b, c, a, &x[1], mul);
108        Self::round(c, a, b, &x[2], mul);
109        Self::round(a, b, c, &x[3], mul);
110        Self::round(b, c, a, &x[4], mul);
111        Self::round(c, a, b, &x[5], mul);
112        Self::round(a, b, c, &x[6], mul);
113        Self::round(b, c, a, &x[7], mul);
114    }
115
116    #[inline]
117    fn round(a: &mut u64, b: &mut u64, c: &mut u64, x: &u64, mul: u8) {
118        *c ^= *x;
119        let mut c_: [u8; 8] = Default::default();
120        write_u64_le(&mut c_, *c);
121        *a = a.wrapping_sub(
122            T1[c_[0] as usize] ^ T2[c_[2] as usize] ^ T3[c_[4] as usize] ^ T4[c_[6] as usize],
123        );
124        *b = b.wrapping_add(
125            T4[c_[1] as usize] ^ T3[c_[3] as usize] ^ T2[c_[5] as usize] ^ T1[c_[7] as usize],
126        );
127        *b = b.wrapping_mul(u64::from(mul));
128    }
129
130    #[inline]
131    fn key_schedule(x: &mut [u64; 8]) {
132        x[0] = x[0].wrapping_sub(x[7] ^ 0xA5A5_A5A5_A5A5_A5A5);
133        x[1] ^= x[0];
134        x[2] = x[2].wrapping_add(x[1]);
135        x[3] = x[3].wrapping_sub(x[2] ^ ((!x[1]) << 19));
136        x[4] ^= x[3];
137        x[5] = x[5].wrapping_add(x[4]);
138        x[6] = x[6].wrapping_sub(x[5] ^ ((!x[4]) >> 23));
139        x[7] ^= x[6];
140        x[0] = x[0].wrapping_add(x[7]);
141        x[1] = x[1].wrapping_sub(x[0] ^ ((!x[7]) << 19));
142        x[2] ^= x[1];
143        x[3] = x[3].wrapping_add(x[2]);
144        x[4] = x[4].wrapping_sub(x[3] ^ ((!x[2]) >> 23));
145        x[5] ^= x[4];
146        x[6] = x[6].wrapping_add(x[5]);
147        x[7] = x[7].wrapping_sub(x[6] ^ 0x0123_4567_89AB_CDEF);
148    }
149}
150
151impl digest::BlockInput for Tiger {
152    type BlockSize = U64;
153}
154
155impl digest::Input for Tiger {
156    #[inline]
157    fn process(&mut self, input: &[u8]) {
158        self.consume(input);
159    }
160}
161
162impl digest::FixedOutput for Tiger {
163    type OutputSize = U24;
164
165    #[inline]
166    fn fixed_result(self) -> GenericArray<u8, Self::OutputSize> {
167        let mut out = GenericArray::default();
168        write_u64v_le(&mut out, &self.finalize());
169        out
170    }
171}
172
173// Conditionally compile the module `test` only when the test-suite is run.
174#[cfg(test)]
175mod test {
176    use digest::Digest;
177    use super::Tiger;
178
179    #[test]
180    fn test_vectors() {
181        let examples = [
182            ("", hex!("3293ac630c13f0245f92bbb1766e16167a4e58492dde73f3")),
183            ("abc", hex!("2aab1484e8c158f2bfb8c5ff41b57a525129131c957b5f93")),
184            ("Tiger", hex!("dd00230799f5009fec6debc838bb6a27df2b9d6f110c7937")),
185            (
186                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
187                hex!("f71c8583902afb879edfe610f82c0d4786a3a534504486b5"),
188            ),
189            (
190                "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
191                hex!("48ceeb6308b87d46e95d656112cdf18d97915f9765658957"),
192            ),
193            (
194                "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham",
195                hex!("8a866829040a410c729ad23f5ada711603b3cdd357e4c15e"),
196            ),
197            (
198                "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge.",
199                hex!("ce55a6afd591f5ebac547ff84f89227f9331dab0b611c889"),
200            ),
201            (
202                "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
203                hex!("0f7bf9a19b9c58f2b7610df7e84f0ac3a71c631e7b53f78e"),
204            ),
205            (
206                "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
207                hex!("08c8dcb467e4c7f910966c399fdc9b164be15b792d432224"),
208            ),
209        ];
210
211        for &(input, answer) in examples.iter() {
212            let result = Tiger::digest_str(input);
213
214            assert_eq!(*result, answer);
215        }
216    }
217}
218
219static T1: [u64; 256] = [
220    0x02AA_B17C_F7E9_0C5E, /*    0 */
221    0xAC42_4B03_E243_A8EC, /*    1 */
222    0x72CD_5BE3_0DD5_FCD3, /*    2 */
223    0x6D01_9B93_F6F9_7F3A, /*    3 */
224    0xCD99_78FF_D21F_9193, /*    4 */
225    0x7573_A1C9_7080_29E2, /*    5 */
226    0xB164_326B_922A_83C3, /*    6 */
227    0x4688_3EEE_0491_5870, /*    7 */
228    0xEAAC_E305_7103_ECE6, /*    8 */
229    0xC541_69B8_08A3_535C, /*    9 */
230    0x4CE7_5491_8DDE_C47C, /*   10 */
231    0x0AA2_F4DF_DC0D_F40C, /*   11 */
232    0x10B7_6F18_A74D_BEFA, /*   12 */
233    0xC6CC_B623_5AD1_AB6A, /*   13 */
234    0x1372_6121_572F_E2FF, /*   14 */
235    0x1A48_8C6F_199D_921E, /*   15 */
236    0x4BC9_F9F4_DA00_07CA, /*   16 */
237    0x26F5_E6F6_E852_41C7, /*   17 */
238    0x8590_79DB_EA59_47B6, /*   18 */
239    0x4F18_85C5_C99E_8C92, /*   19 */
240    0xD78E_761E_A96F_864B, /*   20 */
241    0x8E36_428C_52B5_C17D, /*   21 */
242    0x69CF_6827_3730_63C1, /*   22 */
243    0xB607_C93D_9BB4_C56E, /*   23 */
244    0x7D82_0E76_0E76_B5EA, /*   24 */
245    0x645C_9CC6_F07F_DC42, /*   25 */
246    0xBF38_A078_2433_42E0, /*   26 */
247    0x5F6B_343C_9D2E_7D04, /*   27 */
248    0xF2C2_8AEB_600B_0EC6, /*   28 */
249    0x6C0E_D85F_7254_BCAC, /*   29 */
250    0x7159_2281_A4DB_4FE5, /*   30 */
251    0x1967_FA69_CE0F_ED9F, /*   31 */
252    0xFD52_93F8_B965_45DB, /*   32 */
253    0xC879_E9D7_F2A7_600B, /*   33 */
254    0x8602_4892_0193_194E, /*   34 */
255    0xA4F9_533B_2D9C_C0B3, /*   35 */
256    0x9053_836C_1595_7613, /*   36 */
257    0xDB6D_CF8A_FC35_7BF1, /*   37 */
258    0x18BE_EA7A_7A37_0F57, /*   38 */
259    0x0371_17CA_50B9_9066, /*   39 */
260    0x6AB3_0A97_7442_4A35, /*   40 */
261    0xF4E9_2F02_E325_249B, /*   41 */
262    0x7739_DB07_061C_CAE1, /*   42 */
263    0xD8F3_B49C_ECA4_2A05, /*   43 */
264    0xBD56_BE3F_5138_2F73, /*   44 */
265    0x45FA_ED58_43B0_BB28, /*   45 */
266    0x1C81_3D5C_11BF_1F83, /*   46 */
267    0x8AF0_E4B6_D75F_A169, /*   47 */
268    0x33EE_18A4_87AD_9999, /*   48 */
269    0x3C26_E8EA_B1C9_4410, /*   49 */
270    0xB510_102B_C0A8_22F9, /*   50 */
271    0x141E_EF31_0CE6_123B, /*   51 */
272    0xFC65_B900_59DD_B154, /*   52 */
273    0xE015_8640_C5E0_E607, /*   53 */
274    0x884E_0798_26C3_A3CF, /*   54 */
275    0x930D_0D95_23C5_35FD, /*   55 */
276    0x3563_8D75_4E9A_2B00, /*   56 */
277    0x4085_FCCF_4046_9DD5, /*   57 */
278    0xC4B1_7AD2_8BE2_3A4C, /*   58 */
279    0xCAB2_F0FC_6A3E_6A2E, /*   59 */
280    0x2860_971A_6B94_3FCD, /*   60 */
281    0x3DDE_6EE2_12E3_0446, /*   61 */
282    0x6222_F32A_E017_65AE, /*   62 */
283    0x5D55_0BB5_4783_08FE, /*   63 */
284    0xA9EF_A98D_A0ED_A22A, /*   64 */
285    0xC351_A716_86C4_0DA7, /*   65 */
286    0x1105_586D_9C86_7C84, /*   66 */
287    0xDCFF_EE85_FDA2_2853, /*   67 */
288    0xCCFB_D026_2C5E_EF76, /*   68 */
289    0xBAF2_94CB_8990_D201, /*   69 */
290    0xE694_64F5_2AFA_D975, /*   70 */
291    0x94B0_13AF_DF13_3E14, /*   71 */
292    0x06A7_D1A3_2823_C958, /*   72 */
293    0x6F95_FE51_30F6_1119, /*   73 */
294    0xD92A_B34E_462C_06C0, /*   74 */
295    0xED7B_DE33_887C_71D2, /*   75 */
296    0x7974_6D6E_6518_393E, /*   76 */
297    0x5BA4_1938_5D71_3329, /*   77 */
298    0x7C1B_A6B9_48A9_7564, /*   78 */
299    0x3198_7C19_7BFD_AC67, /*   79 */
300    0xDE6C_23C4_4B05_3D02, /*   80 */
301    0x581C_49FE_D002_D64D, /*   81 */
302    0xDD47_4D63_3826_1571, /*   82 */
303    0xAA45_46C3_E473_D062, /*   83 */
304    0x928F_CE34_9455_F860, /*   84 */
305    0x4816_1BBA_CAAB_94D9, /*   85 */
306    0x6391_2430_770E_6F68, /*   86 */
307    0x6EC8_A5E6_02C6_641C, /*   87 */
308    0x8728_2515_337D_DD2B, /*   88 */
309    0x2CDA_6B42_034B_701B, /*   89 */
310    0xB03D_37C1_81CB_096D, /*   90 */
311    0xE108_4382_66C7_1C6F, /*   91 */
312    0x2B31_80C7_EB51_B255, /*   92 */
313    0xDF92_B82F_96C0_8BBC, /*   93 */
314    0x5C68_C8C0_A632_F3BA, /*   94 */
315    0x5504_CC86_1C3D_0556, /*   95 */
316    0xABBF_A4E5_5FB2_6B8F, /*   96 */
317    0x4184_8B0A_B3BA_CEB4, /*   97 */
318    0xB334_A273_AA44_5D32, /*   98 */
319    0xBCA6_96F0_A85A_D881, /*   99 */
320    0x24F6_EC65_B528_D56C, /*  100 */
321    0x0CE1_512E_90F4_524A, /*  101 */
322    0x4E9D_D79D_5506_D35A, /*  102 */
323    0x2589_05FA_C6CE_9779, /*  103 */
324    0x2019_295B_3E10_9B33, /*  104 */
325    0xF8A9_478B_73A0_54CC, /*  105 */
326    0x2924_F2F9_3441_7EB0, /*  106 */
327    0x3993_357D_536D_1BC4, /*  107 */
328    0x38A8_1AC2_1DB6_FF8B, /*  108 */
329    0x47C4_FBF1_7D60_16BF, /*  109 */
330    0x1E0F_AADD_7667_E3F5, /*  110 */
331    0x7ABC_FF62_938B_EB96, /*  111 */
332    0xA78D_AD94_8FC1_79C9, /*  112 */
333    0x8F1F_98B7_2911_E50D, /*  113 */
334    0x61E4_8EAE_2712_1A91, /*  114 */
335    0x4D62_F7AD_3185_9808, /*  115 */
336    0xECEB_A345_EF5C_EAEB, /*  116 */
337    0xF5CE_B25E_BC96_84CE, /*  117 */
338    0xF633_E20C_B7F7_6221, /*  118 */
339    0xA32C_DF06_AB82_93E4, /*  119 */
340    0x985A_202C_A5EE_2CA4, /*  120 */
341    0xCF0B_8447_CC8A_8FB1, /*  121 */
342    0x9F76_5244_9798_59A3, /*  122 */
343    0xA8D5_16B1_A124_0017, /*  123 */
344    0x0BD7_BA3E_BB5D_C726, /*  124 */
345    0xE54B_CA55_B86A_DB39, /*  125 */
346    0x1D7A_3AFD_6C47_8063, /*  126 */
347    0x519E_C608_E766_9EDD, /*  127 */
348    0x0E57_15A2_D149_AA23, /*  128 */
349    0x177D_4571_848F_F194, /*  129 */
350    0xEEB5_5F32_4101_4C22, /*  130 */
351    0x0F5E_5CA1_3A6E_2EC2, /*  131 */
352    0x8029_927B_75F5_C361, /*  132 */
353    0xAD13_9FAB_C3D6_E436, /*  133 */
354    0x0D5D_F1A9_4CCF_402F, /*  134 */
355    0x3E8B_D948_BEA5_DFC8, /*  135 */
356    0xA5A0_D357_BD3F_F77E, /*  136 */
357    0xA2D1_2E25_1F74_F645, /*  137 */
358    0x66FD_9E52_5E81_A082, /*  138 */
359    0x2E0C_90CE_7F68_7A49, /*  139 */
360    0xC2E8_BCBE_BA97_3BC5, /*  140 */
361    0x0000_01BC_E509_745F, /*  141 */
362    0x4237_77BB_E6DA_B3D6, /*  142 */
363    0xD166_1C7E_AEF0_6EB5, /*  143 */
364    0xA178_1F35_4DAA_CFD8, /*  144 */
365    0x2D11_284A_2B16_AFFC, /*  145 */
366    0xF1FC_4F67_FA89_1D1F, /*  146 */
367    0x73EC_C25D_CB92_0ADA, /*  147 */
368    0xAE61_0C22_C2A1_2651, /*  148 */
369    0x96E0_A810_D356_B78A, /*  149 */
370    0x5A9A_381F_2FE7_870F, /*  150 */
371    0xD5AD_62ED_E94E_5530, /*  151 */
372    0xD225_E5E8_368D_1427, /*  152 */
373    0x6597_7B70_C7AF_4631, /*  153 */
374    0x99F8_89B2_DE39_D74F, /*  154 */
375    0x233F_30BF_54E1_D143, /*  155 */
376    0x9A96_75D3_D9A6_3C97, /*  156 */
377    0x5470_554F_F334_F9A8, /*  157 */
378    0x166A_CB74_4A4F_5688, /*  158 */
379    0x70C7_4CAA_B2E4_AEAD, /*  159 */
380    0xF0D0_9164_6F29_4D12, /*  160 */
381    0x57B8_2A89_6840_31D1, /*  161 */
382    0xEFD9_5A5A_61BE_0B6B, /*  162 */
383    0x2FBD_12E9_69F2_F29A, /*  163 */
384    0x9BD3_7013_FEFF_9FE8, /*  164 */
385    0x3F9B_0404_D608_5A06, /*  165 */
386    0x4940_C1F3_166C_FE15, /*  166 */
387    0x0954_2C4D_CDF3_DEFB, /*  167 */
388    0xB4C5_2183_85CD_5CE3, /*  168 */
389    0xC935_B7DC_4462_A641, /*  169 */
390    0x3417_F8A6_8ED3_B63F, /*  170 */
391    0xB809_5929_5B21_5B40, /*  171 */
392    0xF99C_DAEF_3B8C_8572, /*  172 */
393    0x018C_0614_F8FC_B95D, /*  173 */
394    0x1B14_ACCD_1A3A_CDF3, /*  174 */
395    0x84D4_71F2_00BB_732D, /*  175 */
396    0xC1A3_110E_95E8_DA16, /*  176 */
397    0x430A_7220_BF1A_82B8, /*  177 */
398    0xB77E_090D_39DF_210E, /*  178 */
399    0x5EF4_BD9F_3CD0_5E9D, /*  179 */
400    0x9D4F_F6DA_7E57_A444, /*  180 */
401    0xDA1D_60E1_83D4_A5F8, /*  181 */
402    0xB287_C384_1799_8E47, /*  182 */
403    0xFE3E_DC12_1BB3_1886, /*  183 */
404    0xC7FE_3CCC_980C_CBEF, /*  184 */
405    0xE46F_B590_189B_FD03, /*  185 */
406    0x3732_FD46_9A4C_57DC, /*  186 */
407    0x7EF7_00A0_7CF1_AD65, /*  187 */
408    0x59C6_4468_A31D_8859, /*  188 */
409    0x762F_B0B4_D45B_61F6, /*  189 */
410    0x155B_AED0_9904_7718, /*  190 */
411    0x6875_5E4C_3D50_BAA6, /*  191 */
412    0xE921_4E7F_22D8_B4DF, /*  192 */
413    0x2ADD_BF53_2EAC_95F4, /*  193 */
414    0x32AE_3909_B4BD_0109, /*  194 */
415    0x834D_F537_B08E_3450, /*  195 */
416    0xFA20_9DA8_4220_728D, /*  196 */
417    0x9E69_1D9B_9EFE_23F7, /*  197 */
418    0x0446_D288_C4AE_8D7F, /*  198 */
419    0x7B4C_C524_E169_785B, /*  199 */
420    0x21D8_7F01_35CA_1385, /*  200 */
421    0xCEBB_400F_137B_8AA5, /*  201 */
422    0x272E_2B66_5807_96BE, /*  202 */
423    0x3612_2641_25C2_B0DE, /*  203 */
424    0x0577_02BD_AD1E_FBB2, /*  204 */
425    0xD4BA_BB8E_ACF8_4BE9, /*  205 */
426    0x9158_3139_641B_C67B, /*  206 */
427    0x8BDC_2DE0_8036_E024, /*  207 */
428    0x603C_8156_F49F_68ED, /*  208 */
429    0xF7D2_36F7_DBEF_5111, /*  209 */
430    0x9727_C459_8AD2_1E80, /*  210 */
431    0xA08A_0896_670A_5FD7, /*  211 */
432    0xCB4A_8F43_09EB_A9CB, /*  212 */
433    0x81AF_564B_0F70_36A1, /*  213 */
434    0xC0B9_9AA7_7819_9ABD, /*  214 */
435    0x959F_1EC8_3FC8_E952, /*  215 */
436    0x8C50_5077_794A_81B9, /*  216 */
437    0x3ACA_AF8F_0563_38F0, /*  217 */
438    0x07B4_3F50_627A_6778, /*  218 */
439    0x4A44_AB49_F5EC_CC77, /*  219 */
440    0x3BC3_D6E4_B679_EE98, /*  220 */
441    0x9CC0_D4D1_CF14_108C, /*  221 */
442    0x4406_C00B_206B_C8A0, /*  222 */
443    0x82A1_8854_C8D7_2D89, /*  223 */
444    0x67E3_66B3_5C3C_432C, /*  224 */
445    0xB923_DD61_102B_37F2, /*  225 */
446    0x56AB_2779_D884_271D, /*  226 */
447    0xBE83_E1B0_FF15_25AF, /*  227 */
448    0xFB7C_65D4_217E_49A9, /*  228 */
449    0x6BDB_E0E7_6D48_E7D4, /*  229 */
450    0x08DF_8287_45D9_179E, /*  230 */
451    0x22EA_6A9A_DD53_BD34, /*  231 */
452    0xE36E_141C_5622_200A, /*  232 */
453    0x7F80_5D1B_8CB7_50EE, /*  233 */
454    0xAFE5_C7A5_9F58_E837, /*  234 */
455    0xE27F_996A_4FB1_C23C, /*  235 */
456    0xD386_7DFB_0775_F0D0, /*  236 */
457    0xD0E6_73DE_6E88_891A, /*  237 */
458    0x123A_EB9E_AFB8_6C25, /*  238 */
459    0x30F1_D5D5_C145_B895, /*  239 */
460    0xBB43_4A2D_EE72_69E7, /*  240 */
461    0x78CB_67EC_F931_FA38, /*  241 */
462    0xF33B_0372_323B_BF9C, /*  242 */
463    0x52D6_6336_FB27_9C74, /*  243 */
464    0x505F_33AC_0AFB_4EAA, /*  244 */
465    0xE8A5_CD99_A2CC_E187, /*  245 */
466    0x5349_7480_1E2D_30BB, /*  246 */
467    0x8D2D_5711_D587_6D90, /*  247 */
468    0x1F1A_4128_91BC_038E, /*  248 */
469    0xD6E2_E71D_82E5_6648, /*  249 */
470    0x7403_6C3A_4977_32B7, /*  250 */
471    0x89B6_7ED9_6361_F5AB, /*  251 */
472    0xFFED_95D8_F1EA_02A2, /*  252 */
473    0xE72B_3BD6_1464_D43D, /*  253 */
474    0xA630_0F17_0BDC_4820, /*  254 */
475    0xEBC1_8760_ED78_A77A, /*  255 */
476];
477static T2: [u64; 256] = [
478    0xE6A6_BE5A_05A1_2138, /*  256 */
479    0xB5A1_22A5_B4F8_7C98, /*  257 */
480    0x563C_6089_140B_6990, /*  258 */
481    0x4C46_CB2E_391F_5DD5, /*  259 */
482    0xD932_ADDB_C9B7_9434, /*  260 */
483    0x08EA_70E4_2015_AFF5, /*  261 */
484    0xD765_A667_3E47_8CF1, /*  262 */
485    0xC4FB_757E_AB27_8D99, /*  263 */
486    0xDF11_C686_2D6E_0692, /*  264 */
487    0xDDEB_84F1_0D7F_3B16, /*  265 */
488    0x6F2E_F604_A665_EA04, /*  266 */
489    0x4A8E_0F0F_F0E0_DFB3, /*  267 */
490    0xA5ED_EEF8_3DBC_BA51, /*  268 */
491    0xFC4F_0A2A_0EA4_371E, /*  269 */
492    0xE83E_1DA8_5CB3_8429, /*  270 */
493    0xDC8F_F882_BA1B_1CE2, /*  271 */
494    0xCD45_505E_8353_E80D, /*  272 */
495    0x18D1_9A00_D4DB_0717, /*  273 */
496    0x34A0_CFED_A5F3_8101, /*  274 */
497    0x0BE7_7E51_8887_CAF2, /*  275 */
498    0x1E34_1438_B3C4_5136, /*  276 */
499    0xE057_97F4_9089_CCF9, /*  277 */
500    0xFFD2_3F9D_F259_1D14, /*  278 */
501    0x543D_DA22_8595_C5CD, /*  279 */
502    0x661F_81FD_9905_2A33, /*  280 */
503    0x8736_E641_DB0F_7B76, /*  281 */
504    0x1522_7725_418E_5307, /*  282 */
505    0xE25F_7F46_162E_B2FA, /*  283 */
506    0x48A8_B212_6C13_D9FE, /*  284 */
507    0xAFDC_5417_92E7_6EEA, /*  285 */
508    0x03D9_12BF_C6D1_898F, /*  286 */
509    0x31B1_AAFA_1B83_F51B, /*  287 */
510    0xF1AC_2796_E42A_B7D9, /*  288 */
511    0x40A3_A7D7_FCD2_EBAC, /*  289 */
512    0x1056_136D_0AFB_BCC5, /*  290 */
513    0x7889_E1DD_9A6D_0C85, /*  291 */
514    0xD335_2578_2A79_74AA, /*  292 */
515    0xA7E2_5D09_078A_C09B, /*  293 */
516    0xBD41_38B3_EAC6_EDD0, /*  294 */
517    0x920A_BFBE_71EB_9E70, /*  295 */
518    0xA2A5_D0F5_4FC2_625C, /*  296 */
519    0xC054_E36B_0B12_90A3, /*  297 */
520    0xF6DD_59FF_62FE_932B, /*  298 */
521    0x3537_3545_11A8_AC7D, /*  299 */
522    0xCA84_5E91_72FA_DCD4, /*  300 */
523    0x84F8_2B60_329D_20DC, /*  301 */
524    0x79C6_2CE1_CD67_2F18, /*  302 */
525    0x8B09_A2AD_D124_642C, /*  303 */
526    0xD0C1_E96A_19D9_E726, /*  304 */
527    0x5A78_6A9B_4BA9_500C, /*  305 */
528    0x0E02_0336_634C_43F3, /*  306 */
529    0xC17B_474A_EB66_D822, /*  307 */
530    0x6A73_1AE3_EC9B_AAC2, /*  308 */
531    0x8226_667A_E084_0258, /*  309 */
532    0x67D4_5676_91CA_ECA5, /*  310 */
533    0x1D94_155C_4875_ADB5, /*  311 */
534    0x6D00_FD98_5B81_3FDF, /*  312 */
535    0x5128_6EFC_B774_CD06, /*  313 */
536    0x5E88_3447_1FA7_44AF, /*  314 */
537    0xF72C_A0AE_E761_AE2E, /*  315 */
538    0xBE40_E4CD_AEE8_E09A, /*  316 */
539    0xE997_0BBB_5118_F665, /*  317 */
540    0x726E_4BEB_33DF_1964, /*  318 */
541    0x703B_0007_2919_9762, /*  319 */
542    0x4631_D816_F5EF_30A7, /*  320 */
543    0xB880_B5B5_1504_A6BE, /*  321 */
544    0x6417_93C3_7ED8_4B6C, /*  322 */
545    0x7B21_ED77_F6E9_7D96, /*  323 */
546    0x7763_0631_2EF9_6B73, /*  324 */
547    0xAE52_8948_E86F_F3F4, /*  325 */
548    0x53DB_D7F2_86A3_F8F8, /*  326 */
549    0x16CA_DCE7_4CFC_1063, /*  327 */
550    0x005C_19BD_FA52_C6DD, /*  328 */
551    0x6886_8F5D_64D4_6AD3, /*  329 */
552    0x3A9D_512C_CF1E_186A, /*  330 */
553    0x367E_62C2_3856_60AE, /*  331 */
554    0xE359_E7EA_77DC_B1D7, /*  332 */
555    0x526C_0773_749A_BE6E, /*  333 */
556    0x735A_E5F9_D09F_734B, /*  334 */
557    0x493F_C7CC_8A55_8BA8, /*  335 */
558    0xB0B9_C153_3041_AB45, /*  336 */
559    0x3219_58BA_470A_59BD, /*  337 */
560    0x852D_B00B_5F46_C393, /*  338 */
561    0x9120_9B2B_D336_B0E5, /*  339 */
562    0x6E60_4F7D_659E_F19F, /*  340 */
563    0xB99A_8AE2_782C_CB24, /*  341 */
564    0xCCF5_2AB6_C814_C4C7, /*  342 */
565    0x4727_D9AF_BE11_727B, /*  343 */
566    0x7E95_0D0C_0121_B34D, /*  344 */
567    0x756F_4356_70AD_471F, /*  345 */
568    0xF5AD_D442_615A_6849, /*  346 */
569    0x4E87_E099_80B9_957A, /*  347 */
570    0x2ACF_A1DF_50AE_E355, /*  348 */
571    0xD898_263A_FD2F_D556, /*  349 */
572    0xC8F4_924D_D80C_8FD6, /*  350 */
573    0xCF99_CA3D_754A_173A, /*  351 */
574    0xFE47_7BAC_AF91_BF3C, /*  352 */
575    0xED53_71F6_D690_C12D, /*  353 */
576    0x831A_5C28_5E68_7094, /*  354 */
577    0xC5D3_C90A_3708_A0A4, /*  355 */
578    0x0F7F_9037_17D0_6580, /*  356 */
579    0x19F9_BB13_B8FD_F27F, /*  357 */
580    0xB1BD_6F1B_4D50_2843, /*  358 */
581    0x1C76_1BA3_8FFF_4012, /*  359 */
582    0x0D15_30C4_E2E2_1F3B, /*  360 */
583    0x8943_CE69_A737_2C8A, /*  361 */
584    0xE518_4E11_FEB5_CE66, /*  362 */
585    0x618B_DB80_BD73_6621, /*  363 */
586    0x7D29_BAD6_8B57_4D0B, /*  364 */
587    0x81BB_613E_25E6_FE5B, /*  365 */
588    0x071C_9C10_BC07_913F, /*  366 */
589    0xC7BE_EB79_09AC_2D97, /*  367 */
590    0xC3E5_8D35_3BC5_D757, /*  368 */
591    0xEB01_7892_F38F_61E8, /*  369 */
592    0xD4EF_FB9C_9B1C_C21A, /*  370 */
593    0x9972_7D26_F494_F7AB, /*  371 */
594    0xA3E0_63A2_956B_3E03, /*  372 */
595    0x9D4A_8B9A_4AA0_9C30, /*  373 */
596    0x3F6A_B7D5_0009_0FB4, /*  374 */
597    0x9CC0_F2A0_5726_8AC0, /*  375 */
598    0x3DEE_9D2D_EDBF_42D1, /*  376 */
599    0x330F_49C8_7960_A972, /*  377 */
600    0xC6B2_7202_8742_1B41, /*  378 */
601    0x0AC5_9EC0_7C00_369C, /*  379 */
602    0xEF4E_AC49_CB35_3425, /*  380 */
603    0xF450_244E_EF01_29D8, /*  381 */
604    0x8ACC_46E5_CAF4_DEB6, /*  382 */
605    0x2FFE_AB63_9892_63F7, /*  383 */
606    0x8F7C_B9FE_5D7A_4578, /*  384 */
607    0x5BD8_F764_4E63_4635, /*  385 */
608    0x427A_7315_BF2D_C900, /*  386 */
609    0x17D0_C4AA_2125_261C, /*  387 */
610    0x3992_486C_9351_8E50, /*  388 */
611    0xB4CB_FEE0_A2D7_D4C3, /*  389 */
612    0x7C75_D620_2C5D_DD8D, /*  390 */
613    0xDBC2_95D8_E35B_6C61, /*  391 */
614    0x60B3_69D3_0203_2B19, /*  392 */
615    0xCE42_685F_DCE4_4132, /*  393 */
616    0x06F3_DDB9_DDF6_5610, /*  394 */
617    0x8EA4_D21D_B5E1_48F0, /*  395 */
618    0x20B0_FCE6_2FCD_496F, /*  396 */
619    0x2C1B_9123_58B0_EE31, /*  397 */
620    0xB283_17B8_18F5_A308, /*  398 */
621    0xA89C_1E18_9CA6_D2CF, /*  399 */
622    0x0C6B_1857_6AAA_DBC8, /*  400 */
623    0xB65D_EAA9_1299_FAE3, /*  401 */
624    0xFB2B_794B_7F10_27E7, /*  402 */
625    0x04E4_317F_443B_5BEB, /*  403 */
626    0x4B85_2D32_5939_D0A6, /*  404 */
627    0xD5AE_6BEE_FB20_7FFC, /*  405 */
628    0x3096_82B2_81C7_D374, /*  406 */
629    0xBAE3_09A1_94C3_B475, /*  407 */
630    0x8CC3_F97B_13B4_9F05, /*  408 */
631    0x98A9_422F_F829_3967, /*  409 */
632    0x244B_16B0_1076_FF7C, /*  410 */
633    0xF8BF_571C_663D_67EE, /*  411 */
634    0x1F0D_6758_EEE3_0DA1, /*  412 */
635    0xC9B6_11D9_7ADE_B9B7, /*  413 */
636    0xB7AF_D588_7B6C_57A2, /*  414 */
637    0x6290_AE84_6B98_4FE1, /*  415 */
638    0x94DF_4CDE_ACC1_A5FD, /*  416 */
639    0x058A_5BD1_C548_3AFF, /*  417 */
640    0x6316_6CC1_42BA_3C37, /*  418 */
641    0x8DB8_526E_B2F7_6F40, /*  419 */
642    0xE108_8003_6F0D_6D4E, /*  420 */
643    0x9E05_23C9_971D_311D, /*  421 */
644    0x45EC_2824_CC7C_D691, /*  422 */
645    0x575B_8359_E623_82C9, /*  423 */
646    0xFA9E_400D_C488_9995, /*  424 */
647    0xD182_3ECB_4572_1568, /*  425 */
648    0xDAFD_983B_8206_082F, /*  426 */
649    0xAA7D_2908_2386_A8CB, /*  427 */
650    0x269F_CD44_03B8_7588, /*  428 */
651    0x1B91_F5F7_28BD_D1E0, /*  429 */
652    0xE466_9F39_0402_01F6, /*  430 */
653    0x7A1D_7C21_8CF0_4ADE, /*  431 */
654    0x6562_3C29_D79C_E5CE, /*  432 */
655    0x2368_4490_96C0_0BB1, /*  433 */
656    0xAB9B_F187_9DA5_03BA, /*  434 */
657    0xBC23_ECB1_A458_058E, /*  435 */
658    0x9A58_DF01_BB40_1ECC, /*  436 */
659    0xA070_E868_A85F_143D, /*  437 */
660    0x4FF1_8830_7DF2_239E, /*  438 */
661    0x14D5_65B4_1A64_1183, /*  439 */
662    0xEE13_3374_5270_1602, /*  440 */
663    0x950E_3DCF_3F28_5E09, /*  441 */
664    0x5993_0254_B9C8_0953, /*  442 */
665    0x3BF2_9940_8930_DA6D, /*  443 */
666    0xA955_943F_5369_1387, /*  444 */
667    0xA15E_DECA_A9CB_8784, /*  445 */
668    0x2914_2127_352B_E9A0, /*  446 */
669    0x76F0_371F_FF4E_7AFB, /*  447 */
670    0x0239_F450_274F_2228, /*  448 */
671    0xBB07_3AF0_1D5E_868B, /*  449 */
672    0xBFC8_0571_C10E_96C1, /*  450 */
673    0xD267_0885_6822_2E23, /*  451 */
674    0x9671_A3D4_8E80_B5B0, /*  452 */
675    0x55B5_D38A_E193_BB81, /*  453 */
676    0x693A_E2D0_A18B_04B8, /*  454 */
677    0x5C48_B4EC_ADD5_335F, /*  455 */
678    0xFD74_3B19_4916_A1CA, /*  456 */
679    0x2577_0181_34BE_98C4, /*  457 */
680    0xE779_87E8_3C54_A4AD, /*  458 */
681    0x28E1_1014_DA33_E1B9, /*  459 */
682    0x270C_C59E_226A_A213, /*  460 */
683    0x7149_5F75_6D1A_5F60, /*  461 */
684    0x9BE8_53FB_60AF_EF77, /*  462 */
685    0xADC7_86A7_F744_3DBF, /*  463 */
686    0x0904_4561_73B2_9A82, /*  464 */
687    0x58BC_7A66_C232_BD5E, /*  465 */
688    0xF306_558C_673A_C8B2, /*  466 */
689    0x41F6_39C6_B6C9_772A, /*  467 */
690    0x216D_EFE9_9FDA_35DA, /*  468 */
691    0x1164_0CC7_1C7B_E615, /*  469 */
692    0x93C4_3694_565C_5527, /*  470 */
693    0xEA03_8E62_4677_7839, /*  471 */
694    0xF9AB_F3CE_5A3E_2469, /*  472 */
695    0x741E_768D_0FD3_12D2, /*  473 */
696    0x0144_B883_CED6_52C6, /*  474 */
697    0xC20B_5A5B_A33F_8552, /*  475 */
698    0x1AE6_9633_C343_5A9D, /*  476 */
699    0x97A2_8CA4_088C_FDEC, /*  477 */
700    0x8824_A43C_1E96_F420, /*  478 */
701    0x3761_2FA6_6EEE_A746, /*  479 */
702    0x6B4C_B165_F9CF_0E5A, /*  480 */
703    0x43AA_1C06_A0AB_FB4A, /*  481 */
704    0x7F4D_C26F_F162_796B, /*  482 */
705    0x6CBA_CC8E_54ED_9B0F, /*  483 */
706    0xA6B7_FFEF_D2BB_253E, /*  484 */
707    0x2E25_BC95_B0A2_9D4F, /*  485 */
708    0x86D6_A58B_DEF1_388C, /*  486 */
709    0xDED7_4AC5_76B6_F054, /*  487 */
710    0x8030_BDBC_2B45_805D, /*  488 */
711    0x3C81_AF70_E94D_9289, /*  489 */
712    0x3EFF_6DDA_9E31_00DB, /*  490 */
713    0xB38D_C39F_DFCC_8847, /*  491 */
714    0x1238_8552_8D17_B87E, /*  492 */
715    0xF2DA_0ED2_40B1_B642, /*  493 */
716    0x44CE_FADC_D54B_F9A9, /*  494 */
717    0x1312_200E_433C_7EE6, /*  495 */
718    0x9FFC_C84F_3A78_C748, /*  496 */
719    0xF0CD_1F72_2485_76BB, /*  497 */
720    0xEC69_7405_3638_CFE4, /*  498 */
721    0x2BA7_B67C_0CEC_4E4C, /*  499 */
722    0xAC2F_4DF3_E5CE_32ED, /*  500 */
723    0xCB33_D143_26EA_4C11, /*  501 */
724    0xA4E9_044C_C77E_58BC, /*  502 */
725    0x5F51_3293_D934_FCEF, /*  503 */
726    0x5DC9_6455_06E5_5444, /*  504 */
727    0x50DE_418F_317D_E40A, /*  505 */
728    0x388C_B31A_69DD_E259, /*  506 */
729    0x2DB4_A834_5582_0A86, /*  507 */
730    0x9010_A91E_8471_1AE9, /*  508 */
731    0x4DF7_F0B7_B149_8371, /*  509 */
732    0xD62A_2EAB_C097_7179, /*  510 */
733    0x22FA_C097_AA8D_5C0E, /*  511 */
734];
735static T3: [u64; 256] = [
736    0xF49F_CC2F_F1DA_F39B, /*  512 */
737    0x487F_D5C6_6FF2_9281, /*  513 */
738    0xE8A3_0667_FCDC_A83F, /*  514 */
739    0x2C9B_4BE3_D2FC_CE63, /*  515 */
740    0xDA3F_F74B_93FB_BBC2, /*  516 */
741    0x2FA1_65D2_FE70_BA66, /*  517 */
742    0xA103_E279_970E_93D4, /*  518 */
743    0xBECD_EC77_B0E4_5E71, /*  519 */
744    0xCFB4_1E72_3985_E497, /*  520 */
745    0xB70A_AA02_5EF7_5017, /*  521 */
746    0xD423_09F0_3840_B8E0, /*  522 */
747    0x8EFC_1AD0_3589_8579, /*  523 */
748    0x96C6_920B_E2B2_ABC5, /*  524 */
749    0x66AF_4163_375A_9172, /*  525 */
750    0x2174_ABDC_CA71_27FB, /*  526 */
751    0xB33C_CEA6_4A72_FF41, /*  527 */
752    0xF04A_4933_0830_66A5, /*  528 */
753    0x8D97_0ACD_D728_9AF5, /*  529 */
754    0x8F96_E8E0_31C8_C25E, /*  530 */
755    0xF3FE_C022_7687_5D47, /*  531 */
756    0xEC7B_F310_0561_90DD, /*  532 */
757    0xF5AD_B0AE_BB0F_1491, /*  533 */
758    0x9B50_F885_0FD5_8892, /*  534 */
759    0x4975_4883_58B7_4DE8, /*  535 */
760    0xA335_4FF6_9153_1C61, /*  536 */
761    0x0702_BBE4_81D2_C6EE, /*  537 */
762    0x89FB_2405_7DED_ED98, /*  538 */
763    0xAC30_7513_8596_E902, /*  539 */
764    0x1D2D_3580_1727_72ED, /*  540 */
765    0xEB73_8FC2_8E6B_C30D, /*  541 */
766    0x5854_EF8F_6304_4326, /*  542 */
767    0x9E5C_5232_5ADD_3BBE, /*  543 */
768    0x90AA_53CF_325C_4623, /*  544 */
769    0xC1D2_4D51_349D_D067, /*  545 */
770    0x2051_CFEE_A69E_A624, /*  546 */
771    0x1322_0F0A_862E_7E4F, /*  547 */
772    0xCE39_3994_04E0_4864, /*  548 */
773    0xD9C4_2CA4_7086_FCB7, /*  549 */
774    0x685A_D223_8A03_E7CC, /*  550 */
775    0x0664_84B2_AB2F_F1DB, /*  551 */
776    0xFE9D_5D70_EFBF_79EC, /*  552 */
777    0x5B13_B9DD_9C48_1854, /*  553 */
778    0x15F0_D475_ED15_09AD, /*  554 */
779    0x0BEB_CD06_0EC7_9851, /*  555 */
780    0xD58C_6791_183A_B7F8, /*  556 */
781    0xD118_7C50_52F3_EEE4, /*  557 */
782    0xC95D_1192_E54E_82FF, /*  558 */
783    0x86EE_A14C_B9AC_6CA2, /*  559 */
784    0x3485_BEB1_5367_7D5D, /*  560 */
785    0xDD19_1D78_1F8C_492A, /*  561 */
786    0xF608_66BA_A784_EBF9, /*  562 */
787    0x518F_643B_A2D0_8C74, /*  563 */
788    0x8852_E956_E108_7C22, /*  564 */
789    0xA768_CB8D_C410_AE8D, /*  565 */
790    0x3804_7726_BFEC_8E1A, /*  566 */
791    0xA677_38B4_CD3B_45AA, /*  567 */
792    0xAD16_691C_EC0D_DE19, /*  568 */
793    0xC6D4_3193_8046_2E07, /*  569 */
794    0xC5A5_876D_0BA6_1938, /*  570 */
795    0x16B9_FA1F_A58F_D840, /*  571 */
796    0x188A_B117_3CA7_4F18, /*  572 */
797    0xABDA_2F98_C99C_021F, /*  573 */
798    0x3E05_80AB_134A_E816, /*  574 */
799    0x5F3B_05B7_7364_5ABB, /*  575 */
800    0x2501_A2BE_5575_F2F6, /*  576 */
801    0x1B2F_7400_4E7E_8BA9, /*  577 */
802    0x1CD7_5803_71E8_D953, /*  578 */
803    0x7F6E_D895_6276_4E30, /*  579 */
804    0xB159_26FF_596F_003D, /*  580 */
805    0x9F65_293D_A8C5_D6B9, /*  581 */
806    0x6ECE_F04D_D690_F84C, /*  582 */
807    0x4782_275F_FF33_AF88, /*  583 */
808    0xE414_3308_3F82_0801, /*  584 */
809    0xFD0D_FE40_9A1A_F9B5, /*  585 */
810    0x4325_A334_2CDB_396B, /*  586 */
811    0x8AE7_7E62_B301_B252, /*  587 */
812    0xC36F_9E9F_6655_615A, /*  588 */
813    0x8545_5A2D_92D3_2C09, /*  589 */
814    0xF2C7_DEA9_4947_7485, /*  590 */
815    0x63CF_B4C1_33A3_9EBA, /*  591 */
816    0x83B0_40CC_6EBC_5462, /*  592 */
817    0x3B94_54C8_FDB3_26B0, /*  593 */
818    0x56F5_6A9E_87FF_D78C, /*  594 */
819    0x2DC2_940D_99F4_2BC6, /*  595 */
820    0x98F7_DF09_6B09_6E2D, /*  596 */
821    0x19A6_E01E_3AD8_52BF, /*  597 */
822    0x42A9_9CCB_DBD4_B40B, /*  598 */
823    0xA599_98AF_45E9_C559, /*  599 */
824    0x3662_95E8_07D9_3186, /*  600 */
825    0x6B48_181B_FAA1_F773, /*  601 */
826    0x1FEC_57E2_157A_0A1D, /*  602 */
827    0x4667_446A_F620_1AD5, /*  603 */
828    0xE615_EBCA_CFB0_F075, /*  604 */
829    0xB8F3_1F4F_6829_0778, /*  605 */
830    0x2271_3ED6_CE22_D11E, /*  606 */
831    0x3057_C1A7_2EC3_C93B, /*  607 */
832    0xCB46_ACC3_7C3F_1F2F, /*  608 */
833    0xDBB8_93FD_02AA_F50E, /*  609 */
834    0x331F_D92E_600B_9FCF, /*  610 */
835    0xA498_F961_48EA_3AD6, /*  611 */
836    0xA8D8_426E_8B6A_83EA, /*  612 */
837    0xA089_B274_B773_5CDC, /*  613 */
838    0x87F6_B373_1E52_4A11, /*  614 */
839    0x1188_08E5_CBC9_6749, /*  615 */
840    0x9906_E4C7_B19B_D394, /*  616 */
841    0xAFED_7F7E_9B24_A20C, /*  617 */
842    0x6509_EADE_EB36_44A7, /*  618 */
843    0x6C1E_F1D3_E8EF_0EDE, /*  619 */
844    0xB9C9_7D43_E979_8FB4, /*  620 */
845    0xA2F2_D784_740C_28A3, /*  621 */
846    0x7B84_9647_6197_566F, /*  622 */
847    0x7A5B_E3E6_B65F_069D, /*  623 */
848    0xF963_30ED_78BE_6F10, /*  624 */
849    0xEEE6_0DE7_7A07_6A15, /*  625 */
850    0x2B4B_EE4A_A08B_9BD0, /*  626 */
851    0x6A56_A63E_C7B8_894E, /*  627 */
852    0x0212_1359_BA34_FEF4, /*  628 */
853    0x4CBF_99F8_2837_03FC, /*  629 */
854    0x3980_7135_0CAF_30C8, /*  630 */
855    0xD0A7_7A89_F017_687A, /*  631 */
856    0xF1C1_A9EB_9E42_3569, /*  632 */
857    0x8C79_7628_2DEE_8199, /*  633 */
858    0x5D17_37A5_DD1F_7ABD, /*  634 */
859    0x4F53_433C_09A9_FA80, /*  635 */
860    0xFA8B_0C53_DF7C_A1D9, /*  636 */
861    0x3FD9_DCBC_886C_CB77, /*  637 */
862    0xC040_917C_A91B_4720, /*  638 */
863    0x7DD0_0142_F9D1_DCDF, /*  639 */
864    0x8476_FC1D_4F38_7B58, /*  640 */
865    0x23F8_E7C5_F331_6503, /*  641 */
866    0x032A_2244_E7E3_7339, /*  642 */
867    0x5C87_A5D7_50F5_A74B, /*  643 */
868    0x082B_4CC4_3698_992E, /*  644 */
869    0xDF91_7BEC_B858_F63C, /*  645 */
870    0x3270_B8FC_5BF8_6DDA, /*  646 */
871    0x10AE_72BB_29B5_DD76, /*  647 */
872    0x576A_C94E_7700_362B, /*  648 */
873    0x1AD1_12DA_C61E_FB8F, /*  649 */
874    0x691B_C30E_C5FA_A427, /*  650 */
875    0xFF24_6311_CC32_7143, /*  651 */
876    0x3142_368E_30E5_3206, /*  652 */
877    0x7138_0E31_E02C_A396, /*  653 */
878    0x958D_5C96_0AAD_76F1, /*  654 */
879    0xF8D6_F430_C16D_A536, /*  655 */
880    0xC8FF_D13F_1BE7_E1D2, /*  656 */
881    0x7578_AE66_004D_DBE1, /*  657 */
882    0x0583_3F01_067B_E646, /*  658 */
883    0xBB34_B5AD_3BFE_586D, /*  659 */
884    0x095F_34C9_A12B_97F0, /*  660 */
885    0x247A_B645_25D6_0CA8, /*  661 */
886    0xDCDB_C6F3_0174_77D1, /*  662 */
887    0x4A2E_14D4_DECA_D24D, /*  663 */
888    0xBDB5_E6D9_BE0A_1EEB, /*  664 */
889    0x2A7E_70F7_7943_01AB, /*  665 */
890    0xDEF4_2D8A_2705_40FD, /*  666 */
891    0x0107_8EC0_A34C_22C1, /*  667 */
892    0xE5DE_511A_F4C1_6387, /*  668 */
893    0x7EBB_3A52_BD9A_330A, /*  669 */
894    0x7769_7857_AA7D_6435, /*  670 */
895    0x004E_8316_03AE_4C32, /*  671 */
896    0xE7A2_1020_AD78_E312, /*  672 */
897    0x9D41_A70C_6AB4_20F2, /*  673 */
898    0x28E0_6C18_EA11_41E6, /*  674 */
899    0xD2B2_8CBD_984F_6B28, /*  675 */
900    0x26B7_5F6C_446E_9D83, /*  676 */
901    0xBA47_568C_4D41_8D7F, /*  677 */
902    0xD80B_ADBF_E618_3D8E, /*  678 */
903    0x0E20_6D7F_5F16_6044, /*  679 */
904    0xE258_A439_11CB_CA3E, /*  680 */
905    0x723A_1746_B21D_C0BC, /*  681 */
906    0xC7CA_A854_F5D7_CDD3, /*  682 */
907    0x7CAC_3288_3D26_1D9C, /*  683 */
908    0x7690_C264_23BA_942C, /*  684 */
909    0x17E5_5524_4780_42B8, /*  685 */
910    0xE0BE_4776_56A2_389F, /*  686 */
911    0x4D28_9B5E_67AB_2DA0, /*  687 */
912    0x4486_2B9C_8FBB_FD31, /*  688 */
913    0xB47C_C804_9D14_1365, /*  689 */
914    0x822C_1B36_2B91_C793, /*  690 */
915    0x4EB1_4655_FB13_DFD8, /*  691 */
916    0x1ECB_BA07_14E2_A97B, /*  692 */
917    0x6143_459D_5CDE_5F14, /*  693 */
918    0x53A8_FBF1_D5F0_AC89, /*  694 */
919    0x97EA_04D8_1C5E_5B00, /*  695 */
920    0x6221_81A8_D4FD_B3F3, /*  696 */
921    0xE9BC_D341_572A_1208, /*  697 */
922    0x1411_2586_43CC_E58A, /*  698 */
923    0x9144_C5FE_A4C6_E0A4, /*  699 */
924    0x0D33_D065_65CF_620F, /*  700 */
925    0x54A4_8D48_9F21_9CA1, /*  701 */
926    0xC43E_5EAC_6D63_C821, /*  702 */
927    0xA972_8B3A_7277_0DAF, /*  703 */
928    0xD793_4E7B_20DF_87EF, /*  704 */
929    0xE355_03B6_1A3E_86E5, /*  705 */
930    0xCAE3_21FB_C819_D504, /*  706 */
931    0x129A_50B3_AC60_BFA6, /*  707 */
932    0xCD5E_68EA_7E9F_B6C3, /*  708 */
933    0xB01C_9019_9483_B1C7, /*  709 */
934    0x3DE9_3CD5_C295_376C, /*  710 */
935    0xAED5_2EDF_2AB9_AD13, /*  711 */
936    0x2E60_F512_C0A0_7884, /*  712 */
937    0xBC3D_86A3_E362_10C9, /*  713 */
938    0x3526_9D9B_1639_51CE, /*  714 */
939    0x0C7D_6E2A_D0CD_B5FA, /*  715 */
940    0x59E8_6297_D87F_5733, /*  716 */
941    0x298E_F221_898D_B0E7, /*  717 */
942    0x5500_0029_D1A5_AA7E, /*  718 */
943    0x8BC0_8AE1_B506_1B45, /*  719 */
944    0xC2C3_1C2B_6C92_703A, /*  720 */
945    0x94CC_596B_AF25_EF42, /*  721 */
946    0x0A1D_73DB_2254_0456, /*  722 */
947    0x04B6_A0F9_D9C4_179A, /*  723 */
948    0xEFFD_AFA2_AE3D_3C60, /*  724 */
949    0xF7C8_075B_B494_96C4, /*  725 */
950    0x9CC5_C714_1D1C_D4E3, /*  726 */
951    0x78BD_1638_218E_5534, /*  727 */
952    0xB2F1_1568_F850_246A, /*  728 */
953    0xEDFA_BCFA_9502_BC29, /*  729 */
954    0x796C_E5F2_DA23_051B, /*  730 */
955    0xAAE1_28B0_DC93_537C, /*  731 */
956    0x3A49_3DA0_EE4B_29AE, /*  732 */
957    0xB5DF_6B2C_4168_95D7, /*  733 */
958    0xFCAB_BD25_122D_7F37, /*  734 */
959    0x7081_0B58_105D_C4B1, /*  735 */
960    0xE10F_DD37_F788_2A90, /*  736 */
961    0x524D_CAB5_518A_3F5C, /*  737 */
962    0x3C9E_8587_8451_255B, /*  738 */
963    0x4029_8281_19BD_34E2, /*  739 */
964    0x74A0_5B6F_5D3C_ECCB, /*  740 */
965    0xB610_0215_42E1_3ECA, /*  741 */
966    0x0FF9_79D1_2F59_E2AC, /*  742 */
967    0x6037_DA27_E4F9_CC50, /*  743 */
968    0x5E92_975A_0DF1_847D, /*  744 */
969    0xD66D_E190_D3E6_23FE, /*  745 */
970    0x5032_D6B8_7B56_8048, /*  746 */
971    0x9A36_B7CE_8235_216E, /*  747 */
972    0x8027_2A7A_24F6_4B4A, /*  748 */
973    0x93EF_ED8B_8C69_16F7, /*  749 */
974    0x37DD_BFF4_4CCE_1555, /*  750 */
975    0x4B95_DB5D_4B99_BD25, /*  751 */
976    0x92D3_FDA1_6981_2FC0, /*  752 */
977    0xFB1A_4A9A_9066_0BB6, /*  753 */
978    0x730C_1969_46A4_B9B2, /*  754 */
979    0x81E2_89AA_7F49_DA68, /*  755 */
980    0x6466_9A0F_83B1_A05F, /*  756 */
981    0x27B3_FF7D_9644_F48B, /*  757 */
982    0xCC6B_615C_8DB6_75B3, /*  758 */
983    0x674F_20B9_BCEB_BE95, /*  759 */
984    0x6F31_2382_7565_5982, /*  760 */
985    0x5AE4_8871_3E45_CF05, /*  761 */
986    0xBF61_9F99_54C2_1157, /*  762 */
987    0xEABA_C460_40A8_EAE9, /*  763 */
988    0x454C_6FE9_F2C0_C1CD, /*  764 */
989    0x419C_F649_6412_691C, /*  765 */
990    0xD3DC_3BEF_265B_0F70, /*  766 */
991    0x6D0E_60F5_C357_8A9E, /*  767 */
992];
993static T4: [u64; 256] = [
994    0x5B0E_6085_2632_3C55, /*  768 */
995    0x1A46_C1A9_FA1B_59F5, /*  769 */
996    0xA9E2_45A1_7C4C_8FFA, /*  770 */
997    0x65CA_5159_DB29_55D7, /*  771 */
998    0x05DB_0A76_CE35_AFC2, /*  772 */
999    0x81EA_C77E_A911_3D45, /*  773 */
1000    0x528E_F88A_B6AC_0A0D, /*  774 */
1001    0xA09E_A253_597B_E3FF, /*  775 */
1002    0x430D_DFB3_AC48_CD56, /*  776 */
1003    0xC4B3_A67A_F45C_E46F, /*  777 */
1004    0x4ECE_CFD8_FBE2_D05E, /*  778 */
1005    0x3EF5_6F10_B399_35F0, /*  779 */
1006    0x0B22_D682_9CD6_19C6, /*  780 */
1007    0x17FD_460A_74DF_2069, /*  781 */
1008    0x6CF8_CC8E_8510_ED40, /*  782 */
1009    0xD6C8_24BF_3A6E_CAA7, /*  783 */
1010    0x6124_3D58_1A81_7049, /*  784 */
1011    0x048B_ACB6_BBC1_63A2, /*  785 */
1012    0xD9A3_8AC2_7D44_CC32, /*  786 */
1013    0x7FDD_FF5B_AAF4_10AB, /*  787 */
1014    0xAD6D_495A_A804_824B, /*  788 */
1015    0xE1A6_A74F_2D8C_9F94, /*  789 */
1016    0xD4F7_8512_35DE_E8E3, /*  790 */
1017    0xFD4B_7F88_6540_D893, /*  791 */
1018    0x247C_2004_2AA4_BFDA, /*  792 */
1019    0x096E_A1C5_17D1_327C, /*  793 */
1020    0xD569_66B4_361A_6685, /*  794 */
1021    0x277D_A5C3_1221_057D, /*  795 */
1022    0x94D5_9893_A43A_CFF7, /*  796 */
1023    0x64F0_C51C_CDC0_2281, /*  797 */
1024    0x3D33_BCC4_FF61_89DB, /*  798 */
1025    0xE005_CB18_4CE6_6AF1, /*  799 */
1026    0xFF5C_CD1D_1DB9_9BEA, /*  800 */
1027    0xB0B8_54A7_FE42_980F, /*  801 */
1028    0x7BD4_6A6A_718D_4B9F, /*  802 */
1029    0xD10F_A8CC_22A5_FD8C, /*  803 */
1030    0xD314_8495_2BE4_BD31, /*  804 */
1031    0xC7FA_975F_CB24_3847, /*  805 */
1032    0x4886_ED1E_5846_C407, /*  806 */
1033    0x28CD_DB79_1EB7_0B04, /*  807 */
1034    0xC2B0_0BE2_F573_417F, /*  808 */
1035    0x5C95_9045_2180_F877, /*  809 */
1036    0x7A6B_DDFF_F370_EB00, /*  810 */
1037    0xCE50_9E38_D6D9_D6A4, /*  811 */
1038    0xEBEB_0F00_647F_A702, /*  812 */
1039    0x1DCC_06CF_7660_6F06, /*  813 */
1040    0xE4D9_F28B_A286_FF0A, /*  814 */
1041    0xD85A_305D_C918_C262, /*  815 */
1042    0x475B_1D87_3222_5F54, /*  816 */
1043    0x2D4F_B516_68CC_B5FE, /*  817 */
1044    0xA679_B9D9_D72B_BA20, /*  818 */
1045    0x5384_1C0D_912D_43A5, /*  819 */
1046    0x3B7E_AA48_BF12_A4E8, /*  820 */
1047    0x781E_0E47_F22F_1DDF, /*  821 */
1048    0xEFF2_0CE6_0AB5_0973, /*  822 */
1049    0x20D2_61D1_9DFF_B742, /*  823 */
1050    0x16A1_2B03_062A_2E39, /*  824 */
1051    0x1960_EB22_3965_0495, /*  825 */
1052    0x251C_16FE_D50E_B8B8, /*  826 */
1053    0x9AC0_C330_F826_016E, /*  827 */
1054    0xED15_2665_953E_7671, /*  828 */
1055    0x02D6_3194_A636_9570, /*  829 */
1056    0x5074_F083_94B1_C987, /*  830 */
1057    0x70BA_598C_90B2_5CE1, /*  831 */
1058    0x794A_1581_0B97_42F6, /*  832 */
1059    0x0D59_25E9_FCAF_8C6C, /*  833 */
1060    0x3067_716C_D868_744E, /*  834 */
1061    0x910A_B077_E8D7_731B, /*  835 */
1062    0x6A61_BBDB_5AC4_2F61, /*  836 */
1063    0x9351_3EFB_F085_1567, /*  837 */
1064    0xF494_724B_9E83_E9D5, /*  838 */
1065    0xE887_E198_5C09_648D, /*  839 */
1066    0x34B1_D3C6_7537_0CFD, /*  840 */
1067    0xDC35_E433_BC0D_255D, /*  841 */
1068    0xD0AA_B842_3413_1BE0, /*  842 */
1069    0x0804_2A50_B48B_7EAF, /*  843 */
1070    0x9997_C4EE_44A3_AB35, /*  844 */
1071    0x829A_7B49_2017_99D0, /*  845 */
1072    0x263B_8307_B7C5_4441, /*  846 */
1073    0x752F_95F4_FD6A_6CA6, /*  847 */
1074    0x9272_1740_2C08_C6E5, /*  848 */
1075    0x2A8A_B754_A795_D9EE, /*  849 */
1076    0xA442_F755_2F72_943D, /*  850 */
1077    0x2C31_334E_1978_1208, /*  851 */
1078    0x4FA9_8D7C_EAEE_6291, /*  852 */
1079    0x55C3_862F_665D_B309, /*  853 */
1080    0xBD06_1017_5D53_B1F3, /*  854 */
1081    0x46FE_6CB8_4041_3F27, /*  855 */
1082    0x3FE0_3792_DF0C_FA59, /*  856 */
1083    0xCFE7_0037_2EB8_5E8F, /*  857 */
1084    0xA7BE_29E7_ADBC_E118, /*  858 */
1085    0xE544_EE5C_DE84_31DD, /*  859 */
1086    0x8A78_1B1B_41F1_873E, /*  860 */
1087    0xA5C9_4C78_A0D2_F0E7, /*  861 */
1088    0x3941_2E28_77B6_0728, /*  862 */
1089    0xA126_5EF3_AFC9_A62C, /*  863 */
1090    0xBCC2_770C_6A25_06C5, /*  864 */
1091    0x3AB6_6DD5_DCE1_CE12, /*  865 */
1092    0xE654_99D0_4A67_5B37, /*  866 */
1093    0x7D8F_5234_81BF_D216, /*  867 */
1094    0x0F6F_64FC_EC15_F389, /*  868 */
1095    0x74EF_BE61_8B5B_13C8, /*  869 */
1096    0xACDC_82B7_1427_3E1D, /*  870 */
1097    0xDD40_BFE0_0319_9D17, /*  871 */
1098    0x37E9_9257_E7E0_61F8, /*  872 */
1099    0xFA52_6269_0477_5AAA, /*  873 */
1100    0x8BBB_F63A_463D_56F9, /*  874 */
1101    0xF001_3F15_43A2_6E64, /*  875 */
1102    0xA830_7E9F_879E_C898, /*  876 */
1103    0xCC4C_27A4_1501_77CC, /*  877 */
1104    0x1B43_2F2C_CA1D_3348, /*  878 */
1105    0xDE1D_1F8F_9F6F_A013, /*  879 */
1106    0x6066_02A0_47A7_DDD6, /*  880 */
1107    0xD237_AB64_CC1C_B2C7, /*  881 */
1108    0x9B93_8E72_25FC_D1D3, /*  882 */
1109    0xEC4E_0370_8E0F_F476, /*  883 */
1110    0xFEB2_FBDA_3D03_C12D, /*  884 */
1111    0xAE0B_CED2_EE43_889A, /*  885 */
1112    0x22CB_8923_EBFB_4F43, /*  886 */
1113    0x6936_0D01_3CF7_396D, /*  887 */
1114    0x855E_3602_D2D4_E022, /*  888 */
1115    0x0738_05BA_D01F_784C, /*  889 */
1116    0x33E1_7A13_3852_F546, /*  890 */
1117    0xDF48_7405_8AC7_B638, /*  891 */
1118    0xBA92_B29C_678A_A14A, /*  892 */
1119    0x0CE8_9FC7_6CFA_ADCD, /*  893 */
1120    0x5F9D_4E09_0833_9E34, /*  894 */
1121    0xF1AF_E929_1F59_23B9, /*  895 */
1122    0x6E34_80F6_0F4A_265F, /*  896 */
1123    0xEEBF_3A2A_B29B_841C, /*  897 */
1124    0xE219_38A8_8F91_B4AD, /*  898 */
1125    0x57DF_EFF8_45C6_D3C3, /*  899 */
1126    0x2F00_6B0B_F62C_AAF2, /*  900 */
1127    0x62F4_79EF_6F75_EE78, /*  901 */
1128    0x11A5_5AD4_1C89_16A9, /*  902 */
1129    0xF229_D290_84FE_D453, /*  903 */
1130    0x42F1_C27B_16B0_00E6, /*  904 */
1131    0x2B1F_7674_9823_C074, /*  905 */
1132    0x4B76_ECA3_C274_5360, /*  906 */
1133    0x8C98_F463_B916_91BD, /*  907 */
1134    0x14BC_C93C_F1AD_E66A, /*  908 */
1135    0x8885_213E_6D45_8397, /*  909 */
1136    0x8E17_7DF0_274D_4711, /*  910 */
1137    0xB49B_73B5_503F_2951, /*  911 */
1138    0x1016_8168_C3F9_6B6B, /*  912 */
1139    0x0E3D_963B_63CA_B0AE, /*  913 */
1140    0x8DFC_4B56_55A1_DB14, /*  914 */
1141    0xF789_F135_6E14_DE5C, /*  915 */
1142    0x683E_68AF_4E51_DAC1, /*  916 */
1143    0xC9A8_4F9D_8D4B_0FD9, /*  917 */
1144    0x3691_E03F_52A0_F9D1, /*  918 */
1145    0x5ED8_6E46_E187_8E80, /*  919 */
1146    0x3C71_1A0E_99D0_7150, /*  920 */
1147    0x5A08_65B2_0C4E_9310, /*  921 */
1148    0x56FB_FC1F_E4F0_682E, /*  922 */
1149    0xEA8D_5DE3_105E_DF9B, /*  923 */
1150    0x71AB_FDB1_2379_187A, /*  924 */
1151    0x2EB9_9DE1_BEE7_7B9C, /*  925 */
1152    0x21EC_C0EA_33CF_4523, /*  926 */
1153    0x59A4_D752_1805_C7A1, /*  927 */
1154    0x3896_F5EB_56AE_7C72, /*  928 */
1155    0xAA63_8F3D_B18F_75DC, /*  929 */
1156    0x9F39_358D_ABE9_808E, /*  930 */
1157    0xB7DE_FA91_C00B_72AC, /*  931 */
1158    0x6B55_41FD_6249_2D92, /*  932 */
1159    0x6DC6_DEE8_F92E_4D5B, /*  933 */
1160    0x353F_57AB_C4BE_EA7E, /*  934 */
1161    0x7357_69D6_DA56_90CE, /*  935 */
1162    0x0A23_4AA6_4239_1484, /*  936 */
1163    0xF6F9_5080_28F8_0D9D, /*  937 */
1164    0xB8E3_19A2_7AB3_F215, /*  938 */
1165    0x31AD_9C11_5134_1A4D, /*  939 */
1166    0x773C_22A5_7BEF_5805, /*  940 */
1167    0x45C7_561A_0796_8633, /*  941 */
1168    0xF913_DA9E_249D_BE36, /*  942 */
1169    0xDA65_2D9B_78A6_4C68, /*  943 */
1170    0x4C27_A97F_3BC3_34EF, /*  944 */
1171    0x7662_1220_E66B_17F4, /*  945 */
1172    0x9677_4389_9ACD_7D0B, /*  946 */
1173    0xF3EE_5BCA_E0ED_6782, /*  947 */
1174    0x409F_7536_00C8_79FC, /*  948 */
1175    0x06D0_9A39_B592_6DB6, /*  949 */
1176    0x6F83_AEB0_317A_C588, /*  950 */
1177    0x01E6_CA4A_8638_1F21, /*  951 */
1178    0x66FF_3462_D19F_3025, /*  952 */
1179    0x7220_7C24_DDFD_3BFB, /*  953 */
1180    0x4AF6_B6D3_E2EC_E2EB, /*  954 */
1181    0x9C99_4DBE_C7EA_08DE, /*  955 */
1182    0x49AC_E597_B09A_8BC4, /*  956 */
1183    0xB38C_4766_CF07_97BA, /*  957 */
1184    0x131B_9373_C57C_2A75, /*  958 */
1185    0xB182_2CCE_6193_1E58, /*  959 */
1186    0x9D75_55B9_09BA_1C0C, /*  960 */
1187    0x127F_AFDD_937D_11D2, /*  961 */
1188    0x29DA_3BAD_C66D_92E4, /*  962 */
1189    0xA2C1_D571_54C2_ECBC, /*  963 */
1190    0x58C5_134D_82F6_FE24, /*  964 */
1191    0x1C3A_E351_5B62_274F, /*  965 */
1192    0xE907_C82E_01CB_8126, /*  966 */
1193    0xF8ED_0919_13E3_7FCB, /*  967 */
1194    0x3249_D8F9_C800_46C9, /*  968 */
1195    0x80CF_9BED_E388_FB63, /*  969 */
1196    0x1881_539A_116C_F19E, /*  970 */
1197    0x5103_F3F7_6BD5_2457, /*  971 */
1198    0x15B7_E6F5_AE47_F7A8, /*  972 */
1199    0xDBD7_C6DE_D47E_9CCF, /*  973 */
1200    0x44E5_5C41_0228_BB1A, /*  974 */
1201    0xB647_D425_5EDB_4E99, /*  975 */
1202    0x5D11_882B_B8AA_FC30, /*  976 */
1203    0xF509_8BBB_29D3_212A, /*  977 */
1204    0x8FB5_EA14_E902_96B3, /*  978 */
1205    0x677B_9421_57DD_025A, /*  979 */
1206    0xFB58_E7C0_A390_ACB5, /*  980 */
1207    0x89D3_674C_83BD_4A01, /*  981 */
1208    0x9E2D_A4DF_4BF3_B93B, /*  982 */
1209    0xFCC4_1E32_8CAB_4829, /*  983 */
1210    0x03F3_8C96_BA58_2C52, /*  984 */
1211    0xCAD1_BDBD_7FD8_5DB2, /*  985 */
1212    0xBBB4_42C1_6082_AE83, /*  986 */
1213    0xB95F_E86B_A5DA_9AB0, /*  987 */
1214    0xB22E_0467_3771_A93F, /*  988 */
1215    0x8453_58C9_4931_52D8, /*  989 */
1216    0xBE2A_4886_97B4_541E, /*  990 */
1217    0x95A2_DC2D_D38E_6966, /*  991 */
1218    0xC02C_11AC_923C_852B, /*  992 */
1219    0x2388_B199_0DF2_A87B, /*  993 */
1220    0x7C80_08FA_1B4F_37BE, /*  994 */
1221    0x1F70_D0C8_4D54_E503, /*  995 */
1222    0x5490_ADEC_7ECE_57D4, /*  996 */
1223    0x002B_3C27_D906_3A3A, /*  997 */
1224    0x7EAE_A384_8030_A2BF, /*  998 */
1225    0xC602_326D_ED20_03C0, /*  999 */
1226    0x83A7_287D_69A9_4086, /* 1000 */
1227    0xC57A_5FCB_30F5_7A8A, /* 1001 */
1228    0xB568_44E4_79EB_E779, /* 1002 */
1229    0xA373_B40F_05DC_BCE9, /* 1003 */
1230    0xD71A_786E_8857_0EE2, /* 1004 */
1231    0x879C_BACD_BDE8_F6A0, /* 1005 */
1232    0x976A_D1BC_C164_A32F, /* 1006 */
1233    0xAB21_E25E_9666_D78B, /* 1007 */
1234    0x9010_63AA_E5E5_C33C, /* 1008 */
1235    0x9818_B344_4869_8D90, /* 1009 */
1236    0xE364_87AE_3E1E_8ABB, /* 1010 */
1237    0xAFBD_F931_893B_DCB4, /* 1011 */
1238    0x6345_A0DC_5FBB_D519, /* 1012 */
1239    0x8628_FE26_9B94_65CA, /* 1013 */
1240    0x1E5D_0160_3F9C_51EC, /* 1014 */
1241    0x4DE4_4006_A150_49B7, /* 1015 */
1242    0xBF6C_70E5_F776_CBB1, /* 1016 */
1243    0x4112_18F2_EF55_2BED, /* 1017 */
1244    0xCB0C_0708_705A_36A3, /* 1018 */
1245    0xE74D_1475_4F98_6044, /* 1019 */
1246    0xCD56_D943_0EA8_280E, /* 1020 */
1247    0xC125_91D7_535F_5065, /* 1021 */
1248    0xC832_23F1_720A_EF96, /* 1022 */
1249    0xC3A0_396F_7363_A51F, /* 1023 */
1250];