1pub const CRC16_BITSIZE: usize = 16;
40pub const CRC16_BITMASK: u16 = 0xFFFFu16;
41pub const CRC16_POLYNOMIAL: u16 = 0x1021u16;
42pub const CRC16_INITIAL_CRC: u16 = 0xFFFFu16;
43pub const CRC16_XOR_OUTPUT: u16 = 0xFFFFu16;
44pub const CRC16_REFLECT_INPUT: bool = false;
45pub const CRC16_REFLECT_OUTPUT: bool = false;
46
47pub fn crc16(data: &[u8], initial_crc: u16) -> u16
67{
68 static TABLE: [[u16; 256]; 16] = [
69 [
70 0x0000u16, 0x1021u16, 0x2042u16, 0x3063u16, 0x4084u16, 0x50A5u16, 0x60C6u16, 0x70E7u16,
71 0x8108u16, 0x9129u16, 0xA14Au16, 0xB16Bu16, 0xC18Cu16, 0xD1ADu16, 0xE1CEu16, 0xF1EFu16,
72 0x1231u16, 0x0210u16, 0x3273u16, 0x2252u16, 0x52B5u16, 0x4294u16, 0x72F7u16, 0x62D6u16,
73 0x9339u16, 0x8318u16, 0xB37Bu16, 0xA35Au16, 0xD3BDu16, 0xC39Cu16, 0xF3FFu16, 0xE3DEu16,
74 0x2462u16, 0x3443u16, 0x0420u16, 0x1401u16, 0x64E6u16, 0x74C7u16, 0x44A4u16, 0x5485u16,
75 0xA56Au16, 0xB54Bu16, 0x8528u16, 0x9509u16, 0xE5EEu16, 0xF5CFu16, 0xC5ACu16, 0xD58Du16,
76 0x3653u16, 0x2672u16, 0x1611u16, 0x0630u16, 0x76D7u16, 0x66F6u16, 0x5695u16, 0x46B4u16,
77 0xB75Bu16, 0xA77Au16, 0x9719u16, 0x8738u16, 0xF7DFu16, 0xE7FEu16, 0xD79Du16, 0xC7BCu16,
78 0x48C4u16, 0x58E5u16, 0x6886u16, 0x78A7u16, 0x0840u16, 0x1861u16, 0x2802u16, 0x3823u16,
79 0xC9CCu16, 0xD9EDu16, 0xE98Eu16, 0xF9AFu16, 0x8948u16, 0x9969u16, 0xA90Au16, 0xB92Bu16,
80 0x5AF5u16, 0x4AD4u16, 0x7AB7u16, 0x6A96u16, 0x1A71u16, 0x0A50u16, 0x3A33u16, 0x2A12u16,
81 0xDBFDu16, 0xCBDCu16, 0xFBBFu16, 0xEB9Eu16, 0x9B79u16, 0x8B58u16, 0xBB3Bu16, 0xAB1Au16,
82 0x6CA6u16, 0x7C87u16, 0x4CE4u16, 0x5CC5u16, 0x2C22u16, 0x3C03u16, 0x0C60u16, 0x1C41u16,
83 0xEDAEu16, 0xFD8Fu16, 0xCDECu16, 0xDDCDu16, 0xAD2Au16, 0xBD0Bu16, 0x8D68u16, 0x9D49u16,
84 0x7E97u16, 0x6EB6u16, 0x5ED5u16, 0x4EF4u16, 0x3E13u16, 0x2E32u16, 0x1E51u16, 0x0E70u16,
85 0xFF9Fu16, 0xEFBEu16, 0xDFDDu16, 0xCFFCu16, 0xBF1Bu16, 0xAF3Au16, 0x9F59u16, 0x8F78u16,
86 0x9188u16, 0x81A9u16, 0xB1CAu16, 0xA1EBu16, 0xD10Cu16, 0xC12Du16, 0xF14Eu16, 0xE16Fu16,
87 0x1080u16, 0x00A1u16, 0x30C2u16, 0x20E3u16, 0x5004u16, 0x4025u16, 0x7046u16, 0x6067u16,
88 0x83B9u16, 0x9398u16, 0xA3FBu16, 0xB3DAu16, 0xC33Du16, 0xD31Cu16, 0xE37Fu16, 0xF35Eu16,
89 0x02B1u16, 0x1290u16, 0x22F3u16, 0x32D2u16, 0x4235u16, 0x5214u16, 0x6277u16, 0x7256u16,
90 0xB5EAu16, 0xA5CBu16, 0x95A8u16, 0x8589u16, 0xF56Eu16, 0xE54Fu16, 0xD52Cu16, 0xC50Du16,
91 0x34E2u16, 0x24C3u16, 0x14A0u16, 0x0481u16, 0x7466u16, 0x6447u16, 0x5424u16, 0x4405u16,
92 0xA7DBu16, 0xB7FAu16, 0x8799u16, 0x97B8u16, 0xE75Fu16, 0xF77Eu16, 0xC71Du16, 0xD73Cu16,
93 0x26D3u16, 0x36F2u16, 0x0691u16, 0x16B0u16, 0x6657u16, 0x7676u16, 0x4615u16, 0x5634u16,
94 0xD94Cu16, 0xC96Du16, 0xF90Eu16, 0xE92Fu16, 0x99C8u16, 0x89E9u16, 0xB98Au16, 0xA9ABu16,
95 0x5844u16, 0x4865u16, 0x7806u16, 0x6827u16, 0x18C0u16, 0x08E1u16, 0x3882u16, 0x28A3u16,
96 0xCB7Du16, 0xDB5Cu16, 0xEB3Fu16, 0xFB1Eu16, 0x8BF9u16, 0x9BD8u16, 0xABBBu16, 0xBB9Au16,
97 0x4A75u16, 0x5A54u16, 0x6A37u16, 0x7A16u16, 0x0AF1u16, 0x1AD0u16, 0x2AB3u16, 0x3A92u16,
98 0xFD2Eu16, 0xED0Fu16, 0xDD6Cu16, 0xCD4Du16, 0xBDAAu16, 0xAD8Bu16, 0x9DE8u16, 0x8DC9u16,
99 0x7C26u16, 0x6C07u16, 0x5C64u16, 0x4C45u16, 0x3CA2u16, 0x2C83u16, 0x1CE0u16, 0x0CC1u16,
100 0xEF1Fu16, 0xFF3Eu16, 0xCF5Du16, 0xDF7Cu16, 0xAF9Bu16, 0xBFBAu16, 0x8FD9u16, 0x9FF8u16,
101 0x6E17u16, 0x7E36u16, 0x4E55u16, 0x5E74u16, 0x2E93u16, 0x3EB2u16, 0x0ED1u16, 0x1EF0u16
102 ],
103 [
104 0x0000u16, 0x3331u16, 0x6662u16, 0x5553u16, 0xCCC4u16, 0xFFF5u16, 0xAAA6u16, 0x9997u16,
105 0x89A9u16, 0xBA98u16, 0xEFCBu16, 0xDCFAu16, 0x456Du16, 0x765Cu16, 0x230Fu16, 0x103Eu16,
106 0x0373u16, 0x3042u16, 0x6511u16, 0x5620u16, 0xCFB7u16, 0xFC86u16, 0xA9D5u16, 0x9AE4u16,
107 0x8ADAu16, 0xB9EBu16, 0xECB8u16, 0xDF89u16, 0x461Eu16, 0x752Fu16, 0x207Cu16, 0x134Du16,
108 0x06E6u16, 0x35D7u16, 0x6084u16, 0x53B5u16, 0xCA22u16, 0xF913u16, 0xAC40u16, 0x9F71u16,
109 0x8F4Fu16, 0xBC7Eu16, 0xE92Du16, 0xDA1Cu16, 0x438Bu16, 0x70BAu16, 0x25E9u16, 0x16D8u16,
110 0x0595u16, 0x36A4u16, 0x63F7u16, 0x50C6u16, 0xC951u16, 0xFA60u16, 0xAF33u16, 0x9C02u16,
111 0x8C3Cu16, 0xBF0Du16, 0xEA5Eu16, 0xD96Fu16, 0x40F8u16, 0x73C9u16, 0x269Au16, 0x15ABu16,
112 0x0DCCu16, 0x3EFDu16, 0x6BAEu16, 0x589Fu16, 0xC108u16, 0xF239u16, 0xA76Au16, 0x945Bu16,
113 0x8465u16, 0xB754u16, 0xE207u16, 0xD136u16, 0x48A1u16, 0x7B90u16, 0x2EC3u16, 0x1DF2u16,
114 0x0EBFu16, 0x3D8Eu16, 0x68DDu16, 0x5BECu16, 0xC27Bu16, 0xF14Au16, 0xA419u16, 0x9728u16,
115 0x8716u16, 0xB427u16, 0xE174u16, 0xD245u16, 0x4BD2u16, 0x78E3u16, 0x2DB0u16, 0x1E81u16,
116 0x0B2Au16, 0x381Bu16, 0x6D48u16, 0x5E79u16, 0xC7EEu16, 0xF4DFu16, 0xA18Cu16, 0x92BDu16,
117 0x8283u16, 0xB1B2u16, 0xE4E1u16, 0xD7D0u16, 0x4E47u16, 0x7D76u16, 0x2825u16, 0x1B14u16,
118 0x0859u16, 0x3B68u16, 0x6E3Bu16, 0x5D0Au16, 0xC49Du16, 0xF7ACu16, 0xA2FFu16, 0x91CEu16,
119 0x81F0u16, 0xB2C1u16, 0xE792u16, 0xD4A3u16, 0x4D34u16, 0x7E05u16, 0x2B56u16, 0x1867u16,
120 0x1B98u16, 0x28A9u16, 0x7DFAu16, 0x4ECBu16, 0xD75Cu16, 0xE46Du16, 0xB13Eu16, 0x820Fu16,
121 0x9231u16, 0xA100u16, 0xF453u16, 0xC762u16, 0x5EF5u16, 0x6DC4u16, 0x3897u16, 0x0BA6u16,
122 0x18EBu16, 0x2BDAu16, 0x7E89u16, 0x4DB8u16, 0xD42Fu16, 0xE71Eu16, 0xB24Du16, 0x817Cu16,
123 0x9142u16, 0xA273u16, 0xF720u16, 0xC411u16, 0x5D86u16, 0x6EB7u16, 0x3BE4u16, 0x08D5u16,
124 0x1D7Eu16, 0x2E4Fu16, 0x7B1Cu16, 0x482Du16, 0xD1BAu16, 0xE28Bu16, 0xB7D8u16, 0x84E9u16,
125 0x94D7u16, 0xA7E6u16, 0xF2B5u16, 0xC184u16, 0x5813u16, 0x6B22u16, 0x3E71u16, 0x0D40u16,
126 0x1E0Du16, 0x2D3Cu16, 0x786Fu16, 0x4B5Eu16, 0xD2C9u16, 0xE1F8u16, 0xB4ABu16, 0x879Au16,
127 0x97A4u16, 0xA495u16, 0xF1C6u16, 0xC2F7u16, 0x5B60u16, 0x6851u16, 0x3D02u16, 0x0E33u16,
128 0x1654u16, 0x2565u16, 0x7036u16, 0x4307u16, 0xDA90u16, 0xE9A1u16, 0xBCF2u16, 0x8FC3u16,
129 0x9FFDu16, 0xACCCu16, 0xF99Fu16, 0xCAAEu16, 0x5339u16, 0x6008u16, 0x355Bu16, 0x066Au16,
130 0x1527u16, 0x2616u16, 0x7345u16, 0x4074u16, 0xD9E3u16, 0xEAD2u16, 0xBF81u16, 0x8CB0u16,
131 0x9C8Eu16, 0xAFBFu16, 0xFAECu16, 0xC9DDu16, 0x504Au16, 0x637Bu16, 0x3628u16, 0x0519u16,
132 0x10B2u16, 0x2383u16, 0x76D0u16, 0x45E1u16, 0xDC76u16, 0xEF47u16, 0xBA14u16, 0x8925u16,
133 0x991Bu16, 0xAA2Au16, 0xFF79u16, 0xCC48u16, 0x55DFu16, 0x66EEu16, 0x33BDu16, 0x008Cu16,
134 0x13C1u16, 0x20F0u16, 0x75A3u16, 0x4692u16, 0xDF05u16, 0xEC34u16, 0xB967u16, 0x8A56u16,
135 0x9A68u16, 0xA959u16, 0xFC0Au16, 0xCF3Bu16, 0x56ACu16, 0x659Du16, 0x30CEu16, 0x03FFu16
136 ],
137 [
138 0x0000u16, 0x3730u16, 0x6E60u16, 0x5950u16, 0xDCC0u16, 0xEBF0u16, 0xB2A0u16, 0x8590u16,
139 0xA9A1u16, 0x9E91u16, 0xC7C1u16, 0xF0F1u16, 0x7561u16, 0x4251u16, 0x1B01u16, 0x2C31u16,
140 0x4363u16, 0x7453u16, 0x2D03u16, 0x1A33u16, 0x9FA3u16, 0xA893u16, 0xF1C3u16, 0xC6F3u16,
141 0xEAC2u16, 0xDDF2u16, 0x84A2u16, 0xB392u16, 0x3602u16, 0x0132u16, 0x5862u16, 0x6F52u16,
142 0x86C6u16, 0xB1F6u16, 0xE8A6u16, 0xDF96u16, 0x5A06u16, 0x6D36u16, 0x3466u16, 0x0356u16,
143 0x2F67u16, 0x1857u16, 0x4107u16, 0x7637u16, 0xF3A7u16, 0xC497u16, 0x9DC7u16, 0xAAF7u16,
144 0xC5A5u16, 0xF295u16, 0xABC5u16, 0x9CF5u16, 0x1965u16, 0x2E55u16, 0x7705u16, 0x4035u16,
145 0x6C04u16, 0x5B34u16, 0x0264u16, 0x3554u16, 0xB0C4u16, 0x87F4u16, 0xDEA4u16, 0xE994u16,
146 0x1DADu16, 0x2A9Du16, 0x73CDu16, 0x44FDu16, 0xC16Du16, 0xF65Du16, 0xAF0Du16, 0x983Du16,
147 0xB40Cu16, 0x833Cu16, 0xDA6Cu16, 0xED5Cu16, 0x68CCu16, 0x5FFCu16, 0x06ACu16, 0x319Cu16,
148 0x5ECEu16, 0x69FEu16, 0x30AEu16, 0x079Eu16, 0x820Eu16, 0xB53Eu16, 0xEC6Eu16, 0xDB5Eu16,
149 0xF76Fu16, 0xC05Fu16, 0x990Fu16, 0xAE3Fu16, 0x2BAFu16, 0x1C9Fu16, 0x45CFu16, 0x72FFu16,
150 0x9B6Bu16, 0xAC5Bu16, 0xF50Bu16, 0xC23Bu16, 0x47ABu16, 0x709Bu16, 0x29CBu16, 0x1EFBu16,
151 0x32CAu16, 0x05FAu16, 0x5CAAu16, 0x6B9Au16, 0xEE0Au16, 0xD93Au16, 0x806Au16, 0xB75Au16,
152 0xD808u16, 0xEF38u16, 0xB668u16, 0x8158u16, 0x04C8u16, 0x33F8u16, 0x6AA8u16, 0x5D98u16,
153 0x71A9u16, 0x4699u16, 0x1FC9u16, 0x28F9u16, 0xAD69u16, 0x9A59u16, 0xC309u16, 0xF439u16,
154 0x3B5Au16, 0x0C6Au16, 0x553Au16, 0x620Au16, 0xE79Au16, 0xD0AAu16, 0x89FAu16, 0xBECAu16,
155 0x92FBu16, 0xA5CBu16, 0xFC9Bu16, 0xCBABu16, 0x4E3Bu16, 0x790Bu16, 0x205Bu16, 0x176Bu16,
156 0x7839u16, 0x4F09u16, 0x1659u16, 0x2169u16, 0xA4F9u16, 0x93C9u16, 0xCA99u16, 0xFDA9u16,
157 0xD198u16, 0xE6A8u16, 0xBFF8u16, 0x88C8u16, 0x0D58u16, 0x3A68u16, 0x6338u16, 0x5408u16,
158 0xBD9Cu16, 0x8AACu16, 0xD3FCu16, 0xE4CCu16, 0x615Cu16, 0x566Cu16, 0x0F3Cu16, 0x380Cu16,
159 0x143Du16, 0x230Du16, 0x7A5Du16, 0x4D6Du16, 0xC8FDu16, 0xFFCDu16, 0xA69Du16, 0x91ADu16,
160 0xFEFFu16, 0xC9CFu16, 0x909Fu16, 0xA7AFu16, 0x223Fu16, 0x150Fu16, 0x4C5Fu16, 0x7B6Fu16,
161 0x575Eu16, 0x606Eu16, 0x393Eu16, 0x0E0Eu16, 0x8B9Eu16, 0xBCAEu16, 0xE5FEu16, 0xD2CEu16,
162 0x26F7u16, 0x11C7u16, 0x4897u16, 0x7FA7u16, 0xFA37u16, 0xCD07u16, 0x9457u16, 0xA367u16,
163 0x8F56u16, 0xB866u16, 0xE136u16, 0xD606u16, 0x5396u16, 0x64A6u16, 0x3DF6u16, 0x0AC6u16,
164 0x6594u16, 0x52A4u16, 0x0BF4u16, 0x3CC4u16, 0xB954u16, 0x8E64u16, 0xD734u16, 0xE004u16,
165 0xCC35u16, 0xFB05u16, 0xA255u16, 0x9565u16, 0x10F5u16, 0x27C5u16, 0x7E95u16, 0x49A5u16,
166 0xA031u16, 0x9701u16, 0xCE51u16, 0xF961u16, 0x7CF1u16, 0x4BC1u16, 0x1291u16, 0x25A1u16,
167 0x0990u16, 0x3EA0u16, 0x67F0u16, 0x50C0u16, 0xD550u16, 0xE260u16, 0xBB30u16, 0x8C00u16,
168 0xE352u16, 0xD462u16, 0x8D32u16, 0xBA02u16, 0x3F92u16, 0x08A2u16, 0x51F2u16, 0x66C2u16,
169 0x4AF3u16, 0x7DC3u16, 0x2493u16, 0x13A3u16, 0x9633u16, 0xA103u16, 0xF853u16, 0xCF63u16
170 ],
171 [
172 0x0000u16, 0x76B4u16, 0xED68u16, 0x9BDCu16, 0xCAF1u16, 0xBC45u16, 0x2799u16, 0x512Du16,
173 0x85C3u16, 0xF377u16, 0x68ABu16, 0x1E1Fu16, 0x4F32u16, 0x3986u16, 0xA25Au16, 0xD4EEu16,
174 0x1BA7u16, 0x6D13u16, 0xF6CFu16, 0x807Bu16, 0xD156u16, 0xA7E2u16, 0x3C3Eu16, 0x4A8Au16,
175 0x9E64u16, 0xE8D0u16, 0x730Cu16, 0x05B8u16, 0x5495u16, 0x2221u16, 0xB9FDu16, 0xCF49u16,
176 0x374Eu16, 0x41FAu16, 0xDA26u16, 0xAC92u16, 0xFDBFu16, 0x8B0Bu16, 0x10D7u16, 0x6663u16,
177 0xB28Du16, 0xC439u16, 0x5FE5u16, 0x2951u16, 0x787Cu16, 0x0EC8u16, 0x9514u16, 0xE3A0u16,
178 0x2CE9u16, 0x5A5Du16, 0xC181u16, 0xB735u16, 0xE618u16, 0x90ACu16, 0x0B70u16, 0x7DC4u16,
179 0xA92Au16, 0xDF9Eu16, 0x4442u16, 0x32F6u16, 0x63DBu16, 0x156Fu16, 0x8EB3u16, 0xF807u16,
180 0x6E9Cu16, 0x1828u16, 0x83F4u16, 0xF540u16, 0xA46Du16, 0xD2D9u16, 0x4905u16, 0x3FB1u16,
181 0xEB5Fu16, 0x9DEBu16, 0x0637u16, 0x7083u16, 0x21AEu16, 0x571Au16, 0xCCC6u16, 0xBA72u16,
182 0x753Bu16, 0x038Fu16, 0x9853u16, 0xEEE7u16, 0xBFCAu16, 0xC97Eu16, 0x52A2u16, 0x2416u16,
183 0xF0F8u16, 0x864Cu16, 0x1D90u16, 0x6B24u16, 0x3A09u16, 0x4CBDu16, 0xD761u16, 0xA1D5u16,
184 0x59D2u16, 0x2F66u16, 0xB4BAu16, 0xC20Eu16, 0x9323u16, 0xE597u16, 0x7E4Bu16, 0x08FFu16,
185 0xDC11u16, 0xAAA5u16, 0x3179u16, 0x47CDu16, 0x16E0u16, 0x6054u16, 0xFB88u16, 0x8D3Cu16,
186 0x4275u16, 0x34C1u16, 0xAF1Du16, 0xD9A9u16, 0x8884u16, 0xFE30u16, 0x65ECu16, 0x1358u16,
187 0xC7B6u16, 0xB102u16, 0x2ADEu16, 0x5C6Au16, 0x0D47u16, 0x7BF3u16, 0xE02Fu16, 0x969Bu16,
188 0xDD38u16, 0xAB8Cu16, 0x3050u16, 0x46E4u16, 0x17C9u16, 0x617Du16, 0xFAA1u16, 0x8C15u16,
189 0x58FBu16, 0x2E4Fu16, 0xB593u16, 0xC327u16, 0x920Au16, 0xE4BEu16, 0x7F62u16, 0x09D6u16,
190 0xC69Fu16, 0xB02Bu16, 0x2BF7u16, 0x5D43u16, 0x0C6Eu16, 0x7ADAu16, 0xE106u16, 0x97B2u16,
191 0x435Cu16, 0x35E8u16, 0xAE34u16, 0xD880u16, 0x89ADu16, 0xFF19u16, 0x64C5u16, 0x1271u16,
192 0xEA76u16, 0x9CC2u16, 0x071Eu16, 0x71AAu16, 0x2087u16, 0x5633u16, 0xCDEFu16, 0xBB5Bu16,
193 0x6FB5u16, 0x1901u16, 0x82DDu16, 0xF469u16, 0xA544u16, 0xD3F0u16, 0x482Cu16, 0x3E98u16,
194 0xF1D1u16, 0x8765u16, 0x1CB9u16, 0x6A0Du16, 0x3B20u16, 0x4D94u16, 0xD648u16, 0xA0FCu16,
195 0x7412u16, 0x02A6u16, 0x997Au16, 0xEFCEu16, 0xBEE3u16, 0xC857u16, 0x538Bu16, 0x253Fu16,
196 0xB3A4u16, 0xC510u16, 0x5ECCu16, 0x2878u16, 0x7955u16, 0x0FE1u16, 0x943Du16, 0xE289u16,
197 0x3667u16, 0x40D3u16, 0xDB0Fu16, 0xADBBu16, 0xFC96u16, 0x8A22u16, 0x11FEu16, 0x674Au16,
198 0xA803u16, 0xDEB7u16, 0x456Bu16, 0x33DFu16, 0x62F2u16, 0x1446u16, 0x8F9Au16, 0xF92Eu16,
199 0x2DC0u16, 0x5B74u16, 0xC0A8u16, 0xB61Cu16, 0xE731u16, 0x9185u16, 0x0A59u16, 0x7CEDu16,
200 0x84EAu16, 0xF25Eu16, 0x6982u16, 0x1F36u16, 0x4E1Bu16, 0x38AFu16, 0xA373u16, 0xD5C7u16,
201 0x0129u16, 0x779Du16, 0xEC41u16, 0x9AF5u16, 0xCBD8u16, 0xBD6Cu16, 0x26B0u16, 0x5004u16,
202 0x9F4Du16, 0xE9F9u16, 0x7225u16, 0x0491u16, 0x55BCu16, 0x2308u16, 0xB8D4u16, 0xCE60u16,
203 0x1A8Eu16, 0x6C3Au16, 0xF7E6u16, 0x8152u16, 0xD07Fu16, 0xA6CBu16, 0x3D17u16, 0x4BA3u16
204 ],
205 [
206 0x0000u16, 0xAA51u16, 0x4483u16, 0xEED2u16, 0x8906u16, 0x2357u16, 0xCD85u16, 0x67D4u16,
207 0x022Du16, 0xA87Cu16, 0x46AEu16, 0xECFFu16, 0x8B2Bu16, 0x217Au16, 0xCFA8u16, 0x65F9u16,
208 0x045Au16, 0xAE0Bu16, 0x40D9u16, 0xEA88u16, 0x8D5Cu16, 0x270Du16, 0xC9DFu16, 0x638Eu16,
209 0x0677u16, 0xAC26u16, 0x42F4u16, 0xE8A5u16, 0x8F71u16, 0x2520u16, 0xCBF2u16, 0x61A3u16,
210 0x08B4u16, 0xA2E5u16, 0x4C37u16, 0xE666u16, 0x81B2u16, 0x2BE3u16, 0xC531u16, 0x6F60u16,
211 0x0A99u16, 0xA0C8u16, 0x4E1Au16, 0xE44Bu16, 0x839Fu16, 0x29CEu16, 0xC71Cu16, 0x6D4Du16,
212 0x0CEEu16, 0xA6BFu16, 0x486Du16, 0xE23Cu16, 0x85E8u16, 0x2FB9u16, 0xC16Bu16, 0x6B3Au16,
213 0x0EC3u16, 0xA492u16, 0x4A40u16, 0xE011u16, 0x87C5u16, 0x2D94u16, 0xC346u16, 0x6917u16,
214 0x1168u16, 0xBB39u16, 0x55EBu16, 0xFFBAu16, 0x986Eu16, 0x323Fu16, 0xDCEDu16, 0x76BCu16,
215 0x1345u16, 0xB914u16, 0x57C6u16, 0xFD97u16, 0x9A43u16, 0x3012u16, 0xDEC0u16, 0x7491u16,
216 0x1532u16, 0xBF63u16, 0x51B1u16, 0xFBE0u16, 0x9C34u16, 0x3665u16, 0xD8B7u16, 0x72E6u16,
217 0x171Fu16, 0xBD4Eu16, 0x539Cu16, 0xF9CDu16, 0x9E19u16, 0x3448u16, 0xDA9Au16, 0x70CBu16,
218 0x19DCu16, 0xB38Du16, 0x5D5Fu16, 0xF70Eu16, 0x90DAu16, 0x3A8Bu16, 0xD459u16, 0x7E08u16,
219 0x1BF1u16, 0xB1A0u16, 0x5F72u16, 0xF523u16, 0x92F7u16, 0x38A6u16, 0xD674u16, 0x7C25u16,
220 0x1D86u16, 0xB7D7u16, 0x5905u16, 0xF354u16, 0x9480u16, 0x3ED1u16, 0xD003u16, 0x7A52u16,
221 0x1FABu16, 0xB5FAu16, 0x5B28u16, 0xF179u16, 0x96ADu16, 0x3CFCu16, 0xD22Eu16, 0x787Fu16,
222 0x22D0u16, 0x8881u16, 0x6653u16, 0xCC02u16, 0xABD6u16, 0x0187u16, 0xEF55u16, 0x4504u16,
223 0x20FDu16, 0x8AACu16, 0x647Eu16, 0xCE2Fu16, 0xA9FBu16, 0x03AAu16, 0xED78u16, 0x4729u16,
224 0x268Au16, 0x8CDBu16, 0x6209u16, 0xC858u16, 0xAF8Cu16, 0x05DDu16, 0xEB0Fu16, 0x415Eu16,
225 0x24A7u16, 0x8EF6u16, 0x6024u16, 0xCA75u16, 0xADA1u16, 0x07F0u16, 0xE922u16, 0x4373u16,
226 0x2A64u16, 0x8035u16, 0x6EE7u16, 0xC4B6u16, 0xA362u16, 0x0933u16, 0xE7E1u16, 0x4DB0u16,
227 0x2849u16, 0x8218u16, 0x6CCAu16, 0xC69Bu16, 0xA14Fu16, 0x0B1Eu16, 0xE5CCu16, 0x4F9Du16,
228 0x2E3Eu16, 0x846Fu16, 0x6ABDu16, 0xC0ECu16, 0xA738u16, 0x0D69u16, 0xE3BBu16, 0x49EAu16,
229 0x2C13u16, 0x8642u16, 0x6890u16, 0xC2C1u16, 0xA515u16, 0x0F44u16, 0xE196u16, 0x4BC7u16,
230 0x33B8u16, 0x99E9u16, 0x773Bu16, 0xDD6Au16, 0xBABEu16, 0x10EFu16, 0xFE3Du16, 0x546Cu16,
231 0x3195u16, 0x9BC4u16, 0x7516u16, 0xDF47u16, 0xB893u16, 0x12C2u16, 0xFC10u16, 0x5641u16,
232 0x37E2u16, 0x9DB3u16, 0x7361u16, 0xD930u16, 0xBEE4u16, 0x14B5u16, 0xFA67u16, 0x5036u16,
233 0x35CFu16, 0x9F9Eu16, 0x714Cu16, 0xDB1Du16, 0xBCC9u16, 0x1698u16, 0xF84Au16, 0x521Bu16,
234 0x3B0Cu16, 0x915Du16, 0x7F8Fu16, 0xD5DEu16, 0xB20Au16, 0x185Bu16, 0xF689u16, 0x5CD8u16,
235 0x3921u16, 0x9370u16, 0x7DA2u16, 0xD7F3u16, 0xB027u16, 0x1A76u16, 0xF4A4u16, 0x5EF5u16,
236 0x3F56u16, 0x9507u16, 0x7BD5u16, 0xD184u16, 0xB650u16, 0x1C01u16, 0xF2D3u16, 0x5882u16,
237 0x3D7Bu16, 0x972Au16, 0x79F8u16, 0xD3A9u16, 0xB47Du16, 0x1E2Cu16, 0xF0FEu16, 0x5AAFu16
238 ],
239 [
240 0x0000u16, 0x45A0u16, 0x8B40u16, 0xCEE0u16, 0x06A1u16, 0x4301u16, 0x8DE1u16, 0xC841u16,
241 0x0D42u16, 0x48E2u16, 0x8602u16, 0xC3A2u16, 0x0BE3u16, 0x4E43u16, 0x80A3u16, 0xC503u16,
242 0x1A84u16, 0x5F24u16, 0x91C4u16, 0xD464u16, 0x1C25u16, 0x5985u16, 0x9765u16, 0xD2C5u16,
243 0x17C6u16, 0x5266u16, 0x9C86u16, 0xD926u16, 0x1167u16, 0x54C7u16, 0x9A27u16, 0xDF87u16,
244 0x3508u16, 0x70A8u16, 0xBE48u16, 0xFBE8u16, 0x33A9u16, 0x7609u16, 0xB8E9u16, 0xFD49u16,
245 0x384Au16, 0x7DEAu16, 0xB30Au16, 0xF6AAu16, 0x3EEBu16, 0x7B4Bu16, 0xB5ABu16, 0xF00Bu16,
246 0x2F8Cu16, 0x6A2Cu16, 0xA4CCu16, 0xE16Cu16, 0x292Du16, 0x6C8Du16, 0xA26Du16, 0xE7CDu16,
247 0x22CEu16, 0x676Eu16, 0xA98Eu16, 0xEC2Eu16, 0x246Fu16, 0x61CFu16, 0xAF2Fu16, 0xEA8Fu16,
248 0x6A10u16, 0x2FB0u16, 0xE150u16, 0xA4F0u16, 0x6CB1u16, 0x2911u16, 0xE7F1u16, 0xA251u16,
249 0x6752u16, 0x22F2u16, 0xEC12u16, 0xA9B2u16, 0x61F3u16, 0x2453u16, 0xEAB3u16, 0xAF13u16,
250 0x7094u16, 0x3534u16, 0xFBD4u16, 0xBE74u16, 0x7635u16, 0x3395u16, 0xFD75u16, 0xB8D5u16,
251 0x7DD6u16, 0x3876u16, 0xF696u16, 0xB336u16, 0x7B77u16, 0x3ED7u16, 0xF037u16, 0xB597u16,
252 0x5F18u16, 0x1AB8u16, 0xD458u16, 0x91F8u16, 0x59B9u16, 0x1C19u16, 0xD2F9u16, 0x9759u16,
253 0x525Au16, 0x17FAu16, 0xD91Au16, 0x9CBAu16, 0x54FBu16, 0x115Bu16, 0xDFBBu16, 0x9A1Bu16,
254 0x459Cu16, 0x003Cu16, 0xCEDCu16, 0x8B7Cu16, 0x433Du16, 0x069Du16, 0xC87Du16, 0x8DDDu16,
255 0x48DEu16, 0x0D7Eu16, 0xC39Eu16, 0x863Eu16, 0x4E7Fu16, 0x0BDFu16, 0xC53Fu16, 0x809Fu16,
256 0xD420u16, 0x9180u16, 0x5F60u16, 0x1AC0u16, 0xD281u16, 0x9721u16, 0x59C1u16, 0x1C61u16,
257 0xD962u16, 0x9CC2u16, 0x5222u16, 0x1782u16, 0xDFC3u16, 0x9A63u16, 0x5483u16, 0x1123u16,
258 0xCEA4u16, 0x8B04u16, 0x45E4u16, 0x0044u16, 0xC805u16, 0x8DA5u16, 0x4345u16, 0x06E5u16,
259 0xC3E6u16, 0x8646u16, 0x48A6u16, 0x0D06u16, 0xC547u16, 0x80E7u16, 0x4E07u16, 0x0BA7u16,
260 0xE128u16, 0xA488u16, 0x6A68u16, 0x2FC8u16, 0xE789u16, 0xA229u16, 0x6CC9u16, 0x2969u16,
261 0xEC6Au16, 0xA9CAu16, 0x672Au16, 0x228Au16, 0xEACBu16, 0xAF6Bu16, 0x618Bu16, 0x242Bu16,
262 0xFBACu16, 0xBE0Cu16, 0x70ECu16, 0x354Cu16, 0xFD0Du16, 0xB8ADu16, 0x764Du16, 0x33EDu16,
263 0xF6EEu16, 0xB34Eu16, 0x7DAEu16, 0x380Eu16, 0xF04Fu16, 0xB5EFu16, 0x7B0Fu16, 0x3EAFu16,
264 0xBE30u16, 0xFB90u16, 0x3570u16, 0x70D0u16, 0xB891u16, 0xFD31u16, 0x33D1u16, 0x7671u16,
265 0xB372u16, 0xF6D2u16, 0x3832u16, 0x7D92u16, 0xB5D3u16, 0xF073u16, 0x3E93u16, 0x7B33u16,
266 0xA4B4u16, 0xE114u16, 0x2FF4u16, 0x6A54u16, 0xA215u16, 0xE7B5u16, 0x2955u16, 0x6CF5u16,
267 0xA9F6u16, 0xEC56u16, 0x22B6u16, 0x6716u16, 0xAF57u16, 0xEAF7u16, 0x2417u16, 0x61B7u16,
268 0x8B38u16, 0xCE98u16, 0x0078u16, 0x45D8u16, 0x8D99u16, 0xC839u16, 0x06D9u16, 0x4379u16,
269 0x867Au16, 0xC3DAu16, 0x0D3Au16, 0x489Au16, 0x80DBu16, 0xC57Bu16, 0x0B9Bu16, 0x4E3Bu16,
270 0x91BCu16, 0xD41Cu16, 0x1AFCu16, 0x5F5Cu16, 0x971Du16, 0xD2BDu16, 0x1C5Du16, 0x59FDu16,
271 0x9CFEu16, 0xD95Eu16, 0x17BEu16, 0x521Eu16, 0x9A5Fu16, 0xDFFFu16, 0x111Fu16, 0x54BFu16
272 ],
273 [
274 0x0000u16, 0xB861u16, 0x60E3u16, 0xD882u16, 0xC1C6u16, 0x79A7u16, 0xA125u16, 0x1944u16,
275 0x93ADu16, 0x2BCCu16, 0xF34Eu16, 0x4B2Fu16, 0x526Bu16, 0xEA0Au16, 0x3288u16, 0x8AE9u16,
276 0x377Bu16, 0x8F1Au16, 0x5798u16, 0xEFF9u16, 0xF6BDu16, 0x4EDCu16, 0x965Eu16, 0x2E3Fu16,
277 0xA4D6u16, 0x1CB7u16, 0xC435u16, 0x7C54u16, 0x6510u16, 0xDD71u16, 0x05F3u16, 0xBD92u16,
278 0x6EF6u16, 0xD697u16, 0x0E15u16, 0xB674u16, 0xAF30u16, 0x1751u16, 0xCFD3u16, 0x77B2u16,
279 0xFD5Bu16, 0x453Au16, 0x9DB8u16, 0x25D9u16, 0x3C9Du16, 0x84FCu16, 0x5C7Eu16, 0xE41Fu16,
280 0x598Du16, 0xE1ECu16, 0x396Eu16, 0x810Fu16, 0x984Bu16, 0x202Au16, 0xF8A8u16, 0x40C9u16,
281 0xCA20u16, 0x7241u16, 0xAAC3u16, 0x12A2u16, 0x0BE6u16, 0xB387u16, 0x6B05u16, 0xD364u16,
282 0xDDECu16, 0x658Du16, 0xBD0Fu16, 0x056Eu16, 0x1C2Au16, 0xA44Bu16, 0x7CC9u16, 0xC4A8u16,
283 0x4E41u16, 0xF620u16, 0x2EA2u16, 0x96C3u16, 0x8F87u16, 0x37E6u16, 0xEF64u16, 0x5705u16,
284 0xEA97u16, 0x52F6u16, 0x8A74u16, 0x3215u16, 0x2B51u16, 0x9330u16, 0x4BB2u16, 0xF3D3u16,
285 0x793Au16, 0xC15Bu16, 0x19D9u16, 0xA1B8u16, 0xB8FCu16, 0x009Du16, 0xD81Fu16, 0x607Eu16,
286 0xB31Au16, 0x0B7Bu16, 0xD3F9u16, 0x6B98u16, 0x72DCu16, 0xCABDu16, 0x123Fu16, 0xAA5Eu16,
287 0x20B7u16, 0x98D6u16, 0x4054u16, 0xF835u16, 0xE171u16, 0x5910u16, 0x8192u16, 0x39F3u16,
288 0x8461u16, 0x3C00u16, 0xE482u16, 0x5CE3u16, 0x45A7u16, 0xFDC6u16, 0x2544u16, 0x9D25u16,
289 0x17CCu16, 0xAFADu16, 0x772Fu16, 0xCF4Eu16, 0xD60Au16, 0x6E6Bu16, 0xB6E9u16, 0x0E88u16,
290 0xABF9u16, 0x1398u16, 0xCB1Au16, 0x737Bu16, 0x6A3Fu16, 0xD25Eu16, 0x0ADCu16, 0xB2BDu16,
291 0x3854u16, 0x8035u16, 0x58B7u16, 0xE0D6u16, 0xF992u16, 0x41F3u16, 0x9971u16, 0x2110u16,
292 0x9C82u16, 0x24E3u16, 0xFC61u16, 0x4400u16, 0x5D44u16, 0xE525u16, 0x3DA7u16, 0x85C6u16,
293 0x0F2Fu16, 0xB74Eu16, 0x6FCCu16, 0xD7ADu16, 0xCEE9u16, 0x7688u16, 0xAE0Au16, 0x166Bu16,
294 0xC50Fu16, 0x7D6Eu16, 0xA5ECu16, 0x1D8Du16, 0x04C9u16, 0xBCA8u16, 0x642Au16, 0xDC4Bu16,
295 0x56A2u16, 0xEEC3u16, 0x3641u16, 0x8E20u16, 0x9764u16, 0x2F05u16, 0xF787u16, 0x4FE6u16,
296 0xF274u16, 0x4A15u16, 0x9297u16, 0x2AF6u16, 0x33B2u16, 0x8BD3u16, 0x5351u16, 0xEB30u16,
297 0x61D9u16, 0xD9B8u16, 0x013Au16, 0xB95Bu16, 0xA01Fu16, 0x187Eu16, 0xC0FCu16, 0x789Du16,
298 0x7615u16, 0xCE74u16, 0x16F6u16, 0xAE97u16, 0xB7D3u16, 0x0FB2u16, 0xD730u16, 0x6F51u16,
299 0xE5B8u16, 0x5DD9u16, 0x855Bu16, 0x3D3Au16, 0x247Eu16, 0x9C1Fu16, 0x449Du16, 0xFCFCu16,
300 0x416Eu16, 0xF90Fu16, 0x218Du16, 0x99ECu16, 0x80A8u16, 0x38C9u16, 0xE04Bu16, 0x582Au16,
301 0xD2C3u16, 0x6AA2u16, 0xB220u16, 0x0A41u16, 0x1305u16, 0xAB64u16, 0x73E6u16, 0xCB87u16,
302 0x18E3u16, 0xA082u16, 0x7800u16, 0xC061u16, 0xD925u16, 0x6144u16, 0xB9C6u16, 0x01A7u16,
303 0x8B4Eu16, 0x332Fu16, 0xEBADu16, 0x53CCu16, 0x4A88u16, 0xF2E9u16, 0x2A6Bu16, 0x920Au16,
304 0x2F98u16, 0x97F9u16, 0x4F7Bu16, 0xF71Au16, 0xEE5Eu16, 0x563Fu16, 0x8EBDu16, 0x36DCu16,
305 0xBC35u16, 0x0454u16, 0xDCD6u16, 0x64B7u16, 0x7DF3u16, 0xC592u16, 0x1D10u16, 0xA571u16
306 ],
307 [
308 0x0000u16, 0x47D3u16, 0x8FA6u16, 0xC875u16, 0x0F6Du16, 0x48BEu16, 0x80CBu16, 0xC718u16,
309 0x1EDAu16, 0x5909u16, 0x917Cu16, 0xD6AFu16, 0x11B7u16, 0x5664u16, 0x9E11u16, 0xD9C2u16,
310 0x3DB4u16, 0x7A67u16, 0xB212u16, 0xF5C1u16, 0x32D9u16, 0x750Au16, 0xBD7Fu16, 0xFAACu16,
311 0x236Eu16, 0x64BDu16, 0xACC8u16, 0xEB1Bu16, 0x2C03u16, 0x6BD0u16, 0xA3A5u16, 0xE476u16,
312 0x7B68u16, 0x3CBBu16, 0xF4CEu16, 0xB31Du16, 0x7405u16, 0x33D6u16, 0xFBA3u16, 0xBC70u16,
313 0x65B2u16, 0x2261u16, 0xEA14u16, 0xADC7u16, 0x6ADFu16, 0x2D0Cu16, 0xE579u16, 0xA2AAu16,
314 0x46DCu16, 0x010Fu16, 0xC97Au16, 0x8EA9u16, 0x49B1u16, 0x0E62u16, 0xC617u16, 0x81C4u16,
315 0x5806u16, 0x1FD5u16, 0xD7A0u16, 0x9073u16, 0x576Bu16, 0x10B8u16, 0xD8CDu16, 0x9F1Eu16,
316 0xF6D0u16, 0xB103u16, 0x7976u16, 0x3EA5u16, 0xF9BDu16, 0xBE6Eu16, 0x761Bu16, 0x31C8u16,
317 0xE80Au16, 0xAFD9u16, 0x67ACu16, 0x207Fu16, 0xE767u16, 0xA0B4u16, 0x68C1u16, 0x2F12u16,
318 0xCB64u16, 0x8CB7u16, 0x44C2u16, 0x0311u16, 0xC409u16, 0x83DAu16, 0x4BAFu16, 0x0C7Cu16,
319 0xD5BEu16, 0x926Du16, 0x5A18u16, 0x1DCBu16, 0xDAD3u16, 0x9D00u16, 0x5575u16, 0x12A6u16,
320 0x8DB8u16, 0xCA6Bu16, 0x021Eu16, 0x45CDu16, 0x82D5u16, 0xC506u16, 0x0D73u16, 0x4AA0u16,
321 0x9362u16, 0xD4B1u16, 0x1CC4u16, 0x5B17u16, 0x9C0Fu16, 0xDBDCu16, 0x13A9u16, 0x547Au16,
322 0xB00Cu16, 0xF7DFu16, 0x3FAAu16, 0x7879u16, 0xBF61u16, 0xF8B2u16, 0x30C7u16, 0x7714u16,
323 0xAED6u16, 0xE905u16, 0x2170u16, 0x66A3u16, 0xA1BBu16, 0xE668u16, 0x2E1Du16, 0x69CEu16,
324 0xFD81u16, 0xBA52u16, 0x7227u16, 0x35F4u16, 0xF2ECu16, 0xB53Fu16, 0x7D4Au16, 0x3A99u16,
325 0xE35Bu16, 0xA488u16, 0x6CFDu16, 0x2B2Eu16, 0xEC36u16, 0xABE5u16, 0x6390u16, 0x2443u16,
326 0xC035u16, 0x87E6u16, 0x4F93u16, 0x0840u16, 0xCF58u16, 0x888Bu16, 0x40FEu16, 0x072Du16,
327 0xDEEFu16, 0x993Cu16, 0x5149u16, 0x169Au16, 0xD182u16, 0x9651u16, 0x5E24u16, 0x19F7u16,
328 0x86E9u16, 0xC13Au16, 0x094Fu16, 0x4E9Cu16, 0x8984u16, 0xCE57u16, 0x0622u16, 0x41F1u16,
329 0x9833u16, 0xDFE0u16, 0x1795u16, 0x5046u16, 0x975Eu16, 0xD08Du16, 0x18F8u16, 0x5F2Bu16,
330 0xBB5Du16, 0xFC8Eu16, 0x34FBu16, 0x7328u16, 0xB430u16, 0xF3E3u16, 0x3B96u16, 0x7C45u16,
331 0xA587u16, 0xE254u16, 0x2A21u16, 0x6DF2u16, 0xAAEAu16, 0xED39u16, 0x254Cu16, 0x629Fu16,
332 0x0B51u16, 0x4C82u16, 0x84F7u16, 0xC324u16, 0x043Cu16, 0x43EFu16, 0x8B9Au16, 0xCC49u16,
333 0x158Bu16, 0x5258u16, 0x9A2Du16, 0xDDFEu16, 0x1AE6u16, 0x5D35u16, 0x9540u16, 0xD293u16,
334 0x36E5u16, 0x7136u16, 0xB943u16, 0xFE90u16, 0x3988u16, 0x7E5Bu16, 0xB62Eu16, 0xF1FDu16,
335 0x283Fu16, 0x6FECu16, 0xA799u16, 0xE04Au16, 0x2752u16, 0x6081u16, 0xA8F4u16, 0xEF27u16,
336 0x7039u16, 0x37EAu16, 0xFF9Fu16, 0xB84Cu16, 0x7F54u16, 0x3887u16, 0xF0F2u16, 0xB721u16,
337 0x6EE3u16, 0x2930u16, 0xE145u16, 0xA696u16, 0x618Eu16, 0x265Du16, 0xEE28u16, 0xA9FBu16,
338 0x4D8Du16, 0x0A5Eu16, 0xC22Bu16, 0x85F8u16, 0x42E0u16, 0x0533u16, 0xCD46u16, 0x8A95u16,
339 0x5357u16, 0x1484u16, 0xDCF1u16, 0x9B22u16, 0x5C3Au16, 0x1BE9u16, 0xD39Cu16, 0x944Fu16
340 ],
341 [
342 0x0000u16, 0xEB23u16, 0xC667u16, 0x2D44u16, 0x9CEFu16, 0x77CCu16, 0x5A88u16, 0xB1ABu16,
343 0x29FFu16, 0xC2DCu16, 0xEF98u16, 0x04BBu16, 0xB510u16, 0x5E33u16, 0x7377u16, 0x9854u16,
344 0x53FEu16, 0xB8DDu16, 0x9599u16, 0x7EBAu16, 0xCF11u16, 0x2432u16, 0x0976u16, 0xE255u16,
345 0x7A01u16, 0x9122u16, 0xBC66u16, 0x5745u16, 0xE6EEu16, 0x0DCDu16, 0x2089u16, 0xCBAAu16,
346 0xA7FCu16, 0x4CDFu16, 0x619Bu16, 0x8AB8u16, 0x3B13u16, 0xD030u16, 0xFD74u16, 0x1657u16,
347 0x8E03u16, 0x6520u16, 0x4864u16, 0xA347u16, 0x12ECu16, 0xF9CFu16, 0xD48Bu16, 0x3FA8u16,
348 0xF402u16, 0x1F21u16, 0x3265u16, 0xD946u16, 0x68EDu16, 0x83CEu16, 0xAE8Au16, 0x45A9u16,
349 0xDDFDu16, 0x36DEu16, 0x1B9Au16, 0xF0B9u16, 0x4112u16, 0xAA31u16, 0x8775u16, 0x6C56u16,
350 0x5FD9u16, 0xB4FAu16, 0x99BEu16, 0x729Du16, 0xC336u16, 0x2815u16, 0x0551u16, 0xEE72u16,
351 0x7626u16, 0x9D05u16, 0xB041u16, 0x5B62u16, 0xEAC9u16, 0x01EAu16, 0x2CAEu16, 0xC78Du16,
352 0x0C27u16, 0xE704u16, 0xCA40u16, 0x2163u16, 0x90C8u16, 0x7BEBu16, 0x56AFu16, 0xBD8Cu16,
353 0x25D8u16, 0xCEFBu16, 0xE3BFu16, 0x089Cu16, 0xB937u16, 0x5214u16, 0x7F50u16, 0x9473u16,
354 0xF825u16, 0x1306u16, 0x3E42u16, 0xD561u16, 0x64CAu16, 0x8FE9u16, 0xA2ADu16, 0x498Eu16,
355 0xD1DAu16, 0x3AF9u16, 0x17BDu16, 0xFC9Eu16, 0x4D35u16, 0xA616u16, 0x8B52u16, 0x6071u16,
356 0xABDBu16, 0x40F8u16, 0x6DBCu16, 0x869Fu16, 0x3734u16, 0xDC17u16, 0xF153u16, 0x1A70u16,
357 0x8224u16, 0x6907u16, 0x4443u16, 0xAF60u16, 0x1ECBu16, 0xF5E8u16, 0xD8ACu16, 0x338Fu16,
358 0xBFB2u16, 0x5491u16, 0x79D5u16, 0x92F6u16, 0x235Du16, 0xC87Eu16, 0xE53Au16, 0x0E19u16,
359 0x964Du16, 0x7D6Eu16, 0x502Au16, 0xBB09u16, 0x0AA2u16, 0xE181u16, 0xCCC5u16, 0x27E6u16,
360 0xEC4Cu16, 0x076Fu16, 0x2A2Bu16, 0xC108u16, 0x70A3u16, 0x9B80u16, 0xB6C4u16, 0x5DE7u16,
361 0xC5B3u16, 0x2E90u16, 0x03D4u16, 0xE8F7u16, 0x595Cu16, 0xB27Fu16, 0x9F3Bu16, 0x7418u16,
362 0x184Eu16, 0xF36Du16, 0xDE29u16, 0x350Au16, 0x84A1u16, 0x6F82u16, 0x42C6u16, 0xA9E5u16,
363 0x31B1u16, 0xDA92u16, 0xF7D6u16, 0x1CF5u16, 0xAD5Eu16, 0x467Du16, 0x6B39u16, 0x801Au16,
364 0x4BB0u16, 0xA093u16, 0x8DD7u16, 0x66F4u16, 0xD75Fu16, 0x3C7Cu16, 0x1138u16, 0xFA1Bu16,
365 0x624Fu16, 0x896Cu16, 0xA428u16, 0x4F0Bu16, 0xFEA0u16, 0x1583u16, 0x38C7u16, 0xD3E4u16,
366 0xE06Bu16, 0x0B48u16, 0x260Cu16, 0xCD2Fu16, 0x7C84u16, 0x97A7u16, 0xBAE3u16, 0x51C0u16,
367 0xC994u16, 0x22B7u16, 0x0FF3u16, 0xE4D0u16, 0x557Bu16, 0xBE58u16, 0x931Cu16, 0x783Fu16,
368 0xB395u16, 0x58B6u16, 0x75F2u16, 0x9ED1u16, 0x2F7Au16, 0xC459u16, 0xE91Du16, 0x023Eu16,
369 0x9A6Au16, 0x7149u16, 0x5C0Du16, 0xB72Eu16, 0x0685u16, 0xEDA6u16, 0xC0E2u16, 0x2BC1u16,
370 0x4797u16, 0xACB4u16, 0x81F0u16, 0x6AD3u16, 0xDB78u16, 0x305Bu16, 0x1D1Fu16, 0xF63Cu16,
371 0x6E68u16, 0x854Bu16, 0xA80Fu16, 0x432Cu16, 0xF287u16, 0x19A4u16, 0x34E0u16, 0xDFC3u16,
372 0x1469u16, 0xFF4Au16, 0xD20Eu16, 0x392Du16, 0x8886u16, 0x63A5u16, 0x4EE1u16, 0xA5C2u16,
373 0x3D96u16, 0xD6B5u16, 0xFBF1u16, 0x10D2u16, 0xA179u16, 0x4A5Au16, 0x671Eu16, 0x8C3Du16
374 ],
375 [
376 0x0000u16, 0x6F45u16, 0xDE8Au16, 0xB1CFu16, 0xAD35u16, 0xC270u16, 0x73BFu16, 0x1CFAu16,
377 0x4A4Bu16, 0x250Eu16, 0x94C1u16, 0xFB84u16, 0xE77Eu16, 0x883Bu16, 0x39F4u16, 0x56B1u16,
378 0x9496u16, 0xFBD3u16, 0x4A1Cu16, 0x2559u16, 0x39A3u16, 0x56E6u16, 0xE729u16, 0x886Cu16,
379 0xDEDDu16, 0xB198u16, 0x0057u16, 0x6F12u16, 0x73E8u16, 0x1CADu16, 0xAD62u16, 0xC227u16,
380 0x390Du16, 0x5648u16, 0xE787u16, 0x88C2u16, 0x9438u16, 0xFB7Du16, 0x4AB2u16, 0x25F7u16,
381 0x7346u16, 0x1C03u16, 0xADCCu16, 0xC289u16, 0xDE73u16, 0xB136u16, 0x00F9u16, 0x6FBCu16,
382 0xAD9Bu16, 0xC2DEu16, 0x7311u16, 0x1C54u16, 0x00AEu16, 0x6FEBu16, 0xDE24u16, 0xB161u16,
383 0xE7D0u16, 0x8895u16, 0x395Au16, 0x561Fu16, 0x4AE5u16, 0x25A0u16, 0x946Fu16, 0xFB2Au16,
384 0x721Au16, 0x1D5Fu16, 0xAC90u16, 0xC3D5u16, 0xDF2Fu16, 0xB06Au16, 0x01A5u16, 0x6EE0u16,
385 0x3851u16, 0x5714u16, 0xE6DBu16, 0x899Eu16, 0x9564u16, 0xFA21u16, 0x4BEEu16, 0x24ABu16,
386 0xE68Cu16, 0x89C9u16, 0x3806u16, 0x5743u16, 0x4BB9u16, 0x24FCu16, 0x9533u16, 0xFA76u16,
387 0xACC7u16, 0xC382u16, 0x724Du16, 0x1D08u16, 0x01F2u16, 0x6EB7u16, 0xDF78u16, 0xB03Du16,
388 0x4B17u16, 0x2452u16, 0x959Du16, 0xFAD8u16, 0xE622u16, 0x8967u16, 0x38A8u16, 0x57EDu16,
389 0x015Cu16, 0x6E19u16, 0xDFD6u16, 0xB093u16, 0xAC69u16, 0xC32Cu16, 0x72E3u16, 0x1DA6u16,
390 0xDF81u16, 0xB0C4u16, 0x010Bu16, 0x6E4Eu16, 0x72B4u16, 0x1DF1u16, 0xAC3Eu16, 0xC37Bu16,
391 0x95CAu16, 0xFA8Fu16, 0x4B40u16, 0x2405u16, 0x38FFu16, 0x57BAu16, 0xE675u16, 0x8930u16,
392 0xE434u16, 0x8B71u16, 0x3ABEu16, 0x55FBu16, 0x4901u16, 0x2644u16, 0x978Bu16, 0xF8CEu16,
393 0xAE7Fu16, 0xC13Au16, 0x70F5u16, 0x1FB0u16, 0x034Au16, 0x6C0Fu16, 0xDDC0u16, 0xB285u16,
394 0x70A2u16, 0x1FE7u16, 0xAE28u16, 0xC16Du16, 0xDD97u16, 0xB2D2u16, 0x031Du16, 0x6C58u16,
395 0x3AE9u16, 0x55ACu16, 0xE463u16, 0x8B26u16, 0x97DCu16, 0xF899u16, 0x4956u16, 0x2613u16,
396 0xDD39u16, 0xB27Cu16, 0x03B3u16, 0x6CF6u16, 0x700Cu16, 0x1F49u16, 0xAE86u16, 0xC1C3u16,
397 0x9772u16, 0xF837u16, 0x49F8u16, 0x26BDu16, 0x3A47u16, 0x5502u16, 0xE4CDu16, 0x8B88u16,
398 0x49AFu16, 0x26EAu16, 0x9725u16, 0xF860u16, 0xE49Au16, 0x8BDFu16, 0x3A10u16, 0x5555u16,
399 0x03E4u16, 0x6CA1u16, 0xDD6Eu16, 0xB22Bu16, 0xAED1u16, 0xC194u16, 0x705Bu16, 0x1F1Eu16,
400 0x962Eu16, 0xF96Bu16, 0x48A4u16, 0x27E1u16, 0x3B1Bu16, 0x545Eu16, 0xE591u16, 0x8AD4u16,
401 0xDC65u16, 0xB320u16, 0x02EFu16, 0x6DAAu16, 0x7150u16, 0x1E15u16, 0xAFDAu16, 0xC09Fu16,
402 0x02B8u16, 0x6DFDu16, 0xDC32u16, 0xB377u16, 0xAF8Du16, 0xC0C8u16, 0x7107u16, 0x1E42u16,
403 0x48F3u16, 0x27B6u16, 0x9679u16, 0xF93Cu16, 0xE5C6u16, 0x8A83u16, 0x3B4Cu16, 0x5409u16,
404 0xAF23u16, 0xC066u16, 0x71A9u16, 0x1EECu16, 0x0216u16, 0x6D53u16, 0xDC9Cu16, 0xB3D9u16,
405 0xE568u16, 0x8A2Du16, 0x3BE2u16, 0x54A7u16, 0x485Du16, 0x2718u16, 0x96D7u16, 0xF992u16,
406 0x3BB5u16, 0x54F0u16, 0xE53Fu16, 0x8A7Au16, 0x9680u16, 0xF9C5u16, 0x480Au16, 0x274Fu16,
407 0x71FEu16, 0x1EBBu16, 0xAF74u16, 0xC031u16, 0xDCCBu16, 0xB38Eu16, 0x0241u16, 0x6D04u16
408 ],
409 [
410 0x0000u16, 0xD849u16, 0xA0B3u16, 0x78FAu16, 0x5147u16, 0x890Eu16, 0xF1F4u16, 0x29BDu16,
411 0xA28Eu16, 0x7AC7u16, 0x023Du16, 0xDA74u16, 0xF3C9u16, 0x2B80u16, 0x537Au16, 0x8B33u16,
412 0x553Du16, 0x8D74u16, 0xF58Eu16, 0x2DC7u16, 0x047Au16, 0xDC33u16, 0xA4C9u16, 0x7C80u16,
413 0xF7B3u16, 0x2FFAu16, 0x5700u16, 0x8F49u16, 0xA6F4u16, 0x7EBDu16, 0x0647u16, 0xDE0Eu16,
414 0xAA7Au16, 0x7233u16, 0x0AC9u16, 0xD280u16, 0xFB3Du16, 0x2374u16, 0x5B8Eu16, 0x83C7u16,
415 0x08F4u16, 0xD0BDu16, 0xA847u16, 0x700Eu16, 0x59B3u16, 0x81FAu16, 0xF900u16, 0x2149u16,
416 0xFF47u16, 0x270Eu16, 0x5FF4u16, 0x87BDu16, 0xAE00u16, 0x7649u16, 0x0EB3u16, 0xD6FAu16,
417 0x5DC9u16, 0x8580u16, 0xFD7Au16, 0x2533u16, 0x0C8Eu16, 0xD4C7u16, 0xAC3Du16, 0x7474u16,
418 0x44D5u16, 0x9C9Cu16, 0xE466u16, 0x3C2Fu16, 0x1592u16, 0xCDDBu16, 0xB521u16, 0x6D68u16,
419 0xE65Bu16, 0x3E12u16, 0x46E8u16, 0x9EA1u16, 0xB71Cu16, 0x6F55u16, 0x17AFu16, 0xCFE6u16,
420 0x11E8u16, 0xC9A1u16, 0xB15Bu16, 0x6912u16, 0x40AFu16, 0x98E6u16, 0xE01Cu16, 0x3855u16,
421 0xB366u16, 0x6B2Fu16, 0x13D5u16, 0xCB9Cu16, 0xE221u16, 0x3A68u16, 0x4292u16, 0x9ADBu16,
422 0xEEAFu16, 0x36E6u16, 0x4E1Cu16, 0x9655u16, 0xBFE8u16, 0x67A1u16, 0x1F5Bu16, 0xC712u16,
423 0x4C21u16, 0x9468u16, 0xEC92u16, 0x34DBu16, 0x1D66u16, 0xC52Fu16, 0xBDD5u16, 0x659Cu16,
424 0xBB92u16, 0x63DBu16, 0x1B21u16, 0xC368u16, 0xEAD5u16, 0x329Cu16, 0x4A66u16, 0x922Fu16,
425 0x191Cu16, 0xC155u16, 0xB9AFu16, 0x61E6u16, 0x485Bu16, 0x9012u16, 0xE8E8u16, 0x30A1u16,
426 0x89AAu16, 0x51E3u16, 0x2919u16, 0xF150u16, 0xD8EDu16, 0x00A4u16, 0x785Eu16, 0xA017u16,
427 0x2B24u16, 0xF36Du16, 0x8B97u16, 0x53DEu16, 0x7A63u16, 0xA22Au16, 0xDAD0u16, 0x0299u16,
428 0xDC97u16, 0x04DEu16, 0x7C24u16, 0xA46Du16, 0x8DD0u16, 0x5599u16, 0x2D63u16, 0xF52Au16,
429 0x7E19u16, 0xA650u16, 0xDEAAu16, 0x06E3u16, 0x2F5Eu16, 0xF717u16, 0x8FEDu16, 0x57A4u16,
430 0x23D0u16, 0xFB99u16, 0x8363u16, 0x5B2Au16, 0x7297u16, 0xAADEu16, 0xD224u16, 0x0A6Du16,
431 0x815Eu16, 0x5917u16, 0x21EDu16, 0xF9A4u16, 0xD019u16, 0x0850u16, 0x70AAu16, 0xA8E3u16,
432 0x76EDu16, 0xAEA4u16, 0xD65Eu16, 0x0E17u16, 0x27AAu16, 0xFFE3u16, 0x8719u16, 0x5F50u16,
433 0xD463u16, 0x0C2Au16, 0x74D0u16, 0xAC99u16, 0x8524u16, 0x5D6Du16, 0x2597u16, 0xFDDEu16,
434 0xCD7Fu16, 0x1536u16, 0x6DCCu16, 0xB585u16, 0x9C38u16, 0x4471u16, 0x3C8Bu16, 0xE4C2u16,
435 0x6FF1u16, 0xB7B8u16, 0xCF42u16, 0x170Bu16, 0x3EB6u16, 0xE6FFu16, 0x9E05u16, 0x464Cu16,
436 0x9842u16, 0x400Bu16, 0x38F1u16, 0xE0B8u16, 0xC905u16, 0x114Cu16, 0x69B6u16, 0xB1FFu16,
437 0x3ACCu16, 0xE285u16, 0x9A7Fu16, 0x4236u16, 0x6B8Bu16, 0xB3C2u16, 0xCB38u16, 0x1371u16,
438 0x6705u16, 0xBF4Cu16, 0xC7B6u16, 0x1FFFu16, 0x3642u16, 0xEE0Bu16, 0x96F1u16, 0x4EB8u16,
439 0xC58Bu16, 0x1DC2u16, 0x6538u16, 0xBD71u16, 0x94CCu16, 0x4C85u16, 0x347Fu16, 0xEC36u16,
440 0x3238u16, 0xEA71u16, 0x928Bu16, 0x4AC2u16, 0x637Fu16, 0xBB36u16, 0xC3CCu16, 0x1B85u16,
441 0x90B6u16, 0x48FFu16, 0x3005u16, 0xE84Cu16, 0xC1F1u16, 0x19B8u16, 0x6142u16, 0xB90Bu16
442 ],
443 [
444 0x0000u16, 0x0375u16, 0x06EAu16, 0x059Fu16, 0x0DD4u16, 0x0EA1u16, 0x0B3Eu16, 0x084Bu16,
445 0x1BA8u16, 0x18DDu16, 0x1D42u16, 0x1E37u16, 0x167Cu16, 0x1509u16, 0x1096u16, 0x13E3u16,
446 0x3750u16, 0x3425u16, 0x31BAu16, 0x32CFu16, 0x3A84u16, 0x39F1u16, 0x3C6Eu16, 0x3F1Bu16,
447 0x2CF8u16, 0x2F8Du16, 0x2A12u16, 0x2967u16, 0x212Cu16, 0x2259u16, 0x27C6u16, 0x24B3u16,
448 0x6EA0u16, 0x6DD5u16, 0x684Au16, 0x6B3Fu16, 0x6374u16, 0x6001u16, 0x659Eu16, 0x66EBu16,
449 0x7508u16, 0x767Du16, 0x73E2u16, 0x7097u16, 0x78DCu16, 0x7BA9u16, 0x7E36u16, 0x7D43u16,
450 0x59F0u16, 0x5A85u16, 0x5F1Au16, 0x5C6Fu16, 0x5424u16, 0x5751u16, 0x52CEu16, 0x51BBu16,
451 0x4258u16, 0x412Du16, 0x44B2u16, 0x47C7u16, 0x4F8Cu16, 0x4CF9u16, 0x4966u16, 0x4A13u16,
452 0xDD40u16, 0xDE35u16, 0xDBAAu16, 0xD8DFu16, 0xD094u16, 0xD3E1u16, 0xD67Eu16, 0xD50Bu16,
453 0xC6E8u16, 0xC59Du16, 0xC002u16, 0xC377u16, 0xCB3Cu16, 0xC849u16, 0xCDD6u16, 0xCEA3u16,
454 0xEA10u16, 0xE965u16, 0xECFAu16, 0xEF8Fu16, 0xE7C4u16, 0xE4B1u16, 0xE12Eu16, 0xE25Bu16,
455 0xF1B8u16, 0xF2CDu16, 0xF752u16, 0xF427u16, 0xFC6Cu16, 0xFF19u16, 0xFA86u16, 0xF9F3u16,
456 0xB3E0u16, 0xB095u16, 0xB50Au16, 0xB67Fu16, 0xBE34u16, 0xBD41u16, 0xB8DEu16, 0xBBABu16,
457 0xA848u16, 0xAB3Du16, 0xAEA2u16, 0xADD7u16, 0xA59Cu16, 0xA6E9u16, 0xA376u16, 0xA003u16,
458 0x84B0u16, 0x87C5u16, 0x825Au16, 0x812Fu16, 0x8964u16, 0x8A11u16, 0x8F8Eu16, 0x8CFBu16,
459 0x9F18u16, 0x9C6Du16, 0x99F2u16, 0x9A87u16, 0x92CCu16, 0x91B9u16, 0x9426u16, 0x9753u16,
460 0xAAA1u16, 0xA9D4u16, 0xAC4Bu16, 0xAF3Eu16, 0xA775u16, 0xA400u16, 0xA19Fu16, 0xA2EAu16,
461 0xB109u16, 0xB27Cu16, 0xB7E3u16, 0xB496u16, 0xBCDDu16, 0xBFA8u16, 0xBA37u16, 0xB942u16,
462 0x9DF1u16, 0x9E84u16, 0x9B1Bu16, 0x986Eu16, 0x9025u16, 0x9350u16, 0x96CFu16, 0x95BAu16,
463 0x8659u16, 0x852Cu16, 0x80B3u16, 0x83C6u16, 0x8B8Du16, 0x88F8u16, 0x8D67u16, 0x8E12u16,
464 0xC401u16, 0xC774u16, 0xC2EBu16, 0xC19Eu16, 0xC9D5u16, 0xCAA0u16, 0xCF3Fu16, 0xCC4Au16,
465 0xDFA9u16, 0xDCDCu16, 0xD943u16, 0xDA36u16, 0xD27Du16, 0xD108u16, 0xD497u16, 0xD7E2u16,
466 0xF351u16, 0xF024u16, 0xF5BBu16, 0xF6CEu16, 0xFE85u16, 0xFDF0u16, 0xF86Fu16, 0xFB1Au16,
467 0xE8F9u16, 0xEB8Cu16, 0xEE13u16, 0xED66u16, 0xE52Du16, 0xE658u16, 0xE3C7u16, 0xE0B2u16,
468 0x77E1u16, 0x7494u16, 0x710Bu16, 0x727Eu16, 0x7A35u16, 0x7940u16, 0x7CDFu16, 0x7FAAu16,
469 0x6C49u16, 0x6F3Cu16, 0x6AA3u16, 0x69D6u16, 0x619Du16, 0x62E8u16, 0x6777u16, 0x6402u16,
470 0x40B1u16, 0x43C4u16, 0x465Bu16, 0x452Eu16, 0x4D65u16, 0x4E10u16, 0x4B8Fu16, 0x48FAu16,
471 0x5B19u16, 0x586Cu16, 0x5DF3u16, 0x5E86u16, 0x56CDu16, 0x55B8u16, 0x5027u16, 0x5352u16,
472 0x1941u16, 0x1A34u16, 0x1FABu16, 0x1CDEu16, 0x1495u16, 0x17E0u16, 0x127Fu16, 0x110Au16,
473 0x02E9u16, 0x019Cu16, 0x0403u16, 0x0776u16, 0x0F3Du16, 0x0C48u16, 0x09D7u16, 0x0AA2u16,
474 0x2E11u16, 0x2D64u16, 0x28FBu16, 0x2B8Eu16, 0x23C5u16, 0x20B0u16, 0x252Fu16, 0x265Au16,
475 0x35B9u16, 0x36CCu16, 0x3353u16, 0x3026u16, 0x386Du16, 0x3B18u16, 0x3E87u16, 0x3DF2u16
476 ],
477 [
478 0x0000u16, 0x4563u16, 0x8AC6u16, 0xCFA5u16, 0x05ADu16, 0x40CEu16, 0x8F6Bu16, 0xCA08u16,
479 0x0B5Au16, 0x4E39u16, 0x819Cu16, 0xC4FFu16, 0x0EF7u16, 0x4B94u16, 0x8431u16, 0xC152u16,
480 0x16B4u16, 0x53D7u16, 0x9C72u16, 0xD911u16, 0x1319u16, 0x567Au16, 0x99DFu16, 0xDCBCu16,
481 0x1DEEu16, 0x588Du16, 0x9728u16, 0xD24Bu16, 0x1843u16, 0x5D20u16, 0x9285u16, 0xD7E6u16,
482 0x2D68u16, 0x680Bu16, 0xA7AEu16, 0xE2CDu16, 0x28C5u16, 0x6DA6u16, 0xA203u16, 0xE760u16,
483 0x2632u16, 0x6351u16, 0xACF4u16, 0xE997u16, 0x239Fu16, 0x66FCu16, 0xA959u16, 0xEC3Au16,
484 0x3BDCu16, 0x7EBFu16, 0xB11Au16, 0xF479u16, 0x3E71u16, 0x7B12u16, 0xB4B7u16, 0xF1D4u16,
485 0x3086u16, 0x75E5u16, 0xBA40u16, 0xFF23u16, 0x352Bu16, 0x7048u16, 0xBFEDu16, 0xFA8Eu16,
486 0x5AD0u16, 0x1FB3u16, 0xD016u16, 0x9575u16, 0x5F7Du16, 0x1A1Eu16, 0xD5BBu16, 0x90D8u16,
487 0x518Au16, 0x14E9u16, 0xDB4Cu16, 0x9E2Fu16, 0x5427u16, 0x1144u16, 0xDEE1u16, 0x9B82u16,
488 0x4C64u16, 0x0907u16, 0xC6A2u16, 0x83C1u16, 0x49C9u16, 0x0CAAu16, 0xC30Fu16, 0x866Cu16,
489 0x473Eu16, 0x025Du16, 0xCDF8u16, 0x889Bu16, 0x4293u16, 0x07F0u16, 0xC855u16, 0x8D36u16,
490 0x77B8u16, 0x32DBu16, 0xFD7Eu16, 0xB81Du16, 0x7215u16, 0x3776u16, 0xF8D3u16, 0xBDB0u16,
491 0x7CE2u16, 0x3981u16, 0xF624u16, 0xB347u16, 0x794Fu16, 0x3C2Cu16, 0xF389u16, 0xB6EAu16,
492 0x610Cu16, 0x246Fu16, 0xEBCAu16, 0xAEA9u16, 0x64A1u16, 0x21C2u16, 0xEE67u16, 0xAB04u16,
493 0x6A56u16, 0x2F35u16, 0xE090u16, 0xA5F3u16, 0x6FFBu16, 0x2A98u16, 0xE53Du16, 0xA05Eu16,
494 0xB5A0u16, 0xF0C3u16, 0x3F66u16, 0x7A05u16, 0xB00Du16, 0xF56Eu16, 0x3ACBu16, 0x7FA8u16,
495 0xBEFAu16, 0xFB99u16, 0x343Cu16, 0x715Fu16, 0xBB57u16, 0xFE34u16, 0x3191u16, 0x74F2u16,
496 0xA314u16, 0xE677u16, 0x29D2u16, 0x6CB1u16, 0xA6B9u16, 0xE3DAu16, 0x2C7Fu16, 0x691Cu16,
497 0xA84Eu16, 0xED2Du16, 0x2288u16, 0x67EBu16, 0xADE3u16, 0xE880u16, 0x2725u16, 0x6246u16,
498 0x98C8u16, 0xDDABu16, 0x120Eu16, 0x576Du16, 0x9D65u16, 0xD806u16, 0x17A3u16, 0x52C0u16,
499 0x9392u16, 0xD6F1u16, 0x1954u16, 0x5C37u16, 0x963Fu16, 0xD35Cu16, 0x1CF9u16, 0x599Au16,
500 0x8E7Cu16, 0xCB1Fu16, 0x04BAu16, 0x41D9u16, 0x8BD1u16, 0xCEB2u16, 0x0117u16, 0x4474u16,
501 0x8526u16, 0xC045u16, 0x0FE0u16, 0x4A83u16, 0x808Bu16, 0xC5E8u16, 0x0A4Du16, 0x4F2Eu16,
502 0xEF70u16, 0xAA13u16, 0x65B6u16, 0x20D5u16, 0xEADDu16, 0xAFBEu16, 0x601Bu16, 0x2578u16,
503 0xE42Au16, 0xA149u16, 0x6EECu16, 0x2B8Fu16, 0xE187u16, 0xA4E4u16, 0x6B41u16, 0x2E22u16,
504 0xF9C4u16, 0xBCA7u16, 0x7302u16, 0x3661u16, 0xFC69u16, 0xB90Au16, 0x76AFu16, 0x33CCu16,
505 0xF29Eu16, 0xB7FDu16, 0x7858u16, 0x3D3Bu16, 0xF733u16, 0xB250u16, 0x7DF5u16, 0x3896u16,
506 0xC218u16, 0x877Bu16, 0x48DEu16, 0x0DBDu16, 0xC7B5u16, 0x82D6u16, 0x4D73u16, 0x0810u16,
507 0xC942u16, 0x8C21u16, 0x4384u16, 0x06E7u16, 0xCCEFu16, 0x898Cu16, 0x4629u16, 0x034Au16,
508 0xD4ACu16, 0x91CFu16, 0x5E6Au16, 0x1B09u16, 0xD101u16, 0x9462u16, 0x5BC7u16, 0x1EA4u16,
509 0xDFF6u16, 0x9A95u16, 0x5530u16, 0x1053u16, 0xDA5Bu16, 0x9F38u16, 0x509Du16, 0x15FEu16
510 ],
511 [
512 0x0000u16, 0x7B61u16, 0xF6C2u16, 0x8DA3u16, 0xFDA5u16, 0x86C4u16, 0x0B67u16, 0x7006u16,
513 0xEB6Bu16, 0x900Au16, 0x1DA9u16, 0x66C8u16, 0x16CEu16, 0x6DAFu16, 0xE00Cu16, 0x9B6Du16,
514 0xC6F7u16, 0xBD96u16, 0x3035u16, 0x4B54u16, 0x3B52u16, 0x4033u16, 0xCD90u16, 0xB6F1u16,
515 0x2D9Cu16, 0x56FDu16, 0xDB5Eu16, 0xA03Fu16, 0xD039u16, 0xAB58u16, 0x26FBu16, 0x5D9Au16,
516 0x9DCFu16, 0xE6AEu16, 0x6B0Du16, 0x106Cu16, 0x606Au16, 0x1B0Bu16, 0x96A8u16, 0xEDC9u16,
517 0x76A4u16, 0x0DC5u16, 0x8066u16, 0xFB07u16, 0x8B01u16, 0xF060u16, 0x7DC3u16, 0x06A2u16,
518 0x5B38u16, 0x2059u16, 0xADFAu16, 0xD69Bu16, 0xA69Du16, 0xDDFCu16, 0x505Fu16, 0x2B3Eu16,
519 0xB053u16, 0xCB32u16, 0x4691u16, 0x3DF0u16, 0x4DF6u16, 0x3697u16, 0xBB34u16, 0xC055u16,
520 0x2BBFu16, 0x50DEu16, 0xDD7Du16, 0xA61Cu16, 0xD61Au16, 0xAD7Bu16, 0x20D8u16, 0x5BB9u16,
521 0xC0D4u16, 0xBBB5u16, 0x3616u16, 0x4D77u16, 0x3D71u16, 0x4610u16, 0xCBB3u16, 0xB0D2u16,
522 0xED48u16, 0x9629u16, 0x1B8Au16, 0x60EBu16, 0x10EDu16, 0x6B8Cu16, 0xE62Fu16, 0x9D4Eu16,
523 0x0623u16, 0x7D42u16, 0xF0E1u16, 0x8B80u16, 0xFB86u16, 0x80E7u16, 0x0D44u16, 0x7625u16,
524 0xB670u16, 0xCD11u16, 0x40B2u16, 0x3BD3u16, 0x4BD5u16, 0x30B4u16, 0xBD17u16, 0xC676u16,
525 0x5D1Bu16, 0x267Au16, 0xABD9u16, 0xD0B8u16, 0xA0BEu16, 0xDBDFu16, 0x567Cu16, 0x2D1Du16,
526 0x7087u16, 0x0BE6u16, 0x8645u16, 0xFD24u16, 0x8D22u16, 0xF643u16, 0x7BE0u16, 0x0081u16,
527 0x9BECu16, 0xE08Du16, 0x6D2Eu16, 0x164Fu16, 0x6649u16, 0x1D28u16, 0x908Bu16, 0xEBEAu16,
528 0x577Eu16, 0x2C1Fu16, 0xA1BCu16, 0xDADDu16, 0xAADBu16, 0xD1BAu16, 0x5C19u16, 0x2778u16,
529 0xBC15u16, 0xC774u16, 0x4AD7u16, 0x31B6u16, 0x41B0u16, 0x3AD1u16, 0xB772u16, 0xCC13u16,
530 0x9189u16, 0xEAE8u16, 0x674Bu16, 0x1C2Au16, 0x6C2Cu16, 0x174Du16, 0x9AEEu16, 0xE18Fu16,
531 0x7AE2u16, 0x0183u16, 0x8C20u16, 0xF741u16, 0x8747u16, 0xFC26u16, 0x7185u16, 0x0AE4u16,
532 0xCAB1u16, 0xB1D0u16, 0x3C73u16, 0x4712u16, 0x3714u16, 0x4C75u16, 0xC1D6u16, 0xBAB7u16,
533 0x21DAu16, 0x5ABBu16, 0xD718u16, 0xAC79u16, 0xDC7Fu16, 0xA71Eu16, 0x2ABDu16, 0x51DCu16,
534 0x0C46u16, 0x7727u16, 0xFA84u16, 0x81E5u16, 0xF1E3u16, 0x8A82u16, 0x0721u16, 0x7C40u16,
535 0xE72Du16, 0x9C4Cu16, 0x11EFu16, 0x6A8Eu16, 0x1A88u16, 0x61E9u16, 0xEC4Au16, 0x972Bu16,
536 0x7CC1u16, 0x07A0u16, 0x8A03u16, 0xF162u16, 0x8164u16, 0xFA05u16, 0x77A6u16, 0x0CC7u16,
537 0x97AAu16, 0xECCBu16, 0x6168u16, 0x1A09u16, 0x6A0Fu16, 0x116Eu16, 0x9CCDu16, 0xE7ACu16,
538 0xBA36u16, 0xC157u16, 0x4CF4u16, 0x3795u16, 0x4793u16, 0x3CF2u16, 0xB151u16, 0xCA30u16,
539 0x515Du16, 0x2A3Cu16, 0xA79Fu16, 0xDCFEu16, 0xACF8u16, 0xD799u16, 0x5A3Au16, 0x215Bu16,
540 0xE10Eu16, 0x9A6Fu16, 0x17CCu16, 0x6CADu16, 0x1CABu16, 0x67CAu16, 0xEA69u16, 0x9108u16,
541 0x0A65u16, 0x7104u16, 0xFCA7u16, 0x87C6u16, 0xF7C0u16, 0x8CA1u16, 0x0102u16, 0x7A63u16,
542 0x27F9u16, 0x5C98u16, 0xD13Bu16, 0xAA5Au16, 0xDA5Cu16, 0xA13Du16, 0x2C9Eu16, 0x57FFu16,
543 0xCC92u16, 0xB7F3u16, 0x3A50u16, 0x4131u16, 0x3137u16, 0x4A56u16, 0xC7F5u16, 0xBC94u16
544 ],
545 [
546 0x0000u16, 0xAEFCu16, 0x4DD9u16, 0xE325u16, 0x9BB2u16, 0x354Eu16, 0xD66Bu16, 0x7897u16,
547 0x2745u16, 0x89B9u16, 0x6A9Cu16, 0xC460u16, 0xBCF7u16, 0x120Bu16, 0xF12Eu16, 0x5FD2u16,
548 0x4E8Au16, 0xE076u16, 0x0353u16, 0xADAFu16, 0xD538u16, 0x7BC4u16, 0x98E1u16, 0x361Du16,
549 0x69CFu16, 0xC733u16, 0x2416u16, 0x8AEAu16, 0xF27Du16, 0x5C81u16, 0xBFA4u16, 0x1158u16,
550 0x9D14u16, 0x33E8u16, 0xD0CDu16, 0x7E31u16, 0x06A6u16, 0xA85Au16, 0x4B7Fu16, 0xE583u16,
551 0xBA51u16, 0x14ADu16, 0xF788u16, 0x5974u16, 0x21E3u16, 0x8F1Fu16, 0x6C3Au16, 0xC2C6u16,
552 0xD39Eu16, 0x7D62u16, 0x9E47u16, 0x30BBu16, 0x482Cu16, 0xE6D0u16, 0x05F5u16, 0xAB09u16,
553 0xF4DBu16, 0x5A27u16, 0xB902u16, 0x17FEu16, 0x6F69u16, 0xC195u16, 0x22B0u16, 0x8C4Cu16,
554 0x2A09u16, 0x84F5u16, 0x67D0u16, 0xC92Cu16, 0xB1BBu16, 0x1F47u16, 0xFC62u16, 0x529Eu16,
555 0x0D4Cu16, 0xA3B0u16, 0x4095u16, 0xEE69u16, 0x96FEu16, 0x3802u16, 0xDB27u16, 0x75DBu16,
556 0x6483u16, 0xCA7Fu16, 0x295Au16, 0x87A6u16, 0xFF31u16, 0x51CDu16, 0xB2E8u16, 0x1C14u16,
557 0x43C6u16, 0xED3Au16, 0x0E1Fu16, 0xA0E3u16, 0xD874u16, 0x7688u16, 0x95ADu16, 0x3B51u16,
558 0xB71Du16, 0x19E1u16, 0xFAC4u16, 0x5438u16, 0x2CAFu16, 0x8253u16, 0x6176u16, 0xCF8Au16,
559 0x9058u16, 0x3EA4u16, 0xDD81u16, 0x737Du16, 0x0BEAu16, 0xA516u16, 0x4633u16, 0xE8CFu16,
560 0xF997u16, 0x576Bu16, 0xB44Eu16, 0x1AB2u16, 0x6225u16, 0xCCD9u16, 0x2FFCu16, 0x8100u16,
561 0xDED2u16, 0x702Eu16, 0x930Bu16, 0x3DF7u16, 0x4560u16, 0xEB9Cu16, 0x08B9u16, 0xA645u16,
562 0x5412u16, 0xFAEEu16, 0x19CBu16, 0xB737u16, 0xCFA0u16, 0x615Cu16, 0x8279u16, 0x2C85u16,
563 0x7357u16, 0xDDABu16, 0x3E8Eu16, 0x9072u16, 0xE8E5u16, 0x4619u16, 0xA53Cu16, 0x0BC0u16,
564 0x1A98u16, 0xB464u16, 0x5741u16, 0xF9BDu16, 0x812Au16, 0x2FD6u16, 0xCCF3u16, 0x620Fu16,
565 0x3DDDu16, 0x9321u16, 0x7004u16, 0xDEF8u16, 0xA66Fu16, 0x0893u16, 0xEBB6u16, 0x454Au16,
566 0xC906u16, 0x67FAu16, 0x84DFu16, 0x2A23u16, 0x52B4u16, 0xFC48u16, 0x1F6Du16, 0xB191u16,
567 0xEE43u16, 0x40BFu16, 0xA39Au16, 0x0D66u16, 0x75F1u16, 0xDB0Du16, 0x3828u16, 0x96D4u16,
568 0x878Cu16, 0x2970u16, 0xCA55u16, 0x64A9u16, 0x1C3Eu16, 0xB2C2u16, 0x51E7u16, 0xFF1Bu16,
569 0xA0C9u16, 0x0E35u16, 0xED10u16, 0x43ECu16, 0x3B7Bu16, 0x9587u16, 0x76A2u16, 0xD85Eu16,
570 0x7E1Bu16, 0xD0E7u16, 0x33C2u16, 0x9D3Eu16, 0xE5A9u16, 0x4B55u16, 0xA870u16, 0x068Cu16,
571 0x595Eu16, 0xF7A2u16, 0x1487u16, 0xBA7Bu16, 0xC2ECu16, 0x6C10u16, 0x8F35u16, 0x21C9u16,
572 0x3091u16, 0x9E6Du16, 0x7D48u16, 0xD3B4u16, 0xAB23u16, 0x05DFu16, 0xE6FAu16, 0x4806u16,
573 0x17D4u16, 0xB928u16, 0x5A0Du16, 0xF4F1u16, 0x8C66u16, 0x229Au16, 0xC1BFu16, 0x6F43u16,
574 0xE30Fu16, 0x4DF3u16, 0xAED6u16, 0x002Au16, 0x78BDu16, 0xD641u16, 0x3564u16, 0x9B98u16,
575 0xC44Au16, 0x6AB6u16, 0x8993u16, 0x276Fu16, 0x5FF8u16, 0xF104u16, 0x1221u16, 0xBCDDu16,
576 0xAD85u16, 0x0379u16, 0xE05Cu16, 0x4EA0u16, 0x3637u16, 0x98CBu16, 0x7BEEu16, 0xD512u16,
577 0x8AC0u16, 0x243Cu16, 0xC719u16, 0x69E5u16, 0x1172u16, 0xBF8Eu16, 0x5CABu16, 0xF257u16
578 ],
579 [
580 0x0000u16, 0xA824u16, 0x4069u16, 0xE84Du16, 0x80D2u16, 0x28F6u16, 0xC0BBu16, 0x689Fu16,
581 0x1185u16, 0xB9A1u16, 0x51ECu16, 0xF9C8u16, 0x9157u16, 0x3973u16, 0xD13Eu16, 0x791Au16,
582 0x230Au16, 0x8B2Eu16, 0x6363u16, 0xCB47u16, 0xA3D8u16, 0x0BFCu16, 0xE3B1u16, 0x4B95u16,
583 0x328Fu16, 0x9AABu16, 0x72E6u16, 0xDAC2u16, 0xB25Du16, 0x1A79u16, 0xF234u16, 0x5A10u16,
584 0x4614u16, 0xEE30u16, 0x067Du16, 0xAE59u16, 0xC6C6u16, 0x6EE2u16, 0x86AFu16, 0x2E8Bu16,
585 0x5791u16, 0xFFB5u16, 0x17F8u16, 0xBFDCu16, 0xD743u16, 0x7F67u16, 0x972Au16, 0x3F0Eu16,
586 0x651Eu16, 0xCD3Au16, 0x2577u16, 0x8D53u16, 0xE5CCu16, 0x4DE8u16, 0xA5A5u16, 0x0D81u16,
587 0x749Bu16, 0xDCBFu16, 0x34F2u16, 0x9CD6u16, 0xF449u16, 0x5C6Du16, 0xB420u16, 0x1C04u16,
588 0x8C28u16, 0x240Cu16, 0xCC41u16, 0x6465u16, 0x0CFAu16, 0xA4DEu16, 0x4C93u16, 0xE4B7u16,
589 0x9DADu16, 0x3589u16, 0xDDC4u16, 0x75E0u16, 0x1D7Fu16, 0xB55Bu16, 0x5D16u16, 0xF532u16,
590 0xAF22u16, 0x0706u16, 0xEF4Bu16, 0x476Fu16, 0x2FF0u16, 0x87D4u16, 0x6F99u16, 0xC7BDu16,
591 0xBEA7u16, 0x1683u16, 0xFECEu16, 0x56EAu16, 0x3E75u16, 0x9651u16, 0x7E1Cu16, 0xD638u16,
592 0xCA3Cu16, 0x6218u16, 0x8A55u16, 0x2271u16, 0x4AEEu16, 0xE2CAu16, 0x0A87u16, 0xA2A3u16,
593 0xDBB9u16, 0x739Du16, 0x9BD0u16, 0x33F4u16, 0x5B6Bu16, 0xF34Fu16, 0x1B02u16, 0xB326u16,
594 0xE936u16, 0x4112u16, 0xA95Fu16, 0x017Bu16, 0x69E4u16, 0xC1C0u16, 0x298Du16, 0x81A9u16,
595 0xF8B3u16, 0x5097u16, 0xB8DAu16, 0x10FEu16, 0x7861u16, 0xD045u16, 0x3808u16, 0x902Cu16,
596 0x0871u16, 0xA055u16, 0x4818u16, 0xE03Cu16, 0x88A3u16, 0x2087u16, 0xC8CAu16, 0x60EEu16,
597 0x19F4u16, 0xB1D0u16, 0x599Du16, 0xF1B9u16, 0x9926u16, 0x3102u16, 0xD94Fu16, 0x716Bu16,
598 0x2B7Bu16, 0x835Fu16, 0x6B12u16, 0xC336u16, 0xABA9u16, 0x038Du16, 0xEBC0u16, 0x43E4u16,
599 0x3AFEu16, 0x92DAu16, 0x7A97u16, 0xD2B3u16, 0xBA2Cu16, 0x1208u16, 0xFA45u16, 0x5261u16,
600 0x4E65u16, 0xE641u16, 0x0E0Cu16, 0xA628u16, 0xCEB7u16, 0x6693u16, 0x8EDEu16, 0x26FAu16,
601 0x5FE0u16, 0xF7C4u16, 0x1F89u16, 0xB7ADu16, 0xDF32u16, 0x7716u16, 0x9F5Bu16, 0x377Fu16,
602 0x6D6Fu16, 0xC54Bu16, 0x2D06u16, 0x8522u16, 0xEDBDu16, 0x4599u16, 0xADD4u16, 0x05F0u16,
603 0x7CEAu16, 0xD4CEu16, 0x3C83u16, 0x94A7u16, 0xFC38u16, 0x541Cu16, 0xBC51u16, 0x1475u16,
604 0x8459u16, 0x2C7Du16, 0xC430u16, 0x6C14u16, 0x048Bu16, 0xACAFu16, 0x44E2u16, 0xECC6u16,
605 0x95DCu16, 0x3DF8u16, 0xD5B5u16, 0x7D91u16, 0x150Eu16, 0xBD2Au16, 0x5567u16, 0xFD43u16,
606 0xA753u16, 0x0F77u16, 0xE73Au16, 0x4F1Eu16, 0x2781u16, 0x8FA5u16, 0x67E8u16, 0xCFCCu16,
607 0xB6D6u16, 0x1EF2u16, 0xF6BFu16, 0x5E9Bu16, 0x3604u16, 0x9E20u16, 0x766Du16, 0xDE49u16,
608 0xC24Du16, 0x6A69u16, 0x8224u16, 0x2A00u16, 0x429Fu16, 0xEABBu16, 0x02F6u16, 0xAAD2u16,
609 0xD3C8u16, 0x7BECu16, 0x93A1u16, 0x3B85u16, 0x531Au16, 0xFB3Eu16, 0x1373u16, 0xBB57u16,
610 0xE147u16, 0x4963u16, 0xA12Eu16, 0x090Au16, 0x6195u16, 0xC9B1u16, 0x21FCu16, 0x89D8u16,
611 0xF0C2u16, 0x58E6u16, 0xB0ABu16, 0x188Fu16, 0x7010u16, 0xD834u16, 0x3079u16, 0x985Du16
612 ]
613 ];
614
615 let mut s: u16 = ((initial_crc) & CRC16_BITMASK) ^ CRC16_XOR_OUTPUT;
616 for p in data[0..data.len() - data.len() % 16].chunks(16) {
617 s = TABLE[15][(p[ 0] as u16 ^ (s >> 8)) as u8 as usize] ^
618 TABLE[14][(p[ 1] as u16 ^ (s >> 0)) as u8 as usize] ^
619 TABLE[13][p[ 2] as usize ] ^
620 TABLE[12][p[ 3] as usize ] ^
621 TABLE[11][p[ 4] as usize ] ^
622 TABLE[10][p[ 5] as usize ] ^
623 TABLE[ 9][p[ 6] as usize ] ^
624 TABLE[ 8][p[ 7] as usize ] ^
625 TABLE[ 7][p[ 8] as usize ] ^
626 TABLE[ 6][p[ 9] as usize ] ^
627 TABLE[ 5][p[10] as usize ] ^
628 TABLE[ 4][p[11] as usize ] ^
629 TABLE[ 3][p[12] as usize ] ^
630 TABLE[ 2][p[13] as usize ] ^
631 TABLE[ 1][p[14] as usize ] ^
632 TABLE[ 0][p[15] as usize ];
633 }
634
635 for p in &data[data.len() - data.len() % 16..data.len()] {
636 s = TABLE[0][(*p as u16 ^ (s >> 8)) as usize] ^ (s << 8);
637 }
638
639 return ((s) & CRC16_BITMASK) ^ CRC16_XOR_OUTPUT;
640}
641
642#[cfg(test)]
643mod tests {
644 #[test]
645 fn test_10_byte_q_subcode() {
646 let data = &[0x41, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00];
647 assert_eq!(::crc16(data, 0xFFFF), 0x2832);
648 }
649
650 #[test]
651 fn test_80_byte_data() {
652 let data = vec![0xFF; 80];
653 assert_eq!(::crc16(&data, 0xFFFF), 0x7409);
654 }
655}