View Javadoc
1   /*
2   * Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow <danshu@microsoft.com>
3   * Distributed under the MIT Software License.
4   * MIT License
5   *
6   * Copyright (c) 2017:
7   *     Marc Stevens
8   *     Cryptology Group
9   *     Centrum Wiskunde & Informatica
10  *     P.O. Box 94079, 1090 GB Amsterdam, Netherlands
11  *     marc@marc-stevens.nl
12  *
13  *     Dan Shumow
14  *     Microsoft Research
15  *     danshu@microsoft.com
16  *
17  * Permission is hereby granted, free of charge, to any person obtaining a copy
18  * of this software and associated documentation files (the "Software"), to deal
19  * in the Software without restriction, including without limitation the rights
20  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21  * copies of the Software, and to permit persons to whom the Software is
22  * furnished to do so, subject to the following conditions:
23  *
24  * The above copyright notice and this permission notice shall be included in all
25  * copies or substantial portions of the Software.
26  *
27  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33  * SOFTWARE.
34  */
35  
36  package org.eclipse.jgit.util.sha1;
37  
38  // Converted by hand by Shawn Pearce (Google), using lib/ubc_check.c from
39  // https://github.com/cr-marcstevens/sha1collisiondetection/
40  //
41  // this file was generated by the 'parse_bitrel' program in the tools section
42  // using the data files from directory 'tools/data/3565'
43  //
44  // Array DV contains a list of SHA-1 Disturbance Vectors (DV) to check
45  // dvType, dvK and dvB define the DV: I(K,B) or II(K,B) (see the paper)
46  // dm[80] is the expanded message block XOR-difference defined by the DV
47  // testt is the step to do the recompression from for collision detection
48  // maski and maskb define the bit to check for each DV in the dvmask returned by ubc_check
49  //
50  // ubc_check takes as input an expanded message block and verifies the unavoidable bitconditions for all listed DVs
51  // it returns a dvmask where each bit belonging to a DV is set if all unavoidable bitconditions for that DV have been met
52  // thus one needs to do the recompression check for each DV that has its bit set
53  //
54  // ubc_check is programmatically generated and the unavoidable bitconditions have been hardcoded
55  // a directly verifiable version named ubc_check_verify can be found in ubc_check_verify.c
56  // ubc_check has been verified against ubc_check_verify using the 'ubc_check_test' program in the tools section
57  
58  final class UbcCheck {
59  	private static final int DV_I_43_0_bit = 1 << 0;
60  	private static final int DV_I_44_0_bit = 1 << 1;
61  	private static final int DV_I_45_0_bit = 1 << 2;
62  	private static final int DV_I_46_0_bit = 1 << 3;
63  	private static final int DV_I_46_2_bit = 1 << 4;
64  	private static final int DV_I_47_0_bit = 1 << 5;
65  	private static final int DV_I_47_2_bit = 1 << 6;
66  	private static final int DV_I_48_0_bit = 1 << 7;
67  	private static final int DV_I_48_2_bit = 1 << 8;
68  	private static final int DV_I_49_0_bit = 1 << 9;
69  	private static final int DV_I_49_2_bit = 1 << 10;
70  	private static final int DV_I_50_0_bit = 1 << 11;
71  	private static final int DV_I_50_2_bit = 1 << 12;
72  	private static final int DV_I_51_0_bit = 1 << 13;
73  	private static final int DV_I_51_2_bit = 1 << 14;
74  	private static final int DV_I_52_0_bit = 1 << 15;
75  	private static final int DV_II_45_0_bit = 1 << 16;
76  	private static final int DV_II_46_0_bit = 1 << 17;
77  	private static final int DV_II_46_2_bit = 1 << 18;
78  	private static final int DV_II_47_0_bit = 1 << 19;
79  	private static final int DV_II_48_0_bit = 1 << 20;
80  	private static final int DV_II_49_0_bit = 1 << 21;
81  	private static final int DV_II_49_2_bit = 1 << 22;
82  	private static final int DV_II_50_0_bit = 1 << 23;
83  	private static final int DV_II_50_2_bit = 1 << 24;
84  	private static final int DV_II_51_0_bit = 1 << 25;
85  	private static final int DV_II_51_2_bit = 1 << 26;
86  	private static final int DV_II_52_0_bit = 1 << 27;
87  	private static final int DV_II_53_0_bit = 1 << 28;
88  	private static final int DV_II_54_0_bit = 1 << 29;
89  	private static final int DV_II_55_0_bit = 1 << 30;
90  	private static final int DV_II_56_0_bit = 1 << 31;
91  
92  	static int check(int[] w) {
93  		int mask = ~0;
94  		mask &= (((((w[44] ^ w[45]) >>> 29) & 1) - 1) | ~(DV_I_48_0_bit
95  				| DV_I_51_0_bit | DV_I_52_0_bit | DV_II_45_0_bit
96  				| DV_II_46_0_bit | DV_II_50_0_bit | DV_II_51_0_bit));
97  		mask &= (((((w[49] ^ w[50]) >>> 29) & 1) - 1)
98  				| ~(DV_I_46_0_bit | DV_II_45_0_bit | DV_II_50_0_bit
99  						| DV_II_51_0_bit | DV_II_55_0_bit | DV_II_56_0_bit));
100 		mask &= (((((w[48] ^ w[49]) >>> 29) & 1) - 1)
101 				| ~(DV_I_45_0_bit | DV_I_52_0_bit | DV_II_49_0_bit
102 						| DV_II_50_0_bit | DV_II_54_0_bit | DV_II_55_0_bit));
103 		mask &= ((((w[47] ^ (w[50] >>> 25)) & (1 << 4)) - (1 << 4))
104 				| ~(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit
105 						| DV_II_45_0_bit | DV_II_51_0_bit | DV_II_56_0_bit));
106 		mask &= (((((w[47] ^ w[48]) >>> 29) & 1) - 1)
107 				| ~(DV_I_44_0_bit | DV_I_51_0_bit | DV_II_48_0_bit
108 						| DV_II_49_0_bit | DV_II_53_0_bit | DV_II_54_0_bit));
109 		mask &= (((((w[46] >>> 4) ^ (w[49] >>> 29)) & 1) - 1)
110 				| ~(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit
111 						| DV_I_52_0_bit | DV_II_50_0_bit | DV_II_55_0_bit));
112 		mask &= (((((w[46] ^ w[47]) >>> 29) & 1) - 1)
113 				| ~(DV_I_43_0_bit | DV_I_50_0_bit | DV_II_47_0_bit
114 						| DV_II_48_0_bit | DV_II_52_0_bit | DV_II_53_0_bit));
115 		mask &= (((((w[45] >>> 4) ^ (w[48] >>> 29)) & 1) - 1)
116 				| ~(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit
117 						| DV_I_51_0_bit | DV_II_49_0_bit | DV_II_54_0_bit));
118 		mask &= (((((w[45] ^ w[46]) >>> 29) & 1) - 1)
119 				| ~(DV_I_49_0_bit | DV_I_52_0_bit | DV_II_46_0_bit
120 						| DV_II_47_0_bit | DV_II_51_0_bit | DV_II_52_0_bit));
121 		mask &= (((((w[44] >>> 4) ^ (w[47] >>> 29)) & 1) - 1)
122 				| ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit
123 						| DV_I_50_0_bit | DV_II_48_0_bit | DV_II_53_0_bit));
124 		mask &= (((((w[43] >>> 4) ^ (w[46] >>> 29)) & 1) - 1)
125 				| ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit
126 						| DV_I_49_0_bit | DV_II_47_0_bit | DV_II_52_0_bit));
127 		mask &= (((((w[43] ^ w[44]) >>> 29) & 1) - 1)
128 				| ~(DV_I_47_0_bit | DV_I_50_0_bit | DV_I_51_0_bit
129 						| DV_II_45_0_bit | DV_II_49_0_bit | DV_II_50_0_bit));
130 		mask &= (((((w[42] >>> 4) ^ (w[45] >>> 29)) & 1) - 1)
131 				| ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit
132 						| DV_I_52_0_bit | DV_II_46_0_bit | DV_II_51_0_bit));
133 		mask &= (((((w[41] >>> 4) ^ (w[44] >>> 29)) & 1) - 1)
134 				| ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit
135 						| DV_I_51_0_bit | DV_II_45_0_bit | DV_II_50_0_bit));
136 		mask &= (((((w[40] ^ w[41]) >>> 29) & 1) - 1)
137 				| ~(DV_I_44_0_bit | DV_I_47_0_bit | DV_I_48_0_bit
138 						| DV_II_46_0_bit | DV_II_47_0_bit | DV_II_56_0_bit));
139 		mask &= (((((w[54] ^ w[55]) >>> 29) & 1) - 1)
140 				| ~(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_50_0_bit
141 						| DV_II_55_0_bit | DV_II_56_0_bit));
142 		mask &= (((((w[53] ^ w[54]) >>> 29) & 1) - 1)
143 				| ~(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_49_0_bit
144 						| DV_II_54_0_bit | DV_II_55_0_bit));
145 		mask &= (((((w[52] ^ w[53]) >>> 29) & 1) - 1)
146 				| ~(DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit
147 						| DV_II_53_0_bit | DV_II_54_0_bit));
148 		mask &= ((((w[50] ^ (w[53] >>> 25)) & (1 << 4)) - (1 << 4))
149 				| ~(DV_I_50_0_bit | DV_I_52_0_bit | DV_II_46_0_bit
150 						| DV_II_48_0_bit | DV_II_54_0_bit));
151 		mask &= (((((w[50] ^ w[51]) >>> 29) & 1) - 1)
152 				| ~(DV_I_47_0_bit | DV_II_46_0_bit | DV_II_51_0_bit
153 						| DV_II_52_0_bit | DV_II_56_0_bit));
154 		mask &= ((((w[49] ^ (w[52] >>> 25)) & (1 << 4)) - (1 << 4))
155 				| ~(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit
156 						| DV_II_47_0_bit | DV_II_53_0_bit));
157 		mask &= ((((w[48] ^ (w[51] >>> 25)) & (1 << 4)) - (1 << 4))
158 				| ~(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit
159 						| DV_II_46_0_bit | DV_II_52_0_bit));
160 		mask &= (((((w[42] ^ w[43]) >>> 29) & 1) - 1)
161 				| ~(DV_I_46_0_bit | DV_I_49_0_bit | DV_I_50_0_bit
162 						| DV_II_48_0_bit | DV_II_49_0_bit));
163 		mask &= (((((w[41] ^ w[42]) >>> 29) & 1) - 1)
164 				| ~(DV_I_45_0_bit | DV_I_48_0_bit | DV_I_49_0_bit
165 						| DV_II_47_0_bit | DV_II_48_0_bit));
166 		mask &= (((((w[40] >>> 4) ^ (w[43] >>> 29)) & 1) - 1)
167 				| ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_50_0_bit
168 						| DV_II_49_0_bit | DV_II_56_0_bit));
169 		mask &= (((((w[39] >>> 4) ^ (w[42] >>> 29)) & 1) - 1)
170 				| ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_49_0_bit
171 						| DV_II_48_0_bit | DV_II_55_0_bit));
172 		if ((mask & (DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit
173 				| DV_II_54_0_bit | DV_II_56_0_bit)) != 0)
174 			mask &= (((((w[38] >>> 4) ^ (w[41] >>> 29)) & 1) - 1)
175 					| ~(DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit
176 							| DV_II_54_0_bit | DV_II_56_0_bit));
177 		mask &= (((((w[37] >>> 4) ^ (w[40] >>> 29)) & 1) - 1)
178 				| ~(DV_I_43_0_bit | DV_I_47_0_bit | DV_II_46_0_bit
179 						| DV_II_53_0_bit | DV_II_55_0_bit));
180 		if ((mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_51_0_bit
181 				| DV_II_56_0_bit)) != 0)
182 			mask &= (((((w[55] ^ w[56]) >>> 29) & 1) - 1) | ~(DV_I_52_0_bit
183 					| DV_II_48_0_bit | DV_II_51_0_bit | DV_II_56_0_bit));
184 		if ((mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit
185 				| DV_II_56_0_bit)) != 0)
186 			mask &= ((((w[52] ^ (w[55] >>> 25)) & (1 << 4)) - (1 << 4))
187 					| ~(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit
188 							| DV_II_56_0_bit));
189 		if ((mask & (DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit
190 				| DV_II_55_0_bit)) != 0)
191 			mask &= ((((w[51] ^ (w[54] >>> 25)) & (1 << 4)) - (1 << 4))
192 					| ~(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit
193 							| DV_II_55_0_bit));
194 		if ((mask & (DV_I_48_0_bit | DV_II_47_0_bit | DV_II_52_0_bit
195 				| DV_II_53_0_bit)) != 0)
196 			mask &= (((((w[51] ^ w[52]) >>> 29) & 1) - 1) | ~(DV_I_48_0_bit
197 					| DV_II_47_0_bit | DV_II_52_0_bit | DV_II_53_0_bit));
198 		if ((mask & (DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit
199 				| DV_II_48_0_bit)) != 0)
200 			mask &= (((((w[36] >>> 4) ^ (w[40] >>> 29)) & 1) - 1)
201 					| ~(DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit
202 							| DV_II_48_0_bit));
203 		if ((mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit)) != 0)
204 			mask &= ((0 - (((w[53] ^ w[56]) >>> 29) & 1))
205 					| ~(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit));
206 		if ((mask & (DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit)) != 0)
207 			mask &= ((0 - (((w[51] ^ w[54]) >>> 29) & 1))
208 					| ~(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit));
209 		if ((mask & (DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit)) != 0)
210 			mask &= ((0 - (((w[50] ^ w[52]) >>> 29) & 1))
211 					| ~(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit));
212 		if ((mask & (DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit)) != 0)
213 			mask &= ((0 - (((w[49] ^ w[51]) >>> 29) & 1))
214 					| ~(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit));
215 		if ((mask & (DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit)) != 0)
216 			mask &= ((0 - (((w[48] ^ w[50]) >>> 29) & 1))
217 					| ~(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit));
218 		if ((mask & (DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit)) != 0)
219 			mask &= ((0 - (((w[47] ^ w[49]) >>> 29) & 1))
220 					| ~(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit));
221 		if ((mask & (DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit)) != 0)
222 			mask &= ((0 - (((w[46] ^ w[48]) >>> 29) & 1))
223 					| ~(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit));
224 		mask &= ((((w[45] ^ w[47]) & (1 << 6)) - (1 << 6))
225 				| ~(DV_I_47_2_bit | DV_I_49_2_bit | DV_I_51_2_bit));
226 		if ((mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit)) != 0)
227 			mask &= ((0 - (((w[45] ^ w[47]) >>> 29) & 1))
228 					| ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit));
229 		mask &= (((((w[44] ^ w[46]) >>> 6) & 1) - 1)
230 				| ~(DV_I_46_2_bit | DV_I_48_2_bit | DV_I_50_2_bit));
231 		if ((mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit)) != 0)
232 			mask &= ((0 - (((w[44] ^ w[46]) >>> 29) & 1))
233 					| ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit));
234 		mask &= ((0 - ((w[41] ^ (w[42] >>> 5)) & (1 << 1)))
235 				| ~(DV_I_48_2_bit | DV_II_46_2_bit | DV_II_51_2_bit));
236 		mask &= ((0 - ((w[40] ^ (w[41] >>> 5)) & (1 << 1)))
237 				| ~(DV_I_47_2_bit | DV_I_51_2_bit | DV_II_50_2_bit));
238 		if ((mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit)) != 0)
239 			mask &= ((0 - (((w[40] ^ w[42]) >>> 4) & 1))
240 					| ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit));
241 		mask &= ((0 - ((w[39] ^ (w[40] >>> 5)) & (1 << 1)))
242 				| ~(DV_I_46_2_bit | DV_I_50_2_bit | DV_II_49_2_bit));
243 		if ((mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit)) != 0)
244 			mask &= ((0 - (((w[39] ^ w[41]) >>> 4) & 1))
245 					| ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit));
246 		if ((mask & (DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit)) != 0)
247 			mask &= ((0 - (((w[38] ^ w[40]) >>> 4) & 1))
248 					| ~(DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit));
249 		if ((mask & (DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit)) != 0)
250 			mask &= ((0 - (((w[37] ^ w[39]) >>> 4) & 1))
251 					| ~(DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit));
252 		mask &= ((0 - ((w[36] ^ (w[37] >>> 5)) & (1 << 1)))
253 				| ~(DV_I_47_2_bit | DV_I_50_2_bit | DV_II_46_2_bit));
254 		if ((mask & (DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit)) != 0)
255 			mask &= (((((w[35] >>> 4) ^ (w[39] >>> 29)) & 1) - 1)
256 					| ~(DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit));
257 		if ((mask & (DV_I_48_0_bit | DV_II_48_0_bit)) != 0)
258 			mask &= ((0 - ((w[63] ^ (w[64] >>> 5)) & (1 << 0)))
259 					| ~(DV_I_48_0_bit | DV_II_48_0_bit));
260 		if ((mask & (DV_I_45_0_bit | DV_II_45_0_bit)) != 0)
261 			mask &= ((0 - ((w[63] ^ (w[64] >>> 5)) & (1 << 1)))
262 					| ~(DV_I_45_0_bit | DV_II_45_0_bit));
263 		if ((mask & (DV_I_47_0_bit | DV_II_47_0_bit)) != 0)
264 			mask &= ((0 - ((w[62] ^ (w[63] >>> 5)) & (1 << 0)))
265 					| ~(DV_I_47_0_bit | DV_II_47_0_bit));
266 		if ((mask & (DV_I_46_0_bit | DV_II_46_0_bit)) != 0)
267 			mask &= ((0 - ((w[61] ^ (w[62] >>> 5)) & (1 << 0)))
268 					| ~(DV_I_46_0_bit | DV_II_46_0_bit));
269 		mask &= ((0 - ((w[61] ^ (w[62] >>> 5)) & (1 << 2)))
270 				| ~(DV_I_46_2_bit | DV_II_46_2_bit));
271 		if ((mask & (DV_I_45_0_bit | DV_II_45_0_bit)) != 0)
272 			mask &= ((0 - ((w[60] ^ (w[61] >>> 5)) & (1 << 0)))
273 					| ~(DV_I_45_0_bit | DV_II_45_0_bit));
274 		if ((mask & (DV_II_51_0_bit | DV_II_54_0_bit)) != 0)
275 			mask &= (((((w[58] ^ w[59]) >>> 29) & 1) - 1)
276 					| ~(DV_II_51_0_bit | DV_II_54_0_bit));
277 		if ((mask & (DV_II_50_0_bit | DV_II_53_0_bit)) != 0)
278 			mask &= (((((w[57] ^ w[58]) >>> 29) & 1) - 1)
279 					| ~(DV_II_50_0_bit | DV_II_53_0_bit));
280 		if ((mask & (DV_II_52_0_bit | DV_II_54_0_bit)) != 0)
281 			mask &= ((((w[56] ^ (w[59] >>> 25)) & (1 << 4)) - (1 << 4))
282 					| ~(DV_II_52_0_bit | DV_II_54_0_bit));
283 		if ((mask & (DV_II_51_0_bit | DV_II_52_0_bit)) != 0)
284 			mask &= ((0 - (((w[56] ^ w[59]) >>> 29) & 1))
285 					| ~(DV_II_51_0_bit | DV_II_52_0_bit));
286 		if ((mask & (DV_II_49_0_bit | DV_II_52_0_bit)) != 0)
287 			mask &= (((((w[56] ^ w[57]) >>> 29) & 1) - 1)
288 					| ~(DV_II_49_0_bit | DV_II_52_0_bit));
289 		if ((mask & (DV_II_51_0_bit | DV_II_53_0_bit)) != 0)
290 			mask &= ((((w[55] ^ (w[58] >>> 25)) & (1 << 4)) - (1 << 4))
291 					| ~(DV_II_51_0_bit | DV_II_53_0_bit));
292 		if ((mask & (DV_II_50_0_bit | DV_II_52_0_bit)) != 0)
293 			mask &= ((((w[54] ^ (w[57] >>> 25)) & (1 << 4)) - (1 << 4))
294 					| ~(DV_II_50_0_bit | DV_II_52_0_bit));
295 		if ((mask & (DV_II_49_0_bit | DV_II_51_0_bit)) != 0)
296 			mask &= ((((w[53] ^ (w[56] >>> 25)) & (1 << 4)) - (1 << 4))
297 					| ~(DV_II_49_0_bit | DV_II_51_0_bit));
298 		mask &= ((((w[51] ^ (w[50] >>> 5)) & (1 << 1)) - (1 << 1))
299 				| ~(DV_I_50_2_bit | DV_II_46_2_bit));
300 		mask &= ((((w[48] ^ w[50]) & (1 << 6)) - (1 << 6))
301 				| ~(DV_I_50_2_bit | DV_II_46_2_bit));
302 		if ((mask & (DV_I_51_0_bit | DV_I_52_0_bit)) != 0)
303 			mask &= ((0 - (((w[48] ^ w[55]) >>> 29) & 1))
304 					| ~(DV_I_51_0_bit | DV_I_52_0_bit));
305 		mask &= ((((w[47] ^ w[49]) & (1 << 6)) - (1 << 6))
306 				| ~(DV_I_49_2_bit | DV_I_51_2_bit));
307 		mask &= ((((w[48] ^ (w[47] >>> 5)) & (1 << 1)) - (1 << 1))
308 				| ~(DV_I_47_2_bit | DV_II_51_2_bit));
309 		mask &= ((((w[46] ^ w[48]) & (1 << 6)) - (1 << 6))
310 				| ~(DV_I_48_2_bit | DV_I_50_2_bit));
311 		mask &= ((((w[47] ^ (w[46] >>> 5)) & (1 << 1)) - (1 << 1))
312 				| ~(DV_I_46_2_bit | DV_II_50_2_bit));
313 		mask &= ((0 - ((w[44] ^ (w[45] >>> 5)) & (1 << 1)))
314 				| ~(DV_I_51_2_bit | DV_II_49_2_bit));
315 		mask &= ((((w[43] ^ w[45]) & (1 << 6)) - (1 << 6))
316 				| ~(DV_I_47_2_bit | DV_I_49_2_bit));
317 		mask &= (((((w[42] ^ w[44]) >>> 6) & 1) - 1)
318 				| ~(DV_I_46_2_bit | DV_I_48_2_bit));
319 		mask &= ((((w[43] ^ (w[42] >>> 5)) & (1 << 1)) - (1 << 1))
320 				| ~(DV_II_46_2_bit | DV_II_51_2_bit));
321 		mask &= ((((w[42] ^ (w[41] >>> 5)) & (1 << 1)) - (1 << 1))
322 				| ~(DV_I_51_2_bit | DV_II_50_2_bit));
323 		mask &= ((((w[41] ^ (w[40] >>> 5)) & (1 << 1)) - (1 << 1))
324 				| ~(DV_I_50_2_bit | DV_II_49_2_bit));
325 		if ((mask & (DV_I_52_0_bit | DV_II_51_0_bit)) != 0)
326 			mask &= ((((w[39] ^ (w[43] >>> 25)) & (1 << 4)) - (1 << 4))
327 					| ~(DV_I_52_0_bit | DV_II_51_0_bit));
328 		if ((mask & (DV_I_51_0_bit | DV_II_50_0_bit)) != 0)
329 			mask &= ((((w[38] ^ (w[42] >>> 25)) & (1 << 4)) - (1 << 4))
330 					| ~(DV_I_51_0_bit | DV_II_50_0_bit));
331 		if ((mask & (DV_I_48_2_bit | DV_I_51_2_bit)) != 0)
332 			mask &= ((0 - ((w[37] ^ (w[38] >>> 5)) & (1 << 1)))
333 					| ~(DV_I_48_2_bit | DV_I_51_2_bit));
334 		if ((mask & (DV_I_50_0_bit | DV_II_49_0_bit)) != 0)
335 			mask &= ((((w[37] ^ (w[41] >>> 25)) & (1 << 4)) - (1 << 4))
336 					| ~(DV_I_50_0_bit | DV_II_49_0_bit));
337 		if ((mask & (DV_II_52_0_bit | DV_II_54_0_bit)) != 0)
338 			mask &= ((0 - ((w[36] ^ w[38]) & (1 << 4)))
339 					| ~(DV_II_52_0_bit | DV_II_54_0_bit));
340 		mask &= ((0 - ((w[35] ^ (w[36] >>> 5)) & (1 << 1)))
341 				| ~(DV_I_46_2_bit | DV_I_49_2_bit));
342 		if ((mask & (DV_I_51_0_bit | DV_II_47_0_bit)) != 0)
343 			mask &= ((((w[35] ^ (w[39] >>> 25)) & (1 << 3)) - (1 << 3))
344 					| ~(DV_I_51_0_bit | DV_II_47_0_bit));
345 
346 		if (mask == 0) {
347 			return mask;
348 		}
349 
350 		if ((mask & DV_I_43_0_bit) != 0)
351 			if (0 == ((w[61] ^ (w[62] >>> 5)) & (1 << 1))
352 					|| 0 != ((w[59] ^ (w[63] >>> 25)) & (1 << 5))
353 					|| 0 == ((w[58] ^ (w[63] >>> 30)) & (1 << 0)))
354 				mask &= ~DV_I_43_0_bit;
355 		if ((mask & DV_I_44_0_bit) != 0)
356 			if (0 == ((w[62] ^ (w[63] >>> 5)) & (1 << 1))
357 					|| 0 != ((w[60] ^ (w[64] >>> 25)) & (1 << 5))
358 					|| 0 == ((w[59] ^ (w[64] >>> 30)) & (1 << 0)))
359 				mask &= ~DV_I_44_0_bit;
360 		if ((mask & DV_I_46_2_bit) != 0)
361 			mask &= ((~((w[40] ^ w[42]) >>> 2)) | ~DV_I_46_2_bit);
362 		if ((mask & DV_I_47_2_bit) != 0)
363 			if (0 == ((w[62] ^ (w[63] >>> 5)) & (1 << 2))
364 					|| 0 != ((w[41] ^ w[43]) & (1 << 6)))
365 				mask &= ~DV_I_47_2_bit;
366 		if ((mask & DV_I_48_2_bit) != 0)
367 			if (0 == ((w[63] ^ (w[64] >>> 5)) & (1 << 2))
368 					|| 0 != ((w[48] ^ (w[49] << 5)) & (1 << 6)))
369 				mask &= ~DV_I_48_2_bit;
370 		if ((mask & DV_I_49_2_bit) != 0)
371 			if (0 != ((w[49] ^ (w[50] << 5)) & (1 << 6))
372 					|| 0 == ((w[42] ^ w[50]) & (1 << 1))
373 					|| 0 != ((w[39] ^ (w[40] << 5)) & (1 << 6))
374 					|| 0 == ((w[38] ^ w[40]) & (1 << 1)))
375 				mask &= ~DV_I_49_2_bit;
376 		if ((mask & DV_I_50_0_bit) != 0)
377 			mask &= ((((w[36] ^ w[37]) << 7)) | ~DV_I_50_0_bit);
378 		if ((mask & DV_I_50_2_bit) != 0)
379 			mask &= ((((w[43] ^ w[51]) << 11)) | ~DV_I_50_2_bit);
380 		if ((mask & DV_I_51_0_bit) != 0)
381 			mask &= ((((w[37] ^ w[38]) << 9)) | ~DV_I_51_0_bit);
382 		if ((mask & DV_I_51_2_bit) != 0)
383 			if (0 != ((w[51] ^ (w[52] << 5)) & (1 << 6))
384 					|| 0 != ((w[49] ^ w[51]) & (1 << 6))
385 					|| 0 != ((w[37] ^ (w[37] >>> 5)) & (1 << 1))
386 					|| 0 != ((w[35] ^ (w[39] >>> 25)) & (1 << 5)))
387 				mask &= ~DV_I_51_2_bit;
388 		if ((mask & DV_I_52_0_bit) != 0)
389 			mask &= ((((w[38] ^ w[39]) << 11)) | ~DV_I_52_0_bit);
390 		if ((mask & DV_II_46_2_bit) != 0)
391 			mask &= ((((w[47] ^ w[51]) << 17)) | ~DV_II_46_2_bit);
392 		if ((mask & DV_II_48_0_bit) != 0)
393 			if (0 != ((w[36] ^ (w[40] >>> 25)) & (1 << 3))
394 					|| 0 == ((w[35] ^ (w[40] << 2)) & (1 << 30)))
395 				mask &= ~DV_II_48_0_bit;
396 		if ((mask & DV_II_49_0_bit) != 0)
397 			if (0 != ((w[37] ^ (w[41] >>> 25)) & (1 << 3))
398 					|| 0 == ((w[36] ^ (w[41] << 2)) & (1 << 30)))
399 				mask &= ~DV_II_49_0_bit;
400 		if ((mask & DV_II_49_2_bit) != 0)
401 			if (0 != ((w[53] ^ (w[54] << 5)) & (1 << 6))
402 					|| 0 != ((w[51] ^ w[53]) & (1 << 6))
403 					|| 0 == ((w[50] ^ w[54]) & (1 << 1))
404 					|| 0 != ((w[45] ^ (w[46] << 5)) & (1 << 6))
405 					|| 0 != ((w[37] ^ (w[41] >>> 25)) & (1 << 5))
406 					|| 0 == ((w[36] ^ (w[41] >>> 30)) & (1 << 0)))
407 				mask &= ~DV_II_49_2_bit;
408 		if ((mask & DV_II_50_0_bit) != 0)
409 			if (0 == ((w[55] ^ w[58]) & (1 << 29))
410 					|| 0 != ((w[38] ^ (w[42] >>> 25)) & (1 << 3))
411 					|| 0 == ((w[37] ^ (w[42] << 2)) & (1 << 30)))
412 				mask &= ~DV_II_50_0_bit;
413 		if ((mask & DV_II_50_2_bit) != 0)
414 			if (0 != ((w[54] ^ (w[55] << 5)) & (1 << 6))
415 					|| 0!=((w[52] ^ w[54]) & (1 << 6))
416 					|| 0==((w[51] ^ w[55]) & (1 << 1))
417 					|| 0==((w[45] ^ w[47]) & (1 << 1))
418 					|| 0!=((w[38] ^ (w[42] >>> 25)) & (1 << 5))
419 					|| 0==((w[37] ^ (w[42] >>> 30)) & (1 << 0)))
420 				mask &= ~DV_II_50_2_bit;
421 		if ((mask & DV_II_51_0_bit) != 0)
422 			if (0 != ((w[39] ^ (w[43] >>> 25)) & (1 << 3))
423 					|| 0 == ((w[38] ^ (w[43] << 2)) & (1 << 30)))
424 				mask &= ~DV_II_51_0_bit;
425 		if ((mask & DV_II_51_2_bit) != 0)
426 			if (0 != ((w[55] ^ (w[56] << 5)) & (1 << 6))
427 					|| 0 != ((w[53] ^ w[55]) & (1 << 6))
428 					|| 0 == ((w[52] ^ w[56]) & (1 << 1))
429 					|| 0 == ((w[46] ^ w[48]) & (1 << 1))
430 					|| 0 != ((w[39] ^ (w[43] >>> 25)) & (1 << 5))
431 					|| 0 == ((w[38] ^ (w[43] >>> 30)) & (1 << 0)))
432 				mask &= ~DV_II_51_2_bit;
433 		if ((mask & DV_II_52_0_bit) != 0)
434 			if (0 != ((w[59] ^ w[60]) & (1 << 29))
435 					|| 0 != ((w[40] ^ (w[44] >>> 25)) & (1 << 3))
436 					|| 0 != ((w[40] ^ (w[44] >>> 25)) & (1 << 4))
437 					|| 0==((w[39] ^ (w[44] << 2)) & (1 << 30)))
438 				mask &= ~DV_II_52_0_bit;
439 		if ((mask & DV_II_53_0_bit) != 0)
440 			if (0==((w[58] ^ w[61]) & (1 << 29))
441 					|| 0!=((w[57] ^ (w[61] >>> 25)) & (1 << 4))
442 					|| 0!=((w[41] ^ (w[45] >>> 25)) & (1 << 3))
443 					|| 0!=((w[41] ^ (w[45] >>> 25)) & (1 << 4)))
444 				mask &= ~DV_II_53_0_bit;
445 		if ((mask & DV_II_54_0_bit) != 0)
446 			if (0 != ((w[58] ^ (w[62] >>> 25)) & (1 << 4))
447 					|| 0 != ((w[42] ^ (w[46] >>> 25)) & (1 << 3))
448 					|| 0 != ((w[42] ^ (w[46] >>> 25)) & (1 << 4)))
449 				mask &= ~DV_II_54_0_bit;
450 		if ((mask & DV_II_55_0_bit) != 0)
451 			if (0 != ((w[59] ^ (w[63] >>> 25)) & (1 << 4))
452 					|| 0 != ((w[57] ^ (w[59] >>> 25)) & (1 << 4))
453 					|| 0 != ((w[43] ^ (w[47] >>> 25)) & (1 << 3))
454 					|| 0 != ((w[43] ^ (w[47] >>> 25)) & (1 << 4)))
455 				mask &= ~DV_II_55_0_bit;
456 		if ((mask & DV_II_56_0_bit) != 0)
457 			if (0 != ((w[60] ^ (w[64] >>> 25)) & (1 << 4))
458 					|| 0 != ((w[44] ^ (w[48] >>> 25)) & (1 << 3))
459 					|| 0 != ((w[44] ^ (w[48] >>> 25)) & (1 << 4)))
460 				mask &= ~DV_II_56_0_bit;
461 		return mask;
462 	}
463 
464 	private UbcCheck() {
465 	}
466 
467 	static final class DvInfo {
468 		final int testt;
469 		final int maskb;
470 		final int[] dm;
471 
472 		@SuppressWarnings("unused")
473 		DvInfo(int dvType, int dvK, int dvB, int testt, int maskb, int[] dm) {
474 			this.testt = testt;
475 			this.maskb = maskb;
476 			this.dm = dm;
477 
478 			// Only states 58 and 65 are saved.
479 			if (testt != 58 && testt != 65) {
480 				throw new IllegalArgumentException();
481 			}
482 		}
483 	}
484 
485 	static final DvInfo[] DV = new DvInfo[] {
486 			new DvInfo(1, 43, 0, 58, 0, new int[] { 0x08000000, 0x9800000c,
487 					0xd8000010, 0x08000010, 0xb8000010, 0x98000000, 0x60000000,
488 					0x00000008, 0xc0000000, 0x90000014, 0x10000010, 0xb8000014,
489 					0x28000000, 0x20000010, 0x48000000, 0x08000018, 0x60000000,
490 					0x90000010, 0xf0000010, 0x90000008, 0xc0000000, 0x90000010,
491 					0xf0000010, 0xb0000008, 0x40000000, 0x90000000, 0xf0000010,
492 					0x90000018, 0x60000000, 0x90000010, 0x90000010, 0x90000000,
493 					0x80000000, 0x00000010, 0xa0000000, 0x20000000, 0xa0000000,
494 					0x20000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
495 					0x20000000, 0x00000010, 0xa0000000, 0x00000000, 0x20000000,
496 					0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
497 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
498 					0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
499 					0x40000040, 0x40000002, 0x80000004, 0x80000080, 0x80000006,
500 					0x00000049, 0x00000103, 0x80000009, 0x80000012, 0x80000202,
501 					0x00000018, 0x00000164, 0x00000408, 0x800000e6, 0x8000004c,
502 					0x00000803, 0x80000161, 0x80000599 }),
503 			new DvInfo(1, 44, 0, 58, 1, new int[] { 0xb4000008, 0x08000000,
504 					0x9800000c, 0xd8000010, 0x08000010, 0xb8000010, 0x98000000,
505 					0x60000000, 0x00000008, 0xc0000000, 0x90000014, 0x10000010,
506 					0xb8000014, 0x28000000, 0x20000010, 0x48000000, 0x08000018,
507 					0x60000000, 0x90000010, 0xf0000010, 0x90000008, 0xc0000000,
508 					0x90000010, 0xf0000010, 0xb0000008, 0x40000000, 0x90000000,
509 					0xf0000010, 0x90000018, 0x60000000, 0x90000010, 0x90000010,
510 					0x90000000, 0x80000000, 0x00000010, 0xa0000000, 0x20000000,
511 					0xa0000000, 0x20000010, 0x00000000, 0x20000010, 0x20000000,
512 					0x00000010, 0x20000000, 0x00000010, 0xa0000000, 0x00000000,
513 					0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
514 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
515 					0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
516 					0x40000002, 0x40000040, 0x40000002, 0x80000004, 0x80000080,
517 					0x80000006, 0x00000049, 0x00000103, 0x80000009, 0x80000012,
518 					0x80000202, 0x00000018, 0x00000164, 0x00000408, 0x800000e6,
519 					0x8000004c, 0x00000803, 0x80000161 }),
520 			new DvInfo(1, 45, 0, 58, 2, new int[] { 0xf4000014, 0xb4000008,
521 					0x08000000, 0x9800000c, 0xd8000010, 0x08000010, 0xb8000010,
522 					0x98000000, 0x60000000, 0x00000008, 0xc0000000, 0x90000014,
523 					0x10000010, 0xb8000014, 0x28000000, 0x20000010, 0x48000000,
524 					0x08000018, 0x60000000, 0x90000010, 0xf0000010, 0x90000008,
525 					0xc0000000, 0x90000010, 0xf0000010, 0xb0000008, 0x40000000,
526 					0x90000000, 0xf0000010, 0x90000018, 0x60000000, 0x90000010,
527 					0x90000010, 0x90000000, 0x80000000, 0x00000010, 0xa0000000,
528 					0x20000000, 0xa0000000, 0x20000010, 0x00000000, 0x20000010,
529 					0x20000000, 0x00000010, 0x20000000, 0x00000010, 0xa0000000,
530 					0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
531 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
532 					0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
533 					0x00000001, 0x40000002, 0x40000040, 0x40000002, 0x80000004,
534 					0x80000080, 0x80000006, 0x00000049, 0x00000103, 0x80000009,
535 					0x80000012, 0x80000202, 0x00000018, 0x00000164, 0x00000408,
536 					0x800000e6, 0x8000004c, 0x00000803 }),
537 			new DvInfo(1, 46, 0, 58, 3, new int[] { 0x2c000010, 0xf4000014,
538 					0xb4000008, 0x08000000, 0x9800000c, 0xd8000010, 0x08000010,
539 					0xb8000010, 0x98000000, 0x60000000, 0x00000008, 0xc0000000,
540 					0x90000014, 0x10000010, 0xb8000014, 0x28000000, 0x20000010,
541 					0x48000000, 0x08000018, 0x60000000, 0x90000010, 0xf0000010,
542 					0x90000008, 0xc0000000, 0x90000010, 0xf0000010, 0xb0000008,
543 					0x40000000, 0x90000000, 0xf0000010, 0x90000018, 0x60000000,
544 					0x90000010, 0x90000010, 0x90000000, 0x80000000, 0x00000010,
545 					0xa0000000, 0x20000000, 0xa0000000, 0x20000010, 0x00000000,
546 					0x20000010, 0x20000000, 0x00000010, 0x20000000, 0x00000010,
547 					0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
548 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
549 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
550 					0x00000020, 0x00000001, 0x40000002, 0x40000040, 0x40000002,
551 					0x80000004, 0x80000080, 0x80000006, 0x00000049, 0x00000103,
552 					0x80000009, 0x80000012, 0x80000202, 0x00000018, 0x00000164,
553 					0x00000408, 0x800000e6, 0x8000004c }),
554 			new DvInfo(1, 46, 2, 58, 4, new int[] { 0xb0000040, 0xd0000053,
555 					0xd0000022, 0x20000000, 0x60000032, 0x60000043, 0x20000040,
556 					0xe0000042, 0x60000002, 0x80000001, 0x00000020, 0x00000003,
557 					0x40000052, 0x40000040, 0xe0000052, 0xa0000000, 0x80000040,
558 					0x20000001, 0x20000060, 0x80000001, 0x40000042, 0xc0000043,
559 					0x40000022, 0x00000003, 0x40000042, 0xc0000043, 0xc0000022,
560 					0x00000001, 0x40000002, 0xc0000043, 0x40000062, 0x80000001,
561 					0x40000042, 0x40000042, 0x40000002, 0x00000002, 0x00000040,
562 					0x80000002, 0x80000000, 0x80000002, 0x80000040, 0x00000000,
563 					0x80000040, 0x80000000, 0x00000040, 0x80000000, 0x00000040,
564 					0x80000002, 0x00000000, 0x80000000, 0x80000000, 0x00000000,
565 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
566 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
567 					0x00000080, 0x00000004, 0x00000009, 0x00000101, 0x00000009,
568 					0x00000012, 0x00000202, 0x0000001a, 0x00000124, 0x0000040c,
569 					0x00000026, 0x0000004a, 0x0000080a, 0x00000060, 0x00000590,
570 					0x00001020, 0x0000039a, 0x00000132 }),
571 			new DvInfo(1, 47, 0, 58, 5, new int[] { 0xc8000010, 0x2c000010,
572 					0xf4000014, 0xb4000008, 0x08000000, 0x9800000c, 0xd8000010,
573 					0x08000010, 0xb8000010, 0x98000000, 0x60000000, 0x00000008,
574 					0xc0000000, 0x90000014, 0x10000010, 0xb8000014, 0x28000000,
575 					0x20000010, 0x48000000, 0x08000018, 0x60000000, 0x90000010,
576 					0xf0000010, 0x90000008, 0xc0000000, 0x90000010, 0xf0000010,
577 					0xb0000008, 0x40000000, 0x90000000, 0xf0000010, 0x90000018,
578 					0x60000000, 0x90000010, 0x90000010, 0x90000000, 0x80000000,
579 					0x00000010, 0xa0000000, 0x20000000, 0xa0000000, 0x20000010,
580 					0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x20000000,
581 					0x00000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
582 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
583 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
584 					0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000040,
585 					0x40000002, 0x80000004, 0x80000080, 0x80000006, 0x00000049,
586 					0x00000103, 0x80000009, 0x80000012, 0x80000202, 0x00000018,
587 					0x00000164, 0x00000408, 0x800000e6 }),
588 			new DvInfo(1, 47, 2, 58, 6, new int[] { 0x20000043, 0xb0000040,
589 					0xd0000053, 0xd0000022, 0x20000000, 0x60000032, 0x60000043,
590 					0x20000040, 0xe0000042, 0x60000002, 0x80000001, 0x00000020,
591 					0x00000003, 0x40000052, 0x40000040, 0xe0000052, 0xa0000000,
592 					0x80000040, 0x20000001, 0x20000060, 0x80000001, 0x40000042,
593 					0xc0000043, 0x40000022, 0x00000003, 0x40000042, 0xc0000043,
594 					0xc0000022, 0x00000001, 0x40000002, 0xc0000043, 0x40000062,
595 					0x80000001, 0x40000042, 0x40000042, 0x40000002, 0x00000002,
596 					0x00000040, 0x80000002, 0x80000000, 0x80000002, 0x80000040,
597 					0x00000000, 0x80000040, 0x80000000, 0x00000040, 0x80000000,
598 					0x00000040, 0x80000002, 0x00000000, 0x80000000, 0x80000000,
599 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
600 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
601 					0x00000004, 0x00000080, 0x00000004, 0x00000009, 0x00000101,
602 					0x00000009, 0x00000012, 0x00000202, 0x0000001a, 0x00000124,
603 					0x0000040c, 0x00000026, 0x0000004a, 0x0000080a, 0x00000060,
604 					0x00000590, 0x00001020, 0x0000039a }),
605 			new DvInfo(1, 48, 0, 58, 7, new int[] { 0xb800000a, 0xc8000010,
606 					0x2c000010, 0xf4000014, 0xb4000008, 0x08000000, 0x9800000c,
607 					0xd8000010, 0x08000010, 0xb8000010, 0x98000000, 0x60000000,
608 					0x00000008, 0xc0000000, 0x90000014, 0x10000010, 0xb8000014,
609 					0x28000000, 0x20000010, 0x48000000, 0x08000018, 0x60000000,
610 					0x90000010, 0xf0000010, 0x90000008, 0xc0000000, 0x90000010,
611 					0xf0000010, 0xb0000008, 0x40000000, 0x90000000, 0xf0000010,
612 					0x90000018, 0x60000000, 0x90000010, 0x90000010, 0x90000000,
613 					0x80000000, 0x00000010, 0xa0000000, 0x20000000, 0xa0000000,
614 					0x20000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
615 					0x20000000, 0x00000010, 0xa0000000, 0x00000000, 0x20000000,
616 					0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
617 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
618 					0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
619 					0x40000040, 0x40000002, 0x80000004, 0x80000080, 0x80000006,
620 					0x00000049, 0x00000103, 0x80000009, 0x80000012, 0x80000202,
621 					0x00000018, 0x00000164, 0x00000408 }),
622 			new DvInfo(1, 48, 2, 58, 8, new int[] { 0xe000002a, 0x20000043,
623 					0xb0000040, 0xd0000053, 0xd0000022, 0x20000000, 0x60000032,
624 					0x60000043, 0x20000040, 0xe0000042, 0x60000002, 0x80000001,
625 					0x00000020, 0x00000003, 0x40000052, 0x40000040, 0xe0000052,
626 					0xa0000000, 0x80000040, 0x20000001, 0x20000060, 0x80000001,
627 					0x40000042, 0xc0000043, 0x40000022, 0x00000003, 0x40000042,
628 					0xc0000043, 0xc0000022, 0x00000001, 0x40000002, 0xc0000043,
629 					0x40000062, 0x80000001, 0x40000042, 0x40000042, 0x40000002,
630 					0x00000002, 0x00000040, 0x80000002, 0x80000000, 0x80000002,
631 					0x80000040, 0x00000000, 0x80000040, 0x80000000, 0x00000040,
632 					0x80000000, 0x00000040, 0x80000002, 0x00000000, 0x80000000,
633 					0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
634 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
635 					0x00000000, 0x00000004, 0x00000080, 0x00000004, 0x00000009,
636 					0x00000101, 0x00000009, 0x00000012, 0x00000202, 0x0000001a,
637 					0x00000124, 0x0000040c, 0x00000026, 0x0000004a, 0x0000080a,
638 					0x00000060, 0x00000590, 0x00001020 }),
639 			new DvInfo(1, 49, 0, 58, 9, new int[] { 0x18000000, 0xb800000a,
640 					0xc8000010, 0x2c000010, 0xf4000014, 0xb4000008, 0x08000000,
641 					0x9800000c, 0xd8000010, 0x08000010, 0xb8000010, 0x98000000,
642 					0x60000000, 0x00000008, 0xc0000000, 0x90000014, 0x10000010,
643 					0xb8000014, 0x28000000, 0x20000010, 0x48000000, 0x08000018,
644 					0x60000000, 0x90000010, 0xf0000010, 0x90000008, 0xc0000000,
645 					0x90000010, 0xf0000010, 0xb0000008, 0x40000000, 0x90000000,
646 					0xf0000010, 0x90000018, 0x60000000, 0x90000010, 0x90000010,
647 					0x90000000, 0x80000000, 0x00000010, 0xa0000000, 0x20000000,
648 					0xa0000000, 0x20000010, 0x00000000, 0x20000010, 0x20000000,
649 					0x00000010, 0x20000000, 0x00000010, 0xa0000000, 0x00000000,
650 					0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
651 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
652 					0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
653 					0x40000002, 0x40000040, 0x40000002, 0x80000004, 0x80000080,
654 					0x80000006, 0x00000049, 0x00000103, 0x80000009, 0x80000012,
655 					0x80000202, 0x00000018, 0x00000164 }),
656 			new DvInfo(1, 49, 2, 58, 10, new int[] { 0x60000000, 0xe000002a,
657 					0x20000043, 0xb0000040, 0xd0000053, 0xd0000022, 0x20000000,
658 					0x60000032, 0x60000043, 0x20000040, 0xe0000042, 0x60000002,
659 					0x80000001, 0x00000020, 0x00000003, 0x40000052, 0x40000040,
660 					0xe0000052, 0xa0000000, 0x80000040, 0x20000001, 0x20000060,
661 					0x80000001, 0x40000042, 0xc0000043, 0x40000022, 0x00000003,
662 					0x40000042, 0xc0000043, 0xc0000022, 0x00000001, 0x40000002,
663 					0xc0000043, 0x40000062, 0x80000001, 0x40000042, 0x40000042,
664 					0x40000002, 0x00000002, 0x00000040, 0x80000002, 0x80000000,
665 					0x80000002, 0x80000040, 0x00000000, 0x80000040, 0x80000000,
666 					0x00000040, 0x80000000, 0x00000040, 0x80000002, 0x00000000,
667 					0x80000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000,
668 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
669 					0x00000000, 0x00000000, 0x00000004, 0x00000080, 0x00000004,
670 					0x00000009, 0x00000101, 0x00000009, 0x00000012, 0x00000202,
671 					0x0000001a, 0x00000124, 0x0000040c, 0x00000026, 0x0000004a,
672 					0x0000080a, 0x00000060, 0x00000590 }),
673 			new DvInfo(1, 50, 0, 65, 11, new int[] { 0x0800000c, 0x18000000,
674 					0xb800000a, 0xc8000010, 0x2c000010, 0xf4000014, 0xb4000008,
675 					0x08000000, 0x9800000c, 0xd8000010, 0x08000010, 0xb8000010,
676 					0x98000000, 0x60000000, 0x00000008, 0xc0000000, 0x90000014,
677 					0x10000010, 0xb8000014, 0x28000000, 0x20000010, 0x48000000,
678 					0x08000018, 0x60000000, 0x90000010, 0xf0000010, 0x90000008,
679 					0xc0000000, 0x90000010, 0xf0000010, 0xb0000008, 0x40000000,
680 					0x90000000, 0xf0000010, 0x90000018, 0x60000000, 0x90000010,
681 					0x90000010, 0x90000000, 0x80000000, 0x00000010, 0xa0000000,
682 					0x20000000, 0xa0000000, 0x20000010, 0x00000000, 0x20000010,
683 					0x20000000, 0x00000010, 0x20000000, 0x00000010, 0xa0000000,
684 					0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
685 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
686 					0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
687 					0x00000001, 0x40000002, 0x40000040, 0x40000002, 0x80000004,
688 					0x80000080, 0x80000006, 0x00000049, 0x00000103, 0x80000009,
689 					0x80000012, 0x80000202, 0x00000018 }),
690 			new DvInfo(1, 50, 2, 65, 12, new int[] { 0x20000030, 0x60000000,
691 					0xe000002a, 0x20000043, 0xb0000040, 0xd0000053, 0xd0000022,
692 					0x20000000, 0x60000032, 0x60000043, 0x20000040, 0xe0000042,
693 					0x60000002, 0x80000001, 0x00000020, 0x00000003, 0x40000052,
694 					0x40000040, 0xe0000052, 0xa0000000, 0x80000040, 0x20000001,
695 					0x20000060, 0x80000001, 0x40000042, 0xc0000043, 0x40000022,
696 					0x00000003, 0x40000042, 0xc0000043, 0xc0000022, 0x00000001,
697 					0x40000002, 0xc0000043, 0x40000062, 0x80000001, 0x40000042,
698 					0x40000042, 0x40000002, 0x00000002, 0x00000040, 0x80000002,
699 					0x80000000, 0x80000002, 0x80000040, 0x00000000, 0x80000040,
700 					0x80000000, 0x00000040, 0x80000000, 0x00000040, 0x80000002,
701 					0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000,
702 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
703 					0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000080,
704 					0x00000004, 0x00000009, 0x00000101, 0x00000009, 0x00000012,
705 					0x00000202, 0x0000001a, 0x00000124, 0x0000040c, 0x00000026,
706 					0x0000004a, 0x0000080a, 0x00000060 }),
707 			new DvInfo(1, 51, 0, 65, 13, new int[] { 0xe8000000, 0x0800000c,
708 					0x18000000, 0xb800000a, 0xc8000010, 0x2c000010, 0xf4000014,
709 					0xb4000008, 0x08000000, 0x9800000c, 0xd8000010, 0x08000010,
710 					0xb8000010, 0x98000000, 0x60000000, 0x00000008, 0xc0000000,
711 					0x90000014, 0x10000010, 0xb8000014, 0x28000000, 0x20000010,
712 					0x48000000, 0x08000018, 0x60000000, 0x90000010, 0xf0000010,
713 					0x90000008, 0xc0000000, 0x90000010, 0xf0000010, 0xb0000008,
714 					0x40000000, 0x90000000, 0xf0000010, 0x90000018, 0x60000000,
715 					0x90000010, 0x90000010, 0x90000000, 0x80000000, 0x00000010,
716 					0xa0000000, 0x20000000, 0xa0000000, 0x20000010, 0x00000000,
717 					0x20000010, 0x20000000, 0x00000010, 0x20000000, 0x00000010,
718 					0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
719 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
720 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
721 					0x00000020, 0x00000001, 0x40000002, 0x40000040, 0x40000002,
722 					0x80000004, 0x80000080, 0x80000006, 0x00000049, 0x00000103,
723 					0x80000009, 0x80000012, 0x80000202 }),
724 			new DvInfo(1, 51, 2, 65, 14, new int[] { 0xa0000003, 0x20000030,
725 					0x60000000, 0xe000002a, 0x20000043, 0xb0000040, 0xd0000053,
726 					0xd0000022, 0x20000000, 0x60000032, 0x60000043, 0x20000040,
727 					0xe0000042, 0x60000002, 0x80000001, 0x00000020, 0x00000003,
728 					0x40000052, 0x40000040, 0xe0000052, 0xa0000000, 0x80000040,
729 					0x20000001, 0x20000060, 0x80000001, 0x40000042, 0xc0000043,
730 					0x40000022, 0x00000003, 0x40000042, 0xc0000043, 0xc0000022,
731 					0x00000001, 0x40000002, 0xc0000043, 0x40000062, 0x80000001,
732 					0x40000042, 0x40000042, 0x40000002, 0x00000002, 0x00000040,
733 					0x80000002, 0x80000000, 0x80000002, 0x80000040, 0x00000000,
734 					0x80000040, 0x80000000, 0x00000040, 0x80000000, 0x00000040,
735 					0x80000002, 0x00000000, 0x80000000, 0x80000000, 0x00000000,
736 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
737 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
738 					0x00000080, 0x00000004, 0x00000009, 0x00000101, 0x00000009,
739 					0x00000012, 0x00000202, 0x0000001a, 0x00000124, 0x0000040c,
740 					0x00000026, 0x0000004a, 0x0000080a }),
741 			new DvInfo(1, 52, 0, 65, 15, new int[] { 0x04000010, 0xe8000000,
742 					0x0800000c, 0x18000000, 0xb800000a, 0xc8000010, 0x2c000010,
743 					0xf4000014, 0xb4000008, 0x08000000, 0x9800000c, 0xd8000010,
744 					0x08000010, 0xb8000010, 0x98000000, 0x60000000, 0x00000008,
745 					0xc0000000, 0x90000014, 0x10000010, 0xb8000014, 0x28000000,
746 					0x20000010, 0x48000000, 0x08000018, 0x60000000, 0x90000010,
747 					0xf0000010, 0x90000008, 0xc0000000, 0x90000010, 0xf0000010,
748 					0xb0000008, 0x40000000, 0x90000000, 0xf0000010, 0x90000018,
749 					0x60000000, 0x90000010, 0x90000010, 0x90000000, 0x80000000,
750 					0x00000010, 0xa0000000, 0x20000000, 0xa0000000, 0x20000010,
751 					0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x20000000,
752 					0x00000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
753 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
754 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
755 					0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000040,
756 					0x40000002, 0x80000004, 0x80000080, 0x80000006, 0x00000049,
757 					0x00000103, 0x80000009, 0x80000012 }),
758 			new DvInfo(2, 45, 0, 58, 16, new int[] { 0xec000014, 0x0c000002,
759 					0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010,
760 					0x0000000c, 0xb8000010, 0x08000018, 0x78000010, 0x08000014,
761 					0x70000010, 0xb800001c, 0xe8000000, 0xb0000004, 0x58000010,
762 					0xb000000c, 0x48000000, 0xb0000000, 0xb8000010, 0x98000010,
763 					0xa0000000, 0x00000000, 0x00000000, 0x20000000, 0x80000000,
764 					0x00000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
765 					0x60000000, 0x00000018, 0xe0000000, 0x90000000, 0x30000010,
766 					0xb0000000, 0x20000000, 0x20000000, 0xa0000000, 0x00000010,
767 					0x80000000, 0x20000000, 0x20000000, 0x20000000, 0x80000000,
768 					0x00000010, 0x00000000, 0x20000010, 0xa0000000, 0x00000000,
769 					0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
770 					0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
771 					0x00000001, 0x40000002, 0x40000041, 0x40000022, 0x80000005,
772 					0xc0000082, 0xc0000046, 0x4000004b, 0x80000107, 0x00000089,
773 					0x00000014, 0x8000024b, 0x0000011b, 0x8000016d, 0x8000041a,
774 					0x000002e4, 0x80000054, 0x00000967 }),
775 			new DvInfo(2, 46, 0, 58, 17, new int[] { 0x2400001c, 0xec000014,
776 					0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018,
777 					0xb0000010, 0x0000000c, 0xb8000010, 0x08000018, 0x78000010,
778 					0x08000014, 0x70000010, 0xb800001c, 0xe8000000, 0xb0000004,
779 					0x58000010, 0xb000000c, 0x48000000, 0xb0000000, 0xb8000010,
780 					0x98000010, 0xa0000000, 0x00000000, 0x00000000, 0x20000000,
781 					0x80000000, 0x00000010, 0x00000000, 0x20000010, 0x20000000,
782 					0x00000010, 0x60000000, 0x00000018, 0xe0000000, 0x90000000,
783 					0x30000010, 0xb0000000, 0x20000000, 0x20000000, 0xa0000000,
784 					0x00000010, 0x80000000, 0x20000000, 0x20000000, 0x20000000,
785 					0x80000000, 0x00000010, 0x00000000, 0x20000010, 0xa0000000,
786 					0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
787 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
788 					0x00000020, 0x00000001, 0x40000002, 0x40000041, 0x40000022,
789 					0x80000005, 0xc0000082, 0xc0000046, 0x4000004b, 0x80000107,
790 					0x00000089, 0x00000014, 0x8000024b, 0x0000011b, 0x8000016d,
791 					0x8000041a, 0x000002e4, 0x80000054 }),
792 			new DvInfo(2, 46, 2, 58, 18, new int[] { 0x90000070, 0xb0000053,
793 					0x30000008, 0x00000043, 0xd0000072, 0xb0000010, 0xf0000062,
794 					0xc0000042, 0x00000030, 0xe0000042, 0x20000060, 0xe0000041,
795 					0x20000050, 0xc0000041, 0xe0000072, 0xa0000003, 0xc0000012,
796 					0x60000041, 0xc0000032, 0x20000001, 0xc0000002, 0xe0000042,
797 					0x60000042, 0x80000002, 0x00000000, 0x00000000, 0x80000000,
798 					0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000000,
799 					0x00000040, 0x80000001, 0x00000060, 0x80000003, 0x40000002,
800 					0xc0000040, 0xc0000002, 0x80000000, 0x80000000, 0x80000002,
801 					0x00000040, 0x00000002, 0x80000000, 0x80000000, 0x80000000,
802 					0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000002,
803 					0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000,
804 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
805 					0x00000080, 0x00000004, 0x00000009, 0x00000105, 0x00000089,
806 					0x00000016, 0x0000020b, 0x0000011b, 0x0000012d, 0x0000041e,
807 					0x00000224, 0x00000050, 0x0000092e, 0x0000046c, 0x000005b6,
808 					0x0000106a, 0x00000b90, 0x00000152 }),
809 			new DvInfo(2, 47, 0, 58, 19, new int[] { 0x20000010, 0x2400001c,
810 					0xec000014, 0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004,
811 					0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010, 0x08000018,
812 					0x78000010, 0x08000014, 0x70000010, 0xb800001c, 0xe8000000,
813 					0xb0000004, 0x58000010, 0xb000000c, 0x48000000, 0xb0000000,
814 					0xb8000010, 0x98000010, 0xa0000000, 0x00000000, 0x00000000,
815 					0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
816 					0x20000000, 0x00000010, 0x60000000, 0x00000018, 0xe0000000,
817 					0x90000000, 0x30000010, 0xb0000000, 0x20000000, 0x20000000,
818 					0xa0000000, 0x00000010, 0x80000000, 0x20000000, 0x20000000,
819 					0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
820 					0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
821 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
822 					0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000041,
823 					0x40000022, 0x80000005, 0xc0000082, 0xc0000046, 0x4000004b,
824 					0x80000107, 0x00000089, 0x00000014, 0x8000024b, 0x0000011b,
825 					0x8000016d, 0x8000041a, 0x000002e4 }),
826 			new DvInfo(2, 48, 0, 58, 20, new int[] { 0xbc00001a, 0x20000010,
827 					0x2400001c, 0xec000014, 0x0c000002, 0xc0000010, 0xb400001c,
828 					0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010,
829 					0x08000018, 0x78000010, 0x08000014, 0x70000010, 0xb800001c,
830 					0xe8000000, 0xb0000004, 0x58000010, 0xb000000c, 0x48000000,
831 					0xb0000000, 0xb8000010, 0x98000010, 0xa0000000, 0x00000000,
832 					0x00000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
833 					0x20000010, 0x20000000, 0x00000010, 0x60000000, 0x00000018,
834 					0xe0000000, 0x90000000, 0x30000010, 0xb0000000, 0x20000000,
835 					0x20000000, 0xa0000000, 0x00000010, 0x80000000, 0x20000000,
836 					0x20000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
837 					0x20000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
838 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
839 					0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
840 					0x40000041, 0x40000022, 0x80000005, 0xc0000082, 0xc0000046,
841 					0x4000004b, 0x80000107, 0x00000089, 0x00000014, 0x8000024b,
842 					0x0000011b, 0x8000016d, 0x8000041a }),
843 			new DvInfo(2, 49, 0, 58, 21, new int[] { 0x3c000004, 0xbc00001a,
844 					0x20000010, 0x2400001c, 0xec000014, 0x0c000002, 0xc0000010,
845 					0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c,
846 					0xb8000010, 0x08000018, 0x78000010, 0x08000014, 0x70000010,
847 					0xb800001c, 0xe8000000, 0xb0000004, 0x58000010, 0xb000000c,
848 					0x48000000, 0xb0000000, 0xb8000010, 0x98000010, 0xa0000000,
849 					0x00000000, 0x00000000, 0x20000000, 0x80000000, 0x00000010,
850 					0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x60000000,
851 					0x00000018, 0xe0000000, 0x90000000, 0x30000010, 0xb0000000,
852 					0x20000000, 0x20000000, 0xa0000000, 0x00000010, 0x80000000,
853 					0x20000000, 0x20000000, 0x20000000, 0x80000000, 0x00000010,
854 					0x00000000, 0x20000010, 0xa0000000, 0x00000000, 0x20000000,
855 					0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
856 					0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
857 					0x40000002, 0x40000041, 0x40000022, 0x80000005, 0xc0000082,
858 					0xc0000046, 0x4000004b, 0x80000107, 0x00000089, 0x00000014,
859 					0x8000024b, 0x0000011b, 0x8000016d }),
860 			new DvInfo(2, 49, 2, 58, 22, new int[] { 0xf0000010, 0xf000006a,
861 					0x80000040, 0x90000070, 0xb0000053, 0x30000008, 0x00000043,
862 					0xd0000072, 0xb0000010, 0xf0000062, 0xc0000042, 0x00000030,
863 					0xe0000042, 0x20000060, 0xe0000041, 0x20000050, 0xc0000041,
864 					0xe0000072, 0xa0000003, 0xc0000012, 0x60000041, 0xc0000032,
865 					0x20000001, 0xc0000002, 0xe0000042, 0x60000042, 0x80000002,
866 					0x00000000, 0x00000000, 0x80000000, 0x00000002, 0x00000040,
867 					0x00000000, 0x80000040, 0x80000000, 0x00000040, 0x80000001,
868 					0x00000060, 0x80000003, 0x40000002, 0xc0000040, 0xc0000002,
869 					0x80000000, 0x80000000, 0x80000002, 0x00000040, 0x00000002,
870 					0x80000000, 0x80000000, 0x80000000, 0x00000002, 0x00000040,
871 					0x00000000, 0x80000040, 0x80000002, 0x00000000, 0x80000000,
872 					0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
873 					0x00000000, 0x00000000, 0x00000004, 0x00000080, 0x00000004,
874 					0x00000009, 0x00000105, 0x00000089, 0x00000016, 0x0000020b,
875 					0x0000011b, 0x0000012d, 0x0000041e, 0x00000224, 0x00000050,
876 					0x0000092e, 0x0000046c, 0x000005b6 }),
877 			new DvInfo(2, 50, 0, 65, 23, new int[] { 0xb400001c, 0x3c000004,
878 					0xbc00001a, 0x20000010, 0x2400001c, 0xec000014, 0x0c000002,
879 					0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010,
880 					0x0000000c, 0xb8000010, 0x08000018, 0x78000010, 0x08000014,
881 					0x70000010, 0xb800001c, 0xe8000000, 0xb0000004, 0x58000010,
882 					0xb000000c, 0x48000000, 0xb0000000, 0xb8000010, 0x98000010,
883 					0xa0000000, 0x00000000, 0x00000000, 0x20000000, 0x80000000,
884 					0x00000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
885 					0x60000000, 0x00000018, 0xe0000000, 0x90000000, 0x30000010,
886 					0xb0000000, 0x20000000, 0x20000000, 0xa0000000, 0x00000010,
887 					0x80000000, 0x20000000, 0x20000000, 0x20000000, 0x80000000,
888 					0x00000010, 0x00000000, 0x20000010, 0xa0000000, 0x00000000,
889 					0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
890 					0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
891 					0x00000001, 0x40000002, 0x40000041, 0x40000022, 0x80000005,
892 					0xc0000082, 0xc0000046, 0x4000004b, 0x80000107, 0x00000089,
893 					0x00000014, 0x8000024b, 0x0000011b }),
894 			new DvInfo(2, 50, 2, 65, 24, new int[] { 0xd0000072, 0xf0000010,
895 					0xf000006a, 0x80000040, 0x90000070, 0xb0000053, 0x30000008,
896 					0x00000043, 0xd0000072, 0xb0000010, 0xf0000062, 0xc0000042,
897 					0x00000030, 0xe0000042, 0x20000060, 0xe0000041, 0x20000050,
898 					0xc0000041, 0xe0000072, 0xa0000003, 0xc0000012, 0x60000041,
899 					0xc0000032, 0x20000001, 0xc0000002, 0xe0000042, 0x60000042,
900 					0x80000002, 0x00000000, 0x00000000, 0x80000000, 0x00000002,
901 					0x00000040, 0x00000000, 0x80000040, 0x80000000, 0x00000040,
902 					0x80000001, 0x00000060, 0x80000003, 0x40000002, 0xc0000040,
903 					0xc0000002, 0x80000000, 0x80000000, 0x80000002, 0x00000040,
904 					0x00000002, 0x80000000, 0x80000000, 0x80000000, 0x00000002,
905 					0x00000040, 0x00000000, 0x80000040, 0x80000002, 0x00000000,
906 					0x80000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000,
907 					0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000080,
908 					0x00000004, 0x00000009, 0x00000105, 0x00000089, 0x00000016,
909 					0x0000020b, 0x0000011b, 0x0000012d, 0x0000041e, 0x00000224,
910 					0x00000050, 0x0000092e, 0x0000046c }),
911 			new DvInfo(2, 51, 0, 65, 25, new int[] { 0xc0000010, 0xb400001c,
912 					0x3c000004, 0xbc00001a, 0x20000010, 0x2400001c, 0xec000014,
913 					0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018,
914 					0xb0000010, 0x0000000c, 0xb8000010, 0x08000018, 0x78000010,
915 					0x08000014, 0x70000010, 0xb800001c, 0xe8000000, 0xb0000004,
916 					0x58000010, 0xb000000c, 0x48000000, 0xb0000000, 0xb8000010,
917 					0x98000010, 0xa0000000, 0x00000000, 0x00000000, 0x20000000,
918 					0x80000000, 0x00000010, 0x00000000, 0x20000010, 0x20000000,
919 					0x00000010, 0x60000000, 0x00000018, 0xe0000000, 0x90000000,
920 					0x30000010, 0xb0000000, 0x20000000, 0x20000000, 0xa0000000,
921 					0x00000010, 0x80000000, 0x20000000, 0x20000000, 0x20000000,
922 					0x80000000, 0x00000010, 0x00000000, 0x20000010, 0xa0000000,
923 					0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
924 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
925 					0x00000020, 0x00000001, 0x40000002, 0x40000041, 0x40000022,
926 					0x80000005, 0xc0000082, 0xc0000046, 0x4000004b, 0x80000107,
927 					0x00000089, 0x00000014, 0x8000024b }),
928 			new DvInfo(2, 51, 2, 65, 26, new int[] { 0x00000043, 0xd0000072,
929 					0xf0000010, 0xf000006a, 0x80000040, 0x90000070, 0xb0000053,
930 					0x30000008, 0x00000043, 0xd0000072, 0xb0000010, 0xf0000062,
931 					0xc0000042, 0x00000030, 0xe0000042, 0x20000060, 0xe0000041,
932 					0x20000050, 0xc0000041, 0xe0000072, 0xa0000003, 0xc0000012,
933 					0x60000041, 0xc0000032, 0x20000001, 0xc0000002, 0xe0000042,
934 					0x60000042, 0x80000002, 0x00000000, 0x00000000, 0x80000000,
935 					0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000000,
936 					0x00000040, 0x80000001, 0x00000060, 0x80000003, 0x40000002,
937 					0xc0000040, 0xc0000002, 0x80000000, 0x80000000, 0x80000002,
938 					0x00000040, 0x00000002, 0x80000000, 0x80000000, 0x80000000,
939 					0x00000002, 0x00000040, 0x00000000, 0x80000040, 0x80000002,
940 					0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000,
941 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
942 					0x00000080, 0x00000004, 0x00000009, 0x00000105, 0x00000089,
943 					0x00000016, 0x0000020b, 0x0000011b, 0x0000012d, 0x0000041e,
944 					0x00000224, 0x00000050, 0x0000092e }),
945 			new DvInfo(2, 52, 0, 65, 27, new int[] { 0x0c000002, 0xc0000010,
946 					0xb400001c, 0x3c000004, 0xbc00001a, 0x20000010, 0x2400001c,
947 					0xec000014, 0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004,
948 					0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010, 0x08000018,
949 					0x78000010, 0x08000014, 0x70000010, 0xb800001c, 0xe8000000,
950 					0xb0000004, 0x58000010, 0xb000000c, 0x48000000, 0xb0000000,
951 					0xb8000010, 0x98000010, 0xa0000000, 0x00000000, 0x00000000,
952 					0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
953 					0x20000000, 0x00000010, 0x60000000, 0x00000018, 0xe0000000,
954 					0x90000000, 0x30000010, 0xb0000000, 0x20000000, 0x20000000,
955 					0xa0000000, 0x00000010, 0x80000000, 0x20000000, 0x20000000,
956 					0x20000000, 0x80000000, 0x00000010, 0x00000000, 0x20000010,
957 					0xa0000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000,
958 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
959 					0x00000001, 0x00000020, 0x00000001, 0x40000002, 0x40000041,
960 					0x40000022, 0x80000005, 0xc0000082, 0xc0000046, 0x4000004b,
961 					0x80000107, 0x00000089, 0x00000014 }),
962 			new DvInfo(2, 53, 0, 65, 28, new int[] { 0xcc000014, 0x0c000002,
963 					0xc0000010, 0xb400001c, 0x3c000004, 0xbc00001a, 0x20000010,
964 					0x2400001c, 0xec000014, 0x0c000002, 0xc0000010, 0xb400001c,
965 					0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c, 0xb8000010,
966 					0x08000018, 0x78000010, 0x08000014, 0x70000010, 0xb800001c,
967 					0xe8000000, 0xb0000004, 0x58000010, 0xb000000c, 0x48000000,
968 					0xb0000000, 0xb8000010, 0x98000010, 0xa0000000, 0x00000000,
969 					0x00000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
970 					0x20000010, 0x20000000, 0x00000010, 0x60000000, 0x00000018,
971 					0xe0000000, 0x90000000, 0x30000010, 0xb0000000, 0x20000000,
972 					0x20000000, 0xa0000000, 0x00000010, 0x80000000, 0x20000000,
973 					0x20000000, 0x20000000, 0x80000000, 0x00000010, 0x00000000,
974 					0x20000010, 0xa0000000, 0x00000000, 0x20000000, 0x20000000,
975 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
976 					0x00000000, 0x00000001, 0x00000020, 0x00000001, 0x40000002,
977 					0x40000041, 0x40000022, 0x80000005, 0xc0000082, 0xc0000046,
978 					0x4000004b, 0x80000107, 0x00000089 }),
979 			new DvInfo(2, 54, 0, 65, 29, new int[] { 0x0400001c, 0xcc000014,
980 					0x0c000002, 0xc0000010, 0xb400001c, 0x3c000004, 0xbc00001a,
981 					0x20000010, 0x2400001c, 0xec000014, 0x0c000002, 0xc0000010,
982 					0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010, 0x0000000c,
983 					0xb8000010, 0x08000018, 0x78000010, 0x08000014, 0x70000010,
984 					0xb800001c, 0xe8000000, 0xb0000004, 0x58000010, 0xb000000c,
985 					0x48000000, 0xb0000000, 0xb8000010, 0x98000010, 0xa0000000,
986 					0x00000000, 0x00000000, 0x20000000, 0x80000000, 0x00000010,
987 					0x00000000, 0x20000010, 0x20000000, 0x00000010, 0x60000000,
988 					0x00000018, 0xe0000000, 0x90000000, 0x30000010, 0xb0000000,
989 					0x20000000, 0x20000000, 0xa0000000, 0x00000010, 0x80000000,
990 					0x20000000, 0x20000000, 0x20000000, 0x80000000, 0x00000010,
991 					0x00000000, 0x20000010, 0xa0000000, 0x00000000, 0x20000000,
992 					0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
993 					0x00000000, 0x00000000, 0x00000001, 0x00000020, 0x00000001,
994 					0x40000002, 0x40000041, 0x40000022, 0x80000005, 0xc0000082,
995 					0xc0000046, 0x4000004b, 0x80000107 }),
996 			new DvInfo(2, 55, 0, 65, 30, new int[] { 0x00000010, 0x0400001c,
997 					0xcc000014, 0x0c000002, 0xc0000010, 0xb400001c, 0x3c000004,
998 					0xbc00001a, 0x20000010, 0x2400001c, 0xec000014, 0x0c000002,
999 					0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018, 0xb0000010,
1000 					0x0000000c, 0xb8000010, 0x08000018, 0x78000010, 0x08000014,
1001 					0x70000010, 0xb800001c, 0xe8000000, 0xb0000004, 0x58000010,
1002 					0xb000000c, 0x48000000, 0xb0000000, 0xb8000010, 0x98000010,
1003 					0xa0000000, 0x00000000, 0x00000000, 0x20000000, 0x80000000,
1004 					0x00000010, 0x00000000, 0x20000010, 0x20000000, 0x00000010,
1005 					0x60000000, 0x00000018, 0xe0000000, 0x90000000, 0x30000010,
1006 					0xb0000000, 0x20000000, 0x20000000, 0xa0000000, 0x00000010,
1007 					0x80000000, 0x20000000, 0x20000000, 0x20000000, 0x80000000,
1008 					0x00000010, 0x00000000, 0x20000010, 0xa0000000, 0x00000000,
1009 					0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000,
1010 					0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000020,
1011 					0x00000001, 0x40000002, 0x40000041, 0x40000022, 0x80000005,
1012 					0xc0000082, 0xc0000046, 0x4000004b }),
1013 			new DvInfo(2, 56, 0, 65, 31, new int[] { 0x2600001a, 0x00000010,
1014 					0x0400001c, 0xcc000014, 0x0c000002, 0xc0000010, 0xb400001c,
1015 					0x3c000004, 0xbc00001a, 0x20000010, 0x2400001c, 0xec000014,
1016 					0x0c000002, 0xc0000010, 0xb400001c, 0x2c000004, 0xbc000018,
1017 					0xb0000010, 0x0000000c, 0xb8000010, 0x08000018, 0x78000010,
1018 					0x08000014, 0x70000010, 0xb800001c, 0xe8000000, 0xb0000004,
1019 					0x58000010, 0xb000000c, 0x48000000, 0xb0000000, 0xb8000010,
1020 					0x98000010, 0xa0000000, 0x00000000, 0x00000000, 0x20000000,
1021 					0x80000000, 0x00000010, 0x00000000, 0x20000010, 0x20000000,
1022 					0x00000010, 0x60000000, 0x00000018, 0xe0000000, 0x90000000,
1023 					0x30000010, 0xb0000000, 0x20000000, 0x20000000, 0xa0000000,
1024 					0x00000010, 0x80000000, 0x20000000, 0x20000000, 0x20000000,
1025 					0x80000000, 0x00000010, 0x00000000, 0x20000010, 0xa0000000,
1026 					0x00000000, 0x20000000, 0x20000000, 0x00000000, 0x00000000,
1027 					0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
1028 					0x00000020, 0x00000001, 0x40000002, 0x40000041, 0x40000022,
1029 					0x80000005, 0xc0000082, 0xc0000046 }), };
1030 
1031 	static {
1032 		// Assert the DV array is indexed by maskb; that is DV block using
1033 		// maskb = N must be at array index N.
1034 		for (int i = 0; i < DV.length; i++) {
1035 			if (i != DV[i].maskb) {
1036 				throw new IllegalStateException("must be indexed by maskb"); //$NON-NLS-1$
1037 			}
1038 		}
1039 	}
1040 }