1 /*
2 * This file is part of RawTherapee.
3 *
4 * Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
5 *
6 * RawTherapee is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * RawTherapee is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * These median implementations from Flössie and Ingo Weyrich are inspired by this work:
20 *
21 * http://ndevilla.free.fr/median/median.pdf
22 * http://pages.ripco.net/~jgamble/nw.html
23 * https://github.com/hoytech/Algorithm-Networksort-Chooser
24 *
25 * Instead of using the PIX_SORT and PIX_SWAP macros we use std::min() and std::max()
26 * because it turned out that it generates much faster (branch free) code on machines which support SSE
27 *
28 */
29
30 #pragma once
31
32 #include <array>
33 #include <algorithm>
34
35 #include "opthelper.h"
36
37 #if defined __GNUC__ && __GNUC__>=6 && defined __SSE2__
38 #pragma GCC diagnostic ignored "-Wignored-attributes"
39 #endif
40
41 template<typename T, std::size_t N>
median(std::array<T,N> array)42 inline T median(std::array<T, N> array)
43 {
44 const typename std::array<T, N>::iterator middle = array.begin() + N / 2;
45 std::nth_element(array.begin(), middle, array.end());
46
47 return
48 (N % 2)
49 ? *middle
50 : ((*middle + *std::max_element(array.begin(), middle)) / static_cast<T>(2));
51 }
52
53 template<typename T>
median(std::array<T,3> array)54 inline T median(std::array<T, 3> array)
55 {
56 return std::max(std::min(array[0], array[1]), std::min(array[2], std::max(array[0], array[1])));
57 }
58
59 #ifdef __SSE2__
60 template<>
median(std::array<vfloat,3> array)61 inline vfloat median(std::array<vfloat, 3> array)
62 {
63 return vmaxf(vminf(array[0], array[1]), vminf(array[2], vmaxf(array[0], array[1])));
64 }
65 #endif
66
67 template<typename T>
median(std::array<T,5> array)68 inline T median(std::array<T, 5> array)
69 {
70 T tmp = std::min(array[0], array[1]);
71 array[1] = std::max(array[0], array[1]);
72 array[0] = tmp;
73 tmp = std::min(array[3], array[4]);
74 array[4] = std::max(array[3], array[4]);
75 array[3] = std::max(array[0], tmp);
76 array[1] = std::min(array[1], array[4]);
77 tmp = std::min(array[1], array[2]);
78 array[2] = std::max(array[1], array[2]);
79 array[1] = tmp;
80 tmp = std::min(array[2], array[3]);
81 return std::max(array[1], tmp);
82 }
83
84 #ifdef __SSE2__
85 template<>
median(std::array<vfloat,5> array)86 inline vfloat median(std::array<vfloat, 5> array)
87 {
88 vfloat tmp = vminf(array[0], array[1]);
89 array[1] = vmaxf(array[0], array[1]);
90 array[0] = tmp;
91 tmp = vminf(array[3], array[4]);
92 array[4] = vmaxf(array[3], array[4]);
93 array[3] = vmaxf(array[0], tmp);
94 array[1] = vminf(array[1], array[4]);
95 tmp = vminf(array[1], array[2]);
96 array[2] = vmaxf(array[1], array[2]);
97 array[1] = tmp;
98 tmp = vminf(array[2], array[3]);
99 return vmaxf(array[1], tmp);
100 }
101 #endif
102
103 template<typename T>
median(std::array<T,7> array)104 inline T median(std::array<T, 7> array)
105 {
106 T tmp = std::min(array[0], array[5]);
107 array[5] = std::max(array[0], array[5]);
108 array[0] = tmp;
109 tmp = std::min(array[0], array[3]);
110 array[3] = std::max(array[0], array[3]);
111 array[0] = tmp;
112 tmp = std::min(array[1], array[6]);
113 array[6] = std::max(array[1], array[6]);
114 array[1] = tmp;
115 tmp = std::min(array[2], array[4]);
116 array[4] = std::max(array[2], array[4]);
117 array[2] = tmp;
118 array[1] = std::max(array[0], array[1]);
119 tmp = std::min(array[3], array[5]);
120 array[5] = std::max(array[3], array[5]);
121 array[3] = tmp;
122 tmp = std::min(array[2], array[6]);
123 array[6] = std::max(array[2], array[6]);
124 array[3] = std::max(tmp, array[3]);
125 array[3] = std::min(array[3], array[6]);
126 tmp = std::min(array[4], array[5]);
127 array[4] = std::max(array[1], tmp);
128 tmp = std::min(array[1], tmp);
129 array[3] = std::max(tmp, array[3]);
130 return std::min(array[3], array[4]);
131 }
132
133 #ifdef __SSE2__
134 template<>
median(std::array<vfloat,7> array)135 inline vfloat median(std::array<vfloat, 7> array)
136 {
137 vfloat tmp = vminf(array[0], array[5]);
138 array[5] = vmaxf(array[0], array[5]);
139 array[0] = tmp;
140 tmp = vminf(array[0], array[3]);
141 array[3] = vmaxf(array[0], array[3]);
142 array[0] = tmp;
143 tmp = vminf(array[1], array[6]);
144 array[6] = vmaxf(array[1], array[6]);
145 array[1] = tmp;
146 tmp = vminf(array[2], array[4]);
147 array[4] = vmaxf(array[2], array[4]);
148 array[2] = tmp;
149 array[1] = vmaxf(array[0], array[1]);
150 tmp = vminf(array[3], array[5]);
151 array[5] = vmaxf(array[3], array[5]);
152 array[3] = tmp;
153 tmp = vminf(array[2], array[6]);
154 array[6] = vmaxf(array[2], array[6]);
155 array[3] = vmaxf(tmp, array[3]);
156 array[3] = vminf(array[3], array[6]);
157 tmp = vminf(array[4], array[5]);
158 array[4] = vmaxf(array[1], tmp);
159 tmp = vminf(array[1], tmp);
160 array[3] = vmaxf(tmp, array[3]);
161 return vminf(array[3], array[4]);
162 }
163 #endif
164
165 template<typename T>
median(std::array<T,9> array)166 inline T median(std::array<T, 9> array)
167 {
168 T tmp = std::min(array[1], array[2]);
169 array[2] = std::max(array[1], array[2]);
170 array[1] = tmp;
171 tmp = std::min(array[4], array[5]);
172 array[5] = std::max(array[4], array[5]);
173 array[4] = tmp;
174 tmp = std::min(array[7], array[8]);
175 array[8] = std::max(array[7], array[8]);
176 array[7] = tmp;
177 tmp = std::min(array[0], array[1]);
178 array[1] = std::max(array[0], array[1]);
179 array[0] = tmp;
180 tmp = std::min(array[3], array[4]);
181 array[4] = std::max(array[3], array[4]);
182 array[3] = tmp;
183 tmp = std::min(array[6], array[7]);
184 array[7] = std::max(array[6], array[7]);
185 array[6] = tmp;
186 tmp = std::min(array[1], array[2]);
187 array[2] = std::max(array[1], array[2]);
188 array[1] = tmp;
189 tmp = std::min(array[4], array[5]);
190 array[5] = std::max(array[4], array[5]);
191 array[4] = tmp;
192 tmp = std::min(array[7], array[8]);
193 array[8] = std::max(array[7], array[8]);
194 array[3] = std::max(array[0], array[3]);
195 array[5] = std::min(array[5], array[8]);
196 array[7] = std::max(array[4], tmp);
197 tmp = std::min(array[4], tmp);
198 array[6] = std::max(array[3], array[6]);
199 array[4] = std::max(array[1], tmp);
200 array[2] = std::min(array[2], array[5]);
201 array[4] = std::min(array[4], array[7]);
202 tmp = std::min(array[4], array[2]);
203 array[2] = std::max(array[4], array[2]);
204 array[4] = std::max(array[6], tmp);
205 return std::min(array[4], array[2]);
206 }
207
208 #ifdef __SSE2__
209 template<>
median(std::array<vfloat,9> array)210 inline vfloat median(std::array<vfloat, 9> array)
211 {
212 vfloat tmp = vminf(array[1], array[2]);
213 array[2] = vmaxf(array[1], array[2]);
214 array[1] = tmp;
215 tmp = vminf(array[4], array[5]);
216 array[5] = vmaxf(array[4], array[5]);
217 array[4] = tmp;
218 tmp = vminf(array[7], array[8]);
219 array[8] = vmaxf(array[7], array[8]);
220 array[7] = tmp;
221 tmp = vminf(array[0], array[1]);
222 array[1] = vmaxf(array[0], array[1]);
223 array[0] = tmp;
224 tmp = vminf(array[3], array[4]);
225 array[4] = vmaxf(array[3], array[4]);
226 array[3] = tmp;
227 tmp = vminf(array[6], array[7]);
228 array[7] = vmaxf(array[6], array[7]);
229 array[6] = tmp;
230 tmp = vminf(array[1], array[2]);
231 array[2] = vmaxf(array[1], array[2]);
232 array[1] = tmp;
233 tmp = vminf(array[4], array[5]);
234 array[5] = vmaxf(array[4], array[5]);
235 array[4] = tmp;
236 tmp = vminf(array[7], array[8]);
237 array[8] = vmaxf(array[7], array[8]);
238 array[3] = vmaxf(array[0], array[3]);
239 array[5] = vminf(array[5], array[8]);
240 array[7] = vmaxf(array[4], tmp);
241 tmp = vminf(array[4], tmp);
242 array[6] = vmaxf(array[3], array[6]);
243 array[4] = vmaxf(array[1], tmp);
244 array[2] = vminf(array[2], array[5]);
245 array[4] = vminf(array[4], array[7]);
246 tmp = vminf(array[4], array[2]);
247 array[2] = vmaxf(array[4], array[2]);
248 array[4] = vmaxf(array[6], tmp);
249 return vminf(array[4], array[2]);
250 }
251 #endif
252
253 template<typename T>
median(std::array<T,13> array)254 inline T median(std::array<T, 13> array)
255 {
256 T tmp = std::min(array[1], array[7]);
257 array[7] = std::max(array[1], array[7]);
258 array[1] = tmp;
259 tmp = std::min(array[9], array[11]);
260 array[11] = std::max(array[9], array[11]);
261 array[9] = tmp;
262 tmp = std::min(array[3], array[4]);
263 array[4] = std::max(array[3], array[4]);
264 array[3] = tmp;
265 tmp = std::min(array[5], array[8]);
266 array[8] = std::max(array[5], array[8]);
267 array[5] = tmp;
268 tmp = std::min(array[0], array[12]);
269 array[12] = std::max(array[0], array[12]);
270 array[0] = tmp;
271 tmp = std::min(array[2], array[6]);
272 array[6] = std::max(array[2], array[6]);
273 array[2] = tmp;
274 tmp = std::min(array[0], array[1]);
275 array[1] = std::max(array[0], array[1]);
276 array[0] = tmp;
277 tmp = std::min(array[2], array[3]);
278 array[3] = std::max(array[2], array[3]);
279 array[2] = tmp;
280 tmp = std::min(array[4], array[6]);
281 array[6] = std::max(array[4], array[6]);
282 array[4] = tmp;
283 tmp = std::min(array[8], array[11]);
284 array[11] = std::max(array[8], array[11]);
285 array[8] = tmp;
286 tmp = std::min(array[7], array[12]);
287 array[12] = std::max(array[7], array[12]);
288 array[7] = tmp;
289 tmp = std::min(array[5], array[9]);
290 array[9] = std::max(array[5], array[9]);
291 array[5] = tmp;
292 tmp = std::min(array[0], array[2]);
293 array[2] = std::max(array[0], array[2]);
294 array[0] = tmp;
295 tmp = std::min(array[3], array[7]);
296 array[7] = std::max(array[3], array[7]);
297 array[3] = tmp;
298 tmp = std::min(array[10], array[11]);
299 array[11] = std::max(array[10], array[11]);
300 array[10] = tmp;
301 tmp = std::min(array[1], array[4]);
302 array[4] = std::max(array[1], array[4]);
303 array[1] = tmp;
304 tmp = std::min(array[6], array[12]);
305 array[12] = std::max(array[6], array[12]);
306 array[6] = tmp;
307 tmp = std::min(array[7], array[8]);
308 array[8] = std::max(array[7], array[8]);
309 array[7] = tmp;
310 array[11] = std::min(array[11], array[12]);
311 tmp = std::min(array[4], array[9]);
312 array[9] = std::max(array[4], array[9]);
313 array[4] = tmp;
314 tmp = std::min(array[6], array[10]);
315 array[10] = std::max(array[6], array[10]);
316 array[6] = tmp;
317 tmp = std::min(array[3], array[4]);
318 array[4] = std::max(array[3], array[4]);
319 array[3] = tmp;
320 tmp = std::min(array[5], array[6]);
321 array[6] = std::max(array[5], array[6]);
322 array[5] = tmp;
323 array[8] = std::min(array[8], array[9]);
324 array[10] = std::min(array[10], array[11]);
325 tmp = std::min(array[1], array[7]);
326 array[7] = std::max(array[1], array[7]);
327 array[1] = tmp;
328 tmp = std::min(array[2], array[6]);
329 array[6] = std::max(array[2], array[6]);
330 array[2] = tmp;
331 array[3] = std::max(array[1], array[3]);
332 tmp = std::min(array[4], array[7]);
333 array[7] = std::max(array[4], array[7]);
334 array[4] = tmp;
335 array[8] = std::min(array[8], array[10]);
336 array[5] = std::max(array[0], array[5]);
337 array[5] = std::max(array[2], array[5]);
338 tmp = std::min(array[6], array[8]);
339 array[8] = std::max(array[6], array[8]);
340 array[5] = std::max(array[3], array[5]);
341 array[7] = std::min(array[7], array[8]);
342 array[6] = std::max(array[4], tmp);
343 tmp = std::min(array[4], tmp);
344 array[5] = std::max(tmp, array[5]);
345 array[6] = std::min(array[6], array[7]);
346 return std::max(array[5], array[6]);
347 }
348
349 #ifdef __SSE2__
350 template<>
median(std::array<vfloat,13> array)351 inline vfloat median(std::array<vfloat, 13> array)
352 {
353 vfloat tmp = vminf(array[1], array[7]);
354 array[7] = vmaxf(array[1], array[7]);
355 array[1] = tmp;
356 tmp = vminf(array[9], array[11]);
357 array[11] = vmaxf(array[9], array[11]);
358 array[9] = tmp;
359 tmp = vminf(array[3], array[4]);
360 array[4] = vmaxf(array[3], array[4]);
361 array[3] = tmp;
362 tmp = vminf(array[5], array[8]);
363 array[8] = vmaxf(array[5], array[8]);
364 array[5] = tmp;
365 tmp = vminf(array[0], array[12]);
366 array[12] = vmaxf(array[0], array[12]);
367 array[0] = tmp;
368 tmp = vminf(array[2], array[6]);
369 array[6] = vmaxf(array[2], array[6]);
370 array[2] = tmp;
371 tmp = vminf(array[0], array[1]);
372 array[1] = vmaxf(array[0], array[1]);
373 array[0] = tmp;
374 tmp = vminf(array[2], array[3]);
375 array[3] = vmaxf(array[2], array[3]);
376 array[2] = tmp;
377 tmp = vminf(array[4], array[6]);
378 array[6] = vmaxf(array[4], array[6]);
379 array[4] = tmp;
380 tmp = vminf(array[8], array[11]);
381 array[11] = vmaxf(array[8], array[11]);
382 array[8] = tmp;
383 tmp = vminf(array[7], array[12]);
384 array[12] = vmaxf(array[7], array[12]);
385 array[7] = tmp;
386 tmp = vminf(array[5], array[9]);
387 array[9] = vmaxf(array[5], array[9]);
388 array[5] = tmp;
389 tmp = vminf(array[0], array[2]);
390 array[2] = vmaxf(array[0], array[2]);
391 array[0] = tmp;
392 tmp = vminf(array[3], array[7]);
393 array[7] = vmaxf(array[3], array[7]);
394 array[3] = tmp;
395 tmp = vminf(array[10], array[11]);
396 array[11] = vmaxf(array[10], array[11]);
397 array[10] = tmp;
398 tmp = vminf(array[1], array[4]);
399 array[4] = vmaxf(array[1], array[4]);
400 array[1] = tmp;
401 tmp = vminf(array[6], array[12]);
402 array[12] = vmaxf(array[6], array[12]);
403 array[6] = tmp;
404 tmp = vminf(array[7], array[8]);
405 array[8] = vmaxf(array[7], array[8]);
406 array[7] = tmp;
407 array[11] = vminf(array[11], array[12]);
408 tmp = vminf(array[4], array[9]);
409 array[9] = vmaxf(array[4], array[9]);
410 array[4] = tmp;
411 tmp = vminf(array[6], array[10]);
412 array[10] = vmaxf(array[6], array[10]);
413 array[6] = tmp;
414 tmp = vminf(array[3], array[4]);
415 array[4] = vmaxf(array[3], array[4]);
416 array[3] = tmp;
417 tmp = vminf(array[5], array[6]);
418 array[6] = vmaxf(array[5], array[6]);
419 array[5] = tmp;
420 array[8] = vminf(array[8], array[9]);
421 array[10] = vminf(array[10], array[11]);
422 tmp = vminf(array[1], array[7]);
423 array[7] = vmaxf(array[1], array[7]);
424 array[1] = tmp;
425 tmp = vminf(array[2], array[6]);
426 array[6] = vmaxf(array[2], array[6]);
427 array[2] = tmp;
428 array[3] = vmaxf(array[1], array[3]);
429 tmp = vminf(array[4], array[7]);
430 array[7] = vmaxf(array[4], array[7]);
431 array[4] = tmp;
432 array[8] = vminf(array[8], array[10]);
433 array[5] = vmaxf(array[0], array[5]);
434 array[5] = vmaxf(array[2], array[5]);
435 tmp = vminf(array[6], array[8]);
436 array[8] = vmaxf(array[6], array[8]);
437 array[5] = vmaxf(array[3], array[5]);
438 array[7] = vminf(array[7], array[8]);
439 array[6] = vmaxf(array[4], tmp);
440 tmp = vminf(array[4], tmp);
441 array[5] = vmaxf(tmp, array[5]);
442 array[6] = vminf(array[6], array[7]);
443 return vmaxf(array[5], array[6]);
444 }
445 #endif
446
447 template<typename T>
median(std::array<T,25> array)448 inline T median(std::array<T, 25> array)
449 {
450 T tmp = std::min(array[0], array[1]);
451 array[1] = std::max(array[0], array[1]);
452 array[0] = tmp;
453 tmp = std::min(array[3], array[4]);
454 array[4] = std::max(array[3], array[4]);
455 array[3] = tmp;
456 tmp = std::min(array[2], array[4]);
457 array[4] = std::max(array[2], array[4]);
458 array[2] = std::min(tmp, array[3]);
459 array[3] = std::max(tmp, array[3]);
460 tmp = std::min(array[6], array[7]);
461 array[7] = std::max(array[6], array[7]);
462 array[6] = tmp;
463 tmp = std::min(array[5], array[7]);
464 array[7] = std::max(array[5], array[7]);
465 array[5] = std::min(tmp, array[6]);
466 array[6] = std::max(tmp, array[6]);
467 tmp = std::min(array[9], array[10]);
468 array[10] = std::max(array[9], array[10]);
469 array[9] = tmp;
470 tmp = std::min(array[8], array[10]);
471 array[10] = std::max(array[8], array[10]);
472 array[8] = std::min(tmp, array[9]);
473 array[9] = std::max(tmp, array[9]);
474 tmp = std::min(array[12], array[13]);
475 array[13] = std::max(array[12], array[13]);
476 array[12] = tmp;
477 tmp = std::min(array[11], array[13]);
478 array[13] = std::max(array[11], array[13]);
479 array[11] = std::min(tmp, array[12]);
480 array[12] = std::max(tmp, array[12]);
481 tmp = std::min(array[15], array[16]);
482 array[16] = std::max(array[15], array[16]);
483 array[15] = tmp;
484 tmp = std::min(array[14], array[16]);
485 array[16] = std::max(array[14], array[16]);
486 array[14] = std::min(tmp, array[15]);
487 array[15] = std::max(tmp, array[15]);
488 tmp = std::min(array[18], array[19]);
489 array[19] = std::max(array[18], array[19]);
490 array[18] = tmp;
491 tmp = std::min(array[17], array[19]);
492 array[19] = std::max(array[17], array[19]);
493 array[17] = std::min(tmp, array[18]);
494 array[18] = std::max(tmp, array[18]);
495 tmp = std::min(array[21], array[22]);
496 array[22] = std::max(array[21], array[22]);
497 array[21] = tmp;
498 tmp = std::min(array[20], array[22]);
499 array[22] = std::max(array[20], array[22]);
500 array[20] = std::min(tmp, array[21]);
501 array[21] = std::max(tmp, array[21]);
502 tmp = std::min(array[23], array[24]);
503 array[24] = std::max(array[23], array[24]);
504 array[23] = tmp;
505 tmp = std::min(array[2], array[5]);
506 array[5] = std::max(array[2], array[5]);
507 array[2] = tmp;
508 tmp = std::min(array[3], array[6]);
509 array[6] = std::max(array[3], array[6]);
510 array[3] = tmp;
511 tmp = std::min(array[0], array[6]);
512 array[6] = std::max(array[0], array[6]);
513 array[0] = std::min(tmp, array[3]);
514 array[3] = std::max(tmp, array[3]);
515 tmp = std::min(array[4], array[7]);
516 array[7] = std::max(array[4], array[7]);
517 array[4] = tmp;
518 tmp = std::min(array[1], array[7]);
519 array[7] = std::max(array[1], array[7]);
520 array[1] = std::min(tmp, array[4]);
521 array[4] = std::max(tmp, array[4]);
522 tmp = std::min(array[11], array[14]);
523 array[14] = std::max(array[11], array[14]);
524 array[11] = tmp;
525 tmp = std::min(array[8], array[14]);
526 array[14] = std::max(array[8], array[14]);
527 array[8] = std::min(tmp, array[11]);
528 array[11] = std::max(tmp, array[11]);
529 tmp = std::min(array[12], array[15]);
530 array[15] = std::max(array[12], array[15]);
531 array[12] = tmp;
532 tmp = std::min(array[9], array[15]);
533 array[15] = std::max(array[9], array[15]);
534 array[9] = std::min(tmp, array[12]);
535 array[12] = std::max(tmp, array[12]);
536 tmp = std::min(array[13], array[16]);
537 array[16] = std::max(array[13], array[16]);
538 array[13] = tmp;
539 tmp = std::min(array[10], array[16]);
540 array[16] = std::max(array[10], array[16]);
541 array[10] = std::min(tmp, array[13]);
542 array[13] = std::max(tmp, array[13]);
543 tmp = std::min(array[20], array[23]);
544 array[23] = std::max(array[20], array[23]);
545 array[20] = tmp;
546 tmp = std::min(array[17], array[23]);
547 array[23] = std::max(array[17], array[23]);
548 array[17] = std::min(tmp, array[20]);
549 array[20] = std::max(tmp, array[20]);
550 tmp = std::min(array[21], array[24]);
551 array[24] = std::max(array[21], array[24]);
552 array[21] = tmp;
553 tmp = std::min(array[18], array[24]);
554 array[24] = std::max(array[18], array[24]);
555 array[18] = std::min(tmp, array[21]);
556 array[21] = std::max(tmp, array[21]);
557 tmp = std::min(array[19], array[22]);
558 array[22] = std::max(array[19], array[22]);
559 array[19] = tmp;
560 array[17] = std::max(array[8], array[17]);
561 tmp = std::min(array[9], array[18]);
562 array[18] = std::max(array[9], array[18]);
563 array[9] = tmp;
564 tmp = std::min(array[0], array[18]);
565 array[18] = std::max(array[0], array[18]);
566 array[9] = std::max(tmp, array[9]);
567 tmp = std::min(array[10], array[19]);
568 array[19] = std::max(array[10], array[19]);
569 array[10] = tmp;
570 tmp = std::min(array[1], array[19]);
571 array[19] = std::max(array[1], array[19]);
572 array[1] = std::min(tmp, array[10]);
573 array[10] = std::max(tmp, array[10]);
574 tmp = std::min(array[11], array[20]);
575 array[20] = std::max(array[11], array[20]);
576 array[11] = tmp;
577 tmp = std::min(array[2], array[20]);
578 array[20] = std::max(array[2], array[20]);
579 array[11] = std::max(tmp, array[11]);
580 tmp = std::min(array[12], array[21]);
581 array[21] = std::max(array[12], array[21]);
582 array[12] = tmp;
583 tmp = std::min(array[3], array[21]);
584 array[21] = std::max(array[3], array[21]);
585 array[3] = std::min(tmp, array[12]);
586 array[12] = std::max(tmp, array[12]);
587 tmp = std::min(array[13], array[22]);
588 array[22] = std::max(array[13], array[22]);
589 array[4] = std::min(array[4], array[22]);
590 array[13] = std::max(array[4], tmp);
591 tmp = std::min(array[4], tmp);
592 array[4] = tmp;
593 tmp = std::min(array[14], array[23]);
594 array[23] = std::max(array[14], array[23]);
595 array[14] = tmp;
596 tmp = std::min(array[5], array[23]);
597 array[23] = std::max(array[5], array[23]);
598 array[5] = std::min(tmp, array[14]);
599 array[14] = std::max(tmp, array[14]);
600 tmp = std::min(array[15], array[24]);
601 array[24] = std::max(array[15], array[24]);
602 array[15] = tmp;
603 array[6] = std::min(array[6], array[24]);
604 tmp = std::min(array[6], array[15]);
605 array[15] = std::max(array[6], array[15]);
606 array[6] = tmp;
607 tmp = std::min(array[7], array[16]);
608 array[7] = std::min(tmp, array[19]);
609 tmp = std::min(array[13], array[21]);
610 array[15] = std::min(array[15], array[23]);
611 tmp = std::min(array[7], tmp);
612 array[7] = std::min(tmp, array[15]);
613 array[9] = std::max(array[1], array[9]);
614 array[11] = std::max(array[3], array[11]);
615 array[17] = std::max(array[5], array[17]);
616 array[17] = std::max(array[11], array[17]);
617 array[17] = std::max(array[9], array[17]);
618 tmp = std::min(array[4], array[10]);
619 array[10] = std::max(array[4], array[10]);
620 array[4] = tmp;
621 tmp = std::min(array[6], array[12]);
622 array[12] = std::max(array[6], array[12]);
623 array[6] = tmp;
624 tmp = std::min(array[7], array[14]);
625 array[14] = std::max(array[7], array[14]);
626 array[7] = tmp;
627 tmp = std::min(array[4], array[6]);
628 array[6] = std::max(array[4], array[6]);
629 array[7] = std::max(tmp, array[7]);
630 tmp = std::min(array[12], array[14]);
631 array[14] = std::max(array[12], array[14]);
632 array[12] = tmp;
633 array[10] = std::min(array[10], array[14]);
634 tmp = std::min(array[6], array[7]);
635 array[7] = std::max(array[6], array[7]);
636 array[6] = tmp;
637 tmp = std::min(array[10], array[12]);
638 array[12] = std::max(array[10], array[12]);
639 array[10] = std::max(array[6], tmp);
640 tmp = std::min(array[6], tmp);
641 array[17] = std::max(tmp, array[17]);
642 tmp = std::min(array[12], array[17]);
643 array[17] = std::max(array[12], array[17]);
644 array[12] = tmp;
645 array[7] = std::min(array[7], array[17]);
646 tmp = std::min(array[7], array[10]);
647 array[10] = std::max(array[7], array[10]);
648 array[7] = tmp;
649 tmp = std::min(array[12], array[18]);
650 array[18] = std::max(array[12], array[18]);
651 array[12] = std::max(array[7], tmp);
652 array[10] = std::min(array[10], array[18]);
653 tmp = std::min(array[12], array[20]);
654 array[20] = std::max(array[12], array[20]);
655 array[12] = tmp;
656 tmp = std::min(array[10], array[20]);
657 return std::max(tmp, array[12]);
658 }
659
660 #ifdef __SSE2__
661 template<>
median(std::array<vfloat,25> array)662 inline vfloat median(std::array<vfloat, 25> array)
663 {
664 vfloat tmp = vminf(array[0], array[1]);
665 array[1] = vmaxf(array[0], array[1]);
666 array[0] = tmp;
667 tmp = vminf(array[3], array[4]);
668 array[4] = vmaxf(array[3], array[4]);
669 array[3] = tmp;
670 tmp = vminf(array[2], array[4]);
671 array[4] = vmaxf(array[2], array[4]);
672 array[2] = vminf(tmp, array[3]);
673 array[3] = vmaxf(tmp, array[3]);
674 tmp = vminf(array[6], array[7]);
675 array[7] = vmaxf(array[6], array[7]);
676 array[6] = tmp;
677 tmp = vminf(array[5], array[7]);
678 array[7] = vmaxf(array[5], array[7]);
679 array[5] = vminf(tmp, array[6]);
680 array[6] = vmaxf(tmp, array[6]);
681 tmp = vminf(array[9], array[10]);
682 array[10] = vmaxf(array[9], array[10]);
683 array[9] = tmp;
684 tmp = vminf(array[8], array[10]);
685 array[10] = vmaxf(array[8], array[10]);
686 array[8] = vminf(tmp, array[9]);
687 array[9] = vmaxf(tmp, array[9]);
688 tmp = vminf(array[12], array[13]);
689 array[13] = vmaxf(array[12], array[13]);
690 array[12] = tmp;
691 tmp = vminf(array[11], array[13]);
692 array[13] = vmaxf(array[11], array[13]);
693 array[11] = vminf(tmp, array[12]);
694 array[12] = vmaxf(tmp, array[12]);
695 tmp = vminf(array[15], array[16]);
696 array[16] = vmaxf(array[15], array[16]);
697 array[15] = tmp;
698 tmp = vminf(array[14], array[16]);
699 array[16] = vmaxf(array[14], array[16]);
700 array[14] = vminf(tmp, array[15]);
701 array[15] = vmaxf(tmp, array[15]);
702 tmp = vminf(array[18], array[19]);
703 array[19] = vmaxf(array[18], array[19]);
704 array[18] = tmp;
705 tmp = vminf(array[17], array[19]);
706 array[19] = vmaxf(array[17], array[19]);
707 array[17] = vminf(tmp, array[18]);
708 array[18] = vmaxf(tmp, array[18]);
709 tmp = vminf(array[21], array[22]);
710 array[22] = vmaxf(array[21], array[22]);
711 array[21] = tmp;
712 tmp = vminf(array[20], array[22]);
713 array[22] = vmaxf(array[20], array[22]);
714 array[20] = vminf(tmp, array[21]);
715 array[21] = vmaxf(tmp, array[21]);
716 tmp = vminf(array[23], array[24]);
717 array[24] = vmaxf(array[23], array[24]);
718 array[23] = tmp;
719 tmp = vminf(array[2], array[5]);
720 array[5] = vmaxf(array[2], array[5]);
721 array[2] = tmp;
722 tmp = vminf(array[3], array[6]);
723 array[6] = vmaxf(array[3], array[6]);
724 array[3] = tmp;
725 tmp = vminf(array[0], array[6]);
726 array[6] = vmaxf(array[0], array[6]);
727 array[0] = vminf(tmp, array[3]);
728 array[3] = vmaxf(tmp, array[3]);
729 tmp = vminf(array[4], array[7]);
730 array[7] = vmaxf(array[4], array[7]);
731 array[4] = tmp;
732 tmp = vminf(array[1], array[7]);
733 array[7] = vmaxf(array[1], array[7]);
734 array[1] = vminf(tmp, array[4]);
735 array[4] = vmaxf(tmp, array[4]);
736 tmp = vminf(array[11], array[14]);
737 array[14] = vmaxf(array[11], array[14]);
738 array[11] = tmp;
739 tmp = vminf(array[8], array[14]);
740 array[14] = vmaxf(array[8], array[14]);
741 array[8] = vminf(tmp, array[11]);
742 array[11] = vmaxf(tmp, array[11]);
743 tmp = vminf(array[12], array[15]);
744 array[15] = vmaxf(array[12], array[15]);
745 array[12] = tmp;
746 tmp = vminf(array[9], array[15]);
747 array[15] = vmaxf(array[9], array[15]);
748 array[9] = vminf(tmp, array[12]);
749 array[12] = vmaxf(tmp, array[12]);
750 tmp = vminf(array[13], array[16]);
751 array[16] = vmaxf(array[13], array[16]);
752 array[13] = tmp;
753 tmp = vminf(array[10], array[16]);
754 array[16] = vmaxf(array[10], array[16]);
755 array[10] = vminf(tmp, array[13]);
756 array[13] = vmaxf(tmp, array[13]);
757 tmp = vminf(array[20], array[23]);
758 array[23] = vmaxf(array[20], array[23]);
759 array[20] = tmp;
760 tmp = vminf(array[17], array[23]);
761 array[23] = vmaxf(array[17], array[23]);
762 array[17] = vminf(tmp, array[20]);
763 array[20] = vmaxf(tmp, array[20]);
764 tmp = vminf(array[21], array[24]);
765 array[24] = vmaxf(array[21], array[24]);
766 array[21] = tmp;
767 tmp = vminf(array[18], array[24]);
768 array[24] = vmaxf(array[18], array[24]);
769 array[18] = vminf(tmp, array[21]);
770 array[21] = vmaxf(tmp, array[21]);
771 tmp = vminf(array[19], array[22]);
772 array[22] = vmaxf(array[19], array[22]);
773 array[19] = tmp;
774 array[17] = vmaxf(array[8], array[17]);
775 tmp = vminf(array[9], array[18]);
776 array[18] = vmaxf(array[9], array[18]);
777 array[9] = tmp;
778 tmp = vminf(array[0], array[18]);
779 array[18] = vmaxf(array[0], array[18]);
780 array[9] = vmaxf(tmp, array[9]);
781 tmp = vminf(array[10], array[19]);
782 array[19] = vmaxf(array[10], array[19]);
783 array[10] = tmp;
784 tmp = vminf(array[1], array[19]);
785 array[19] = vmaxf(array[1], array[19]);
786 array[1] = vminf(tmp, array[10]);
787 array[10] = vmaxf(tmp, array[10]);
788 tmp = vminf(array[11], array[20]);
789 array[20] = vmaxf(array[11], array[20]);
790 array[11] = tmp;
791 tmp = vminf(array[2], array[20]);
792 array[20] = vmaxf(array[2], array[20]);
793 array[11] = vmaxf(tmp, array[11]);
794 tmp = vminf(array[12], array[21]);
795 array[21] = vmaxf(array[12], array[21]);
796 array[12] = tmp;
797 tmp = vminf(array[3], array[21]);
798 array[21] = vmaxf(array[3], array[21]);
799 array[3] = vminf(tmp, array[12]);
800 array[12] = vmaxf(tmp, array[12]);
801 tmp = vminf(array[13], array[22]);
802 array[22] = vmaxf(array[13], array[22]);
803 array[4] = vminf(array[4], array[22]);
804 array[13] = vmaxf(array[4], tmp);
805 tmp = vminf(array[4], tmp);
806 array[4] = tmp;
807 tmp = vminf(array[14], array[23]);
808 array[23] = vmaxf(array[14], array[23]);
809 array[14] = tmp;
810 tmp = vminf(array[5], array[23]);
811 array[23] = vmaxf(array[5], array[23]);
812 array[5] = vminf(tmp, array[14]);
813 array[14] = vmaxf(tmp, array[14]);
814 tmp = vminf(array[15], array[24]);
815 array[24] = vmaxf(array[15], array[24]);
816 array[15] = tmp;
817 array[6] = vminf(array[6], array[24]);
818 tmp = vminf(array[6], array[15]);
819 array[15] = vmaxf(array[6], array[15]);
820 array[6] = tmp;
821 tmp = vminf(array[7], array[16]);
822 array[7] = vminf(tmp, array[19]);
823 tmp = vminf(array[13], array[21]);
824 array[15] = vminf(array[15], array[23]);
825 tmp = vminf(array[7], tmp);
826 array[7] = vminf(tmp, array[15]);
827 array[9] = vmaxf(array[1], array[9]);
828 array[11] = vmaxf(array[3], array[11]);
829 array[17] = vmaxf(array[5], array[17]);
830 array[17] = vmaxf(array[11], array[17]);
831 array[17] = vmaxf(array[9], array[17]);
832 tmp = vminf(array[4], array[10]);
833 array[10] = vmaxf(array[4], array[10]);
834 array[4] = tmp;
835 tmp = vminf(array[6], array[12]);
836 array[12] = vmaxf(array[6], array[12]);
837 array[6] = tmp;
838 tmp = vminf(array[7], array[14]);
839 array[14] = vmaxf(array[7], array[14]);
840 array[7] = tmp;
841 tmp = vminf(array[4], array[6]);
842 array[6] = vmaxf(array[4], array[6]);
843 array[7] = vmaxf(tmp, array[7]);
844 tmp = vminf(array[12], array[14]);
845 array[14] = vmaxf(array[12], array[14]);
846 array[12] = tmp;
847 array[10] = vminf(array[10], array[14]);
848 tmp = vminf(array[6], array[7]);
849 array[7] = vmaxf(array[6], array[7]);
850 array[6] = tmp;
851 tmp = vminf(array[10], array[12]);
852 array[12] = vmaxf(array[10], array[12]);
853 array[10] = vmaxf(array[6], tmp);
854 tmp = vminf(array[6], tmp);
855 array[17] = vmaxf(tmp, array[17]);
856 tmp = vminf(array[12], array[17]);
857 array[17] = vmaxf(array[12], array[17]);
858 array[12] = tmp;
859 array[7] = vminf(array[7], array[17]);
860 tmp = vminf(array[7], array[10]);
861 array[10] = vmaxf(array[7], array[10]);
862 array[7] = tmp;
863 tmp = vminf(array[12], array[18]);
864 array[18] = vmaxf(array[12], array[18]);
865 array[12] = vmaxf(array[7], tmp);
866 array[10] = vminf(array[10], array[18]);
867 tmp = vminf(array[12], array[20]);
868 array[20] = vmaxf(array[12], array[20]);
869 array[12] = tmp;
870 tmp = vminf(array[10], array[20]);
871 return vmaxf(tmp, array[12]);
872 }
873 #endif
874
875 template<typename T>
median(std::array<T,49> array)876 inline T median(std::array<T, 49> array)
877 {
878 T tmp = std::min(array[0], array[32]);
879 array[32] = std::max(array[0], array[32]);
880 array[0] = tmp;
881 tmp = std::min(array[1], array[33]);
882 array[33] = std::max(array[1], array[33]);
883 array[1] = tmp;
884 tmp = std::min(array[2], array[34]);
885 array[34] = std::max(array[2], array[34]);
886 array[2] = tmp;
887 tmp = std::min(array[3], array[35]);
888 array[35] = std::max(array[3], array[35]);
889 array[3] = tmp;
890 tmp = std::min(array[4], array[36]);
891 array[36] = std::max(array[4], array[36]);
892 array[4] = tmp;
893 tmp = std::min(array[5], array[37]);
894 array[37] = std::max(array[5], array[37]);
895 array[5] = tmp;
896 tmp = std::min(array[6], array[38]);
897 array[38] = std::max(array[6], array[38]);
898 array[6] = tmp;
899 tmp = std::min(array[7], array[39]);
900 array[39] = std::max(array[7], array[39]);
901 array[7] = tmp;
902 tmp = std::min(array[8], array[40]);
903 array[40] = std::max(array[8], array[40]);
904 array[8] = tmp;
905 tmp = std::min(array[9], array[41]);
906 array[41] = std::max(array[9], array[41]);
907 array[9] = tmp;
908 tmp = std::min(array[10], array[42]);
909 array[42] = std::max(array[10], array[42]);
910 array[10] = tmp;
911 tmp = std::min(array[11], array[43]);
912 array[43] = std::max(array[11], array[43]);
913 array[11] = tmp;
914 tmp = std::min(array[12], array[44]);
915 array[44] = std::max(array[12], array[44]);
916 array[12] = tmp;
917 tmp = std::min(array[13], array[45]);
918 array[45] = std::max(array[13], array[45]);
919 array[13] = tmp;
920 tmp = std::min(array[14], array[46]);
921 array[46] = std::max(array[14], array[46]);
922 array[14] = tmp;
923 tmp = std::min(array[15], array[47]);
924 array[47] = std::max(array[15], array[47]);
925 array[15] = tmp;
926 tmp = std::min(array[16], array[48]);
927 array[48] = std::max(array[16], array[48]);
928 array[16] = tmp;
929 tmp = std::min(array[0], array[16]);
930 array[16] = std::max(array[0], array[16]);
931 array[0] = tmp;
932 tmp = std::min(array[1], array[17]);
933 array[17] = std::max(array[1], array[17]);
934 array[1] = tmp;
935 tmp = std::min(array[2], array[18]);
936 array[18] = std::max(array[2], array[18]);
937 array[2] = tmp;
938 tmp = std::min(array[3], array[19]);
939 array[19] = std::max(array[3], array[19]);
940 array[3] = tmp;
941 tmp = std::min(array[4], array[20]);
942 array[20] = std::max(array[4], array[20]);
943 array[4] = tmp;
944 tmp = std::min(array[5], array[21]);
945 array[21] = std::max(array[5], array[21]);
946 array[5] = tmp;
947 tmp = std::min(array[6], array[22]);
948 array[22] = std::max(array[6], array[22]);
949 array[6] = tmp;
950 tmp = std::min(array[7], array[23]);
951 array[23] = std::max(array[7], array[23]);
952 array[7] = tmp;
953 tmp = std::min(array[8], array[24]);
954 array[24] = std::max(array[8], array[24]);
955 array[8] = tmp;
956 tmp = std::min(array[9], array[25]);
957 array[25] = std::max(array[9], array[25]);
958 array[9] = tmp;
959 tmp = std::min(array[10], array[26]);
960 array[26] = std::max(array[10], array[26]);
961 array[10] = tmp;
962 tmp = std::min(array[11], array[27]);
963 array[27] = std::max(array[11], array[27]);
964 array[11] = tmp;
965 tmp = std::min(array[12], array[28]);
966 array[28] = std::max(array[12], array[28]);
967 array[12] = tmp;
968 tmp = std::min(array[13], array[29]);
969 array[29] = std::max(array[13], array[29]);
970 array[13] = tmp;
971 tmp = std::min(array[14], array[30]);
972 array[30] = std::max(array[14], array[30]);
973 array[14] = tmp;
974 tmp = std::min(array[15], array[31]);
975 array[31] = std::max(array[15], array[31]);
976 array[15] = tmp;
977 tmp = std::min(array[32], array[48]);
978 array[48] = std::max(array[32], array[48]);
979 array[32] = tmp;
980 tmp = std::min(array[16], array[32]);
981 array[32] = std::max(array[16], array[32]);
982 array[16] = tmp;
983 tmp = std::min(array[17], array[33]);
984 array[33] = std::max(array[17], array[33]);
985 array[17] = tmp;
986 tmp = std::min(array[18], array[34]);
987 array[34] = std::max(array[18], array[34]);
988 array[18] = tmp;
989 tmp = std::min(array[19], array[35]);
990 array[35] = std::max(array[19], array[35]);
991 array[19] = tmp;
992 tmp = std::min(array[20], array[36]);
993 array[36] = std::max(array[20], array[36]);
994 array[20] = tmp;
995 tmp = std::min(array[21], array[37]);
996 array[37] = std::max(array[21], array[37]);
997 array[21] = tmp;
998 tmp = std::min(array[22], array[38]);
999 array[38] = std::max(array[22], array[38]);
1000 array[22] = tmp;
1001 tmp = std::min(array[23], array[39]);
1002 array[39] = std::max(array[23], array[39]);
1003 array[23] = tmp;
1004 tmp = std::min(array[24], array[40]);
1005 array[40] = std::max(array[24], array[40]);
1006 array[24] = tmp;
1007 tmp = std::min(array[25], array[41]);
1008 array[41] = std::max(array[25], array[41]);
1009 array[25] = tmp;
1010 tmp = std::min(array[26], array[42]);
1011 array[42] = std::max(array[26], array[42]);
1012 array[26] = tmp;
1013 tmp = std::min(array[27], array[43]);
1014 array[43] = std::max(array[27], array[43]);
1015 array[27] = tmp;
1016 tmp = std::min(array[28], array[44]);
1017 array[44] = std::max(array[28], array[44]);
1018 array[28] = tmp;
1019 tmp = std::min(array[29], array[45]);
1020 array[45] = std::max(array[29], array[45]);
1021 array[29] = tmp;
1022 tmp = std::min(array[30], array[46]);
1023 array[46] = std::max(array[30], array[46]);
1024 array[30] = tmp;
1025 tmp = std::min(array[31], array[47]);
1026 array[47] = std::max(array[31], array[47]);
1027 array[31] = tmp;
1028 tmp = std::min(array[0], array[8]);
1029 array[8] = std::max(array[0], array[8]);
1030 array[0] = tmp;
1031 tmp = std::min(array[1], array[9]);
1032 array[9] = std::max(array[1], array[9]);
1033 array[1] = tmp;
1034 tmp = std::min(array[2], array[10]);
1035 array[10] = std::max(array[2], array[10]);
1036 array[2] = tmp;
1037 tmp = std::min(array[3], array[11]);
1038 array[11] = std::max(array[3], array[11]);
1039 array[3] = tmp;
1040 tmp = std::min(array[4], array[12]);
1041 array[12] = std::max(array[4], array[12]);
1042 array[4] = tmp;
1043 tmp = std::min(array[5], array[13]);
1044 array[13] = std::max(array[5], array[13]);
1045 array[5] = tmp;
1046 tmp = std::min(array[6], array[14]);
1047 array[14] = std::max(array[6], array[14]);
1048 array[6] = tmp;
1049 tmp = std::min(array[7], array[15]);
1050 array[15] = std::max(array[7], array[15]);
1051 array[7] = tmp;
1052 tmp = std::min(array[16], array[24]);
1053 array[24] = std::max(array[16], array[24]);
1054 array[16] = tmp;
1055 tmp = std::min(array[17], array[25]);
1056 array[25] = std::max(array[17], array[25]);
1057 array[17] = tmp;
1058 tmp = std::min(array[18], array[26]);
1059 array[26] = std::max(array[18], array[26]);
1060 array[18] = tmp;
1061 tmp = std::min(array[19], array[27]);
1062 array[27] = std::max(array[19], array[27]);
1063 array[19] = tmp;
1064 tmp = std::min(array[20], array[28]);
1065 array[28] = std::max(array[20], array[28]);
1066 array[20] = tmp;
1067 tmp = std::min(array[21], array[29]);
1068 array[29] = std::max(array[21], array[29]);
1069 array[21] = tmp;
1070 tmp = std::min(array[22], array[30]);
1071 array[30] = std::max(array[22], array[30]);
1072 array[22] = tmp;
1073 tmp = std::min(array[23], array[31]);
1074 array[31] = std::max(array[23], array[31]);
1075 array[23] = tmp;
1076 tmp = std::min(array[32], array[40]);
1077 array[40] = std::max(array[32], array[40]);
1078 array[32] = tmp;
1079 tmp = std::min(array[33], array[41]);
1080 array[41] = std::max(array[33], array[41]);
1081 array[33] = tmp;
1082 tmp = std::min(array[34], array[42]);
1083 array[42] = std::max(array[34], array[42]);
1084 array[34] = tmp;
1085 tmp = std::min(array[35], array[43]);
1086 array[43] = std::max(array[35], array[43]);
1087 array[35] = tmp;
1088 tmp = std::min(array[36], array[44]);
1089 array[44] = std::max(array[36], array[44]);
1090 array[36] = tmp;
1091 tmp = std::min(array[37], array[45]);
1092 array[45] = std::max(array[37], array[45]);
1093 array[37] = tmp;
1094 tmp = std::min(array[38], array[46]);
1095 array[46] = std::max(array[38], array[46]);
1096 array[38] = tmp;
1097 tmp = std::min(array[39], array[47]);
1098 array[47] = std::max(array[39], array[47]);
1099 array[39] = tmp;
1100 tmp = std::min(array[8], array[32]);
1101 array[32] = std::max(array[8], array[32]);
1102 array[8] = tmp;
1103 tmp = std::min(array[9], array[33]);
1104 array[33] = std::max(array[9], array[33]);
1105 array[9] = tmp;
1106 tmp = std::min(array[10], array[34]);
1107 array[34] = std::max(array[10], array[34]);
1108 array[10] = tmp;
1109 tmp = std::min(array[11], array[35]);
1110 array[35] = std::max(array[11], array[35]);
1111 array[11] = tmp;
1112 tmp = std::min(array[12], array[36]);
1113 array[36] = std::max(array[12], array[36]);
1114 array[12] = tmp;
1115 tmp = std::min(array[13], array[37]);
1116 array[37] = std::max(array[13], array[37]);
1117 array[13] = tmp;
1118 tmp = std::min(array[14], array[38]);
1119 array[38] = std::max(array[14], array[38]);
1120 array[14] = tmp;
1121 tmp = std::min(array[15], array[39]);
1122 array[39] = std::max(array[15], array[39]);
1123 array[15] = tmp;
1124 tmp = std::min(array[24], array[48]);
1125 array[48] = std::max(array[24], array[48]);
1126 array[24] = tmp;
1127 tmp = std::min(array[8], array[16]);
1128 array[16] = std::max(array[8], array[16]);
1129 array[8] = tmp;
1130 tmp = std::min(array[9], array[17]);
1131 array[17] = std::max(array[9], array[17]);
1132 array[9] = tmp;
1133 tmp = std::min(array[10], array[18]);
1134 array[18] = std::max(array[10], array[18]);
1135 array[10] = tmp;
1136 tmp = std::min(array[11], array[19]);
1137 array[19] = std::max(array[11], array[19]);
1138 array[11] = tmp;
1139 tmp = std::min(array[12], array[20]);
1140 array[20] = std::max(array[12], array[20]);
1141 array[12] = tmp;
1142 tmp = std::min(array[13], array[21]);
1143 array[21] = std::max(array[13], array[21]);
1144 array[13] = tmp;
1145 tmp = std::min(array[14], array[22]);
1146 array[22] = std::max(array[14], array[22]);
1147 array[14] = tmp;
1148 tmp = std::min(array[15], array[23]);
1149 array[23] = std::max(array[15], array[23]);
1150 array[15] = tmp;
1151 tmp = std::min(array[24], array[32]);
1152 array[32] = std::max(array[24], array[32]);
1153 array[24] = tmp;
1154 tmp = std::min(array[25], array[33]);
1155 array[33] = std::max(array[25], array[33]);
1156 array[25] = tmp;
1157 tmp = std::min(array[26], array[34]);
1158 array[34] = std::max(array[26], array[34]);
1159 array[26] = tmp;
1160 tmp = std::min(array[27], array[35]);
1161 array[35] = std::max(array[27], array[35]);
1162 array[27] = tmp;
1163 tmp = std::min(array[28], array[36]);
1164 array[36] = std::max(array[28], array[36]);
1165 array[28] = tmp;
1166 tmp = std::min(array[29], array[37]);
1167 array[37] = std::max(array[29], array[37]);
1168 array[29] = tmp;
1169 tmp = std::min(array[30], array[38]);
1170 array[38] = std::max(array[30], array[38]);
1171 array[30] = tmp;
1172 tmp = std::min(array[31], array[39]);
1173 array[39] = std::max(array[31], array[39]);
1174 array[31] = tmp;
1175 tmp = std::min(array[40], array[48]);
1176 array[48] = std::max(array[40], array[48]);
1177 array[40] = tmp;
1178 tmp = std::min(array[0], array[4]);
1179 array[4] = std::max(array[0], array[4]);
1180 array[0] = tmp;
1181 tmp = std::min(array[1], array[5]);
1182 array[5] = std::max(array[1], array[5]);
1183 array[1] = tmp;
1184 tmp = std::min(array[2], array[6]);
1185 array[6] = std::max(array[2], array[6]);
1186 array[2] = tmp;
1187 tmp = std::min(array[3], array[7]);
1188 array[7] = std::max(array[3], array[7]);
1189 array[3] = tmp;
1190 tmp = std::min(array[8], array[12]);
1191 array[12] = std::max(array[8], array[12]);
1192 array[8] = tmp;
1193 tmp = std::min(array[9], array[13]);
1194 array[13] = std::max(array[9], array[13]);
1195 array[9] = tmp;
1196 tmp = std::min(array[10], array[14]);
1197 array[14] = std::max(array[10], array[14]);
1198 array[10] = tmp;
1199 tmp = std::min(array[11], array[15]);
1200 array[15] = std::max(array[11], array[15]);
1201 array[11] = tmp;
1202 tmp = std::min(array[16], array[20]);
1203 array[20] = std::max(array[16], array[20]);
1204 array[16] = tmp;
1205 tmp = std::min(array[17], array[21]);
1206 array[21] = std::max(array[17], array[21]);
1207 array[17] = tmp;
1208 tmp = std::min(array[18], array[22]);
1209 array[22] = std::max(array[18], array[22]);
1210 array[18] = tmp;
1211 tmp = std::min(array[19], array[23]);
1212 array[23] = std::max(array[19], array[23]);
1213 array[19] = tmp;
1214 tmp = std::min(array[24], array[28]);
1215 array[28] = std::max(array[24], array[28]);
1216 array[24] = tmp;
1217 tmp = std::min(array[25], array[29]);
1218 array[29] = std::max(array[25], array[29]);
1219 array[25] = tmp;
1220 tmp = std::min(array[26], array[30]);
1221 array[30] = std::max(array[26], array[30]);
1222 array[26] = tmp;
1223 tmp = std::min(array[27], array[31]);
1224 array[31] = std::max(array[27], array[31]);
1225 array[27] = tmp;
1226 tmp = std::min(array[32], array[36]);
1227 array[36] = std::max(array[32], array[36]);
1228 array[32] = tmp;
1229 tmp = std::min(array[33], array[37]);
1230 array[37] = std::max(array[33], array[37]);
1231 array[33] = tmp;
1232 tmp = std::min(array[34], array[38]);
1233 array[38] = std::max(array[34], array[38]);
1234 array[34] = tmp;
1235 tmp = std::min(array[35], array[39]);
1236 array[39] = std::max(array[35], array[39]);
1237 array[35] = tmp;
1238 tmp = std::min(array[40], array[44]);
1239 array[44] = std::max(array[40], array[44]);
1240 array[40] = tmp;
1241 tmp = std::min(array[41], array[45]);
1242 array[45] = std::max(array[41], array[45]);
1243 array[41] = tmp;
1244 tmp = std::min(array[42], array[46]);
1245 array[46] = std::max(array[42], array[46]);
1246 array[42] = tmp;
1247 tmp = std::min(array[43], array[47]);
1248 array[47] = std::max(array[43], array[47]);
1249 array[43] = tmp;
1250 tmp = std::min(array[4], array[32]);
1251 array[32] = std::max(array[4], array[32]);
1252 array[4] = tmp;
1253 tmp = std::min(array[5], array[33]);
1254 array[33] = std::max(array[5], array[33]);
1255 array[5] = tmp;
1256 tmp = std::min(array[6], array[34]);
1257 array[34] = std::max(array[6], array[34]);
1258 array[6] = tmp;
1259 tmp = std::min(array[7], array[35]);
1260 array[35] = std::max(array[7], array[35]);
1261 array[7] = tmp;
1262 tmp = std::min(array[12], array[40]);
1263 array[40] = std::max(array[12], array[40]);
1264 array[12] = tmp;
1265 tmp = std::min(array[13], array[41]);
1266 array[41] = std::max(array[13], array[41]);
1267 array[13] = tmp;
1268 tmp = std::min(array[14], array[42]);
1269 array[42] = std::max(array[14], array[42]);
1270 array[14] = tmp;
1271 tmp = std::min(array[15], array[43]);
1272 array[43] = std::max(array[15], array[43]);
1273 array[15] = tmp;
1274 tmp = std::min(array[20], array[48]);
1275 array[48] = std::max(array[20], array[48]);
1276 array[20] = tmp;
1277 tmp = std::min(array[4], array[16]);
1278 array[16] = std::max(array[4], array[16]);
1279 array[4] = tmp;
1280 tmp = std::min(array[5], array[17]);
1281 array[17] = std::max(array[5], array[17]);
1282 array[5] = tmp;
1283 tmp = std::min(array[6], array[18]);
1284 array[18] = std::max(array[6], array[18]);
1285 array[6] = tmp;
1286 tmp = std::min(array[7], array[19]);
1287 array[19] = std::max(array[7], array[19]);
1288 array[7] = tmp;
1289 tmp = std::min(array[12], array[24]);
1290 array[24] = std::max(array[12], array[24]);
1291 array[12] = tmp;
1292 tmp = std::min(array[13], array[25]);
1293 array[25] = std::max(array[13], array[25]);
1294 array[13] = tmp;
1295 tmp = std::min(array[14], array[26]);
1296 array[26] = std::max(array[14], array[26]);
1297 array[14] = tmp;
1298 tmp = std::min(array[15], array[27]);
1299 array[27] = std::max(array[15], array[27]);
1300 array[15] = tmp;
1301 tmp = std::min(array[20], array[32]);
1302 array[32] = std::max(array[20], array[32]);
1303 array[20] = tmp;
1304 tmp = std::min(array[21], array[33]);
1305 array[33] = std::max(array[21], array[33]);
1306 array[21] = tmp;
1307 tmp = std::min(array[22], array[34]);
1308 array[34] = std::max(array[22], array[34]);
1309 array[22] = tmp;
1310 tmp = std::min(array[23], array[35]);
1311 array[35] = std::max(array[23], array[35]);
1312 array[23] = tmp;
1313 tmp = std::min(array[28], array[40]);
1314 array[40] = std::max(array[28], array[40]);
1315 array[28] = tmp;
1316 tmp = std::min(array[29], array[41]);
1317 array[41] = std::max(array[29], array[41]);
1318 array[29] = tmp;
1319 tmp = std::min(array[30], array[42]);
1320 array[42] = std::max(array[30], array[42]);
1321 array[30] = tmp;
1322 tmp = std::min(array[31], array[43]);
1323 array[43] = std::max(array[31], array[43]);
1324 array[31] = tmp;
1325 tmp = std::min(array[36], array[48]);
1326 array[48] = std::max(array[36], array[48]);
1327 array[36] = tmp;
1328 tmp = std::min(array[4], array[8]);
1329 array[8] = std::max(array[4], array[8]);
1330 array[4] = tmp;
1331 tmp = std::min(array[5], array[9]);
1332 array[9] = std::max(array[5], array[9]);
1333 array[5] = tmp;
1334 tmp = std::min(array[6], array[10]);
1335 array[10] = std::max(array[6], array[10]);
1336 array[6] = tmp;
1337 tmp = std::min(array[7], array[11]);
1338 array[11] = std::max(array[7], array[11]);
1339 array[7] = tmp;
1340 tmp = std::min(array[12], array[16]);
1341 array[16] = std::max(array[12], array[16]);
1342 array[12] = tmp;
1343 tmp = std::min(array[13], array[17]);
1344 array[17] = std::max(array[13], array[17]);
1345 array[13] = tmp;
1346 tmp = std::min(array[14], array[18]);
1347 array[18] = std::max(array[14], array[18]);
1348 array[14] = tmp;
1349 tmp = std::min(array[15], array[19]);
1350 array[19] = std::max(array[15], array[19]);
1351 array[15] = tmp;
1352 tmp = std::min(array[20], array[24]);
1353 array[24] = std::max(array[20], array[24]);
1354 array[20] = tmp;
1355 tmp = std::min(array[21], array[25]);
1356 array[25] = std::max(array[21], array[25]);
1357 array[21] = tmp;
1358 tmp = std::min(array[22], array[26]);
1359 array[26] = std::max(array[22], array[26]);
1360 array[22] = tmp;
1361 tmp = std::min(array[23], array[27]);
1362 array[27] = std::max(array[23], array[27]);
1363 array[23] = tmp;
1364 tmp = std::min(array[28], array[32]);
1365 array[32] = std::max(array[28], array[32]);
1366 array[28] = tmp;
1367 tmp = std::min(array[29], array[33]);
1368 array[33] = std::max(array[29], array[33]);
1369 array[29] = tmp;
1370 tmp = std::min(array[30], array[34]);
1371 array[34] = std::max(array[30], array[34]);
1372 array[30] = tmp;
1373 tmp = std::min(array[31], array[35]);
1374 array[35] = std::max(array[31], array[35]);
1375 array[31] = tmp;
1376 tmp = std::min(array[36], array[40]);
1377 array[40] = std::max(array[36], array[40]);
1378 array[36] = tmp;
1379 tmp = std::min(array[37], array[41]);
1380 array[41] = std::max(array[37], array[41]);
1381 array[37] = tmp;
1382 tmp = std::min(array[38], array[42]);
1383 array[42] = std::max(array[38], array[42]);
1384 array[38] = tmp;
1385 tmp = std::min(array[39], array[43]);
1386 array[43] = std::max(array[39], array[43]);
1387 array[39] = tmp;
1388 tmp = std::min(array[44], array[48]);
1389 array[48] = std::max(array[44], array[48]);
1390 array[44] = tmp;
1391 tmp = std::min(array[0], array[2]);
1392 array[2] = std::max(array[0], array[2]);
1393 array[0] = tmp;
1394 tmp = std::min(array[1], array[3]);
1395 array[3] = std::max(array[1], array[3]);
1396 array[1] = tmp;
1397 tmp = std::min(array[4], array[6]);
1398 array[6] = std::max(array[4], array[6]);
1399 array[4] = tmp;
1400 tmp = std::min(array[5], array[7]);
1401 array[7] = std::max(array[5], array[7]);
1402 array[5] = tmp;
1403 tmp = std::min(array[8], array[10]);
1404 array[10] = std::max(array[8], array[10]);
1405 array[8] = tmp;
1406 tmp = std::min(array[9], array[11]);
1407 array[11] = std::max(array[9], array[11]);
1408 array[9] = tmp;
1409 tmp = std::min(array[12], array[14]);
1410 array[14] = std::max(array[12], array[14]);
1411 array[12] = tmp;
1412 tmp = std::min(array[13], array[15]);
1413 array[15] = std::max(array[13], array[15]);
1414 array[13] = tmp;
1415 tmp = std::min(array[16], array[18]);
1416 array[18] = std::max(array[16], array[18]);
1417 array[16] = tmp;
1418 tmp = std::min(array[17], array[19]);
1419 array[19] = std::max(array[17], array[19]);
1420 array[17] = tmp;
1421 tmp = std::min(array[20], array[22]);
1422 array[22] = std::max(array[20], array[22]);
1423 array[20] = tmp;
1424 tmp = std::min(array[21], array[23]);
1425 array[23] = std::max(array[21], array[23]);
1426 array[21] = tmp;
1427 tmp = std::min(array[24], array[26]);
1428 array[26] = std::max(array[24], array[26]);
1429 array[24] = tmp;
1430 tmp = std::min(array[25], array[27]);
1431 array[27] = std::max(array[25], array[27]);
1432 array[25] = tmp;
1433 tmp = std::min(array[28], array[30]);
1434 array[30] = std::max(array[28], array[30]);
1435 array[28] = tmp;
1436 tmp = std::min(array[29], array[31]);
1437 array[31] = std::max(array[29], array[31]);
1438 array[29] = tmp;
1439 tmp = std::min(array[32], array[34]);
1440 array[34] = std::max(array[32], array[34]);
1441 array[32] = tmp;
1442 tmp = std::min(array[33], array[35]);
1443 array[35] = std::max(array[33], array[35]);
1444 array[33] = tmp;
1445 tmp = std::min(array[36], array[38]);
1446 array[38] = std::max(array[36], array[38]);
1447 array[36] = tmp;
1448 tmp = std::min(array[37], array[39]);
1449 array[39] = std::max(array[37], array[39]);
1450 array[37] = tmp;
1451 tmp = std::min(array[40], array[42]);
1452 array[42] = std::max(array[40], array[42]);
1453 array[40] = tmp;
1454 tmp = std::min(array[41], array[43]);
1455 array[43] = std::max(array[41], array[43]);
1456 array[41] = tmp;
1457 tmp = std::min(array[44], array[46]);
1458 array[46] = std::max(array[44], array[46]);
1459 array[44] = tmp;
1460 tmp = std::min(array[45], array[47]);
1461 array[47] = std::max(array[45], array[47]);
1462 array[45] = tmp;
1463 tmp = std::min(array[2], array[32]);
1464 array[32] = std::max(array[2], array[32]);
1465 array[2] = tmp;
1466 tmp = std::min(array[3], array[33]);
1467 array[33] = std::max(array[3], array[33]);
1468 array[3] = tmp;
1469 tmp = std::min(array[6], array[36]);
1470 array[36] = std::max(array[6], array[36]);
1471 array[6] = tmp;
1472 tmp = std::min(array[7], array[37]);
1473 array[37] = std::max(array[7], array[37]);
1474 array[7] = tmp;
1475 tmp = std::min(array[10], array[40]);
1476 array[40] = std::max(array[10], array[40]);
1477 array[10] = tmp;
1478 tmp = std::min(array[11], array[41]);
1479 array[41] = std::max(array[11], array[41]);
1480 array[11] = tmp;
1481 tmp = std::min(array[14], array[44]);
1482 array[44] = std::max(array[14], array[44]);
1483 array[14] = tmp;
1484 tmp = std::min(array[15], array[45]);
1485 array[45] = std::max(array[15], array[45]);
1486 array[15] = tmp;
1487 tmp = std::min(array[18], array[48]);
1488 array[48] = std::max(array[18], array[48]);
1489 array[18] = tmp;
1490 tmp = std::min(array[2], array[16]);
1491 array[16] = std::max(array[2], array[16]);
1492 array[2] = tmp;
1493 tmp = std::min(array[3], array[17]);
1494 array[17] = std::max(array[3], array[17]);
1495 array[3] = tmp;
1496 tmp = std::min(array[6], array[20]);
1497 array[20] = std::max(array[6], array[20]);
1498 array[6] = tmp;
1499 tmp = std::min(array[7], array[21]);
1500 array[21] = std::max(array[7], array[21]);
1501 array[7] = tmp;
1502 tmp = std::min(array[10], array[24]);
1503 array[24] = std::max(array[10], array[24]);
1504 array[10] = tmp;
1505 tmp = std::min(array[11], array[25]);
1506 array[25] = std::max(array[11], array[25]);
1507 array[11] = tmp;
1508 tmp = std::min(array[14], array[28]);
1509 array[28] = std::max(array[14], array[28]);
1510 array[14] = tmp;
1511 tmp = std::min(array[15], array[29]);
1512 array[29] = std::max(array[15], array[29]);
1513 array[15] = tmp;
1514 tmp = std::min(array[18], array[32]);
1515 array[32] = std::max(array[18], array[32]);
1516 array[18] = tmp;
1517 tmp = std::min(array[19], array[33]);
1518 array[33] = std::max(array[19], array[33]);
1519 array[19] = tmp;
1520 tmp = std::min(array[22], array[36]);
1521 array[36] = std::max(array[22], array[36]);
1522 array[22] = tmp;
1523 tmp = std::min(array[23], array[37]);
1524 array[37] = std::max(array[23], array[37]);
1525 array[23] = tmp;
1526 tmp = std::min(array[26], array[40]);
1527 array[40] = std::max(array[26], array[40]);
1528 array[26] = tmp;
1529 tmp = std::min(array[27], array[41]);
1530 array[41] = std::max(array[27], array[41]);
1531 array[27] = tmp;
1532 tmp = std::min(array[30], array[44]);
1533 array[44] = std::max(array[30], array[44]);
1534 array[30] = tmp;
1535 tmp = std::min(array[31], array[45]);
1536 array[45] = std::max(array[31], array[45]);
1537 array[31] = tmp;
1538 tmp = std::min(array[34], array[48]);
1539 array[48] = std::max(array[34], array[48]);
1540 array[34] = tmp;
1541 tmp = std::min(array[2], array[8]);
1542 array[8] = std::max(array[2], array[8]);
1543 array[2] = tmp;
1544 tmp = std::min(array[3], array[9]);
1545 array[9] = std::max(array[3], array[9]);
1546 array[3] = tmp;
1547 tmp = std::min(array[6], array[12]);
1548 array[12] = std::max(array[6], array[12]);
1549 array[6] = tmp;
1550 tmp = std::min(array[7], array[13]);
1551 array[13] = std::max(array[7], array[13]);
1552 array[7] = tmp;
1553 tmp = std::min(array[10], array[16]);
1554 array[16] = std::max(array[10], array[16]);
1555 array[10] = tmp;
1556 tmp = std::min(array[11], array[17]);
1557 array[17] = std::max(array[11], array[17]);
1558 array[11] = tmp;
1559 tmp = std::min(array[14], array[20]);
1560 array[20] = std::max(array[14], array[20]);
1561 array[14] = tmp;
1562 tmp = std::min(array[15], array[21]);
1563 array[21] = std::max(array[15], array[21]);
1564 array[15] = tmp;
1565 tmp = std::min(array[18], array[24]);
1566 array[24] = std::max(array[18], array[24]);
1567 array[18] = tmp;
1568 tmp = std::min(array[19], array[25]);
1569 array[25] = std::max(array[19], array[25]);
1570 array[19] = tmp;
1571 tmp = std::min(array[22], array[28]);
1572 array[28] = std::max(array[22], array[28]);
1573 array[22] = tmp;
1574 tmp = std::min(array[23], array[29]);
1575 array[29] = std::max(array[23], array[29]);
1576 array[23] = tmp;
1577 tmp = std::min(array[26], array[32]);
1578 array[32] = std::max(array[26], array[32]);
1579 array[26] = tmp;
1580 tmp = std::min(array[27], array[33]);
1581 array[33] = std::max(array[27], array[33]);
1582 array[27] = tmp;
1583 tmp = std::min(array[30], array[36]);
1584 array[36] = std::max(array[30], array[36]);
1585 array[30] = tmp;
1586 tmp = std::min(array[31], array[37]);
1587 array[37] = std::max(array[31], array[37]);
1588 array[31] = tmp;
1589 tmp = std::min(array[34], array[40]);
1590 array[40] = std::max(array[34], array[40]);
1591 array[34] = tmp;
1592 tmp = std::min(array[35], array[41]);
1593 array[41] = std::max(array[35], array[41]);
1594 array[35] = tmp;
1595 tmp = std::min(array[38], array[44]);
1596 array[44] = std::max(array[38], array[44]);
1597 array[38] = tmp;
1598 tmp = std::min(array[39], array[45]);
1599 array[45] = std::max(array[39], array[45]);
1600 array[39] = tmp;
1601 tmp = std::min(array[42], array[48]);
1602 array[48] = std::max(array[42], array[48]);
1603 array[42] = tmp;
1604 tmp = std::min(array[2], array[4]);
1605 array[4] = std::max(array[2], array[4]);
1606 array[2] = tmp;
1607 tmp = std::min(array[3], array[5]);
1608 array[5] = std::max(array[3], array[5]);
1609 array[3] = tmp;
1610 tmp = std::min(array[6], array[8]);
1611 array[8] = std::max(array[6], array[8]);
1612 array[6] = tmp;
1613 tmp = std::min(array[7], array[9]);
1614 array[9] = std::max(array[7], array[9]);
1615 array[7] = tmp;
1616 tmp = std::min(array[10], array[12]);
1617 array[12] = std::max(array[10], array[12]);
1618 array[10] = tmp;
1619 tmp = std::min(array[11], array[13]);
1620 array[13] = std::max(array[11], array[13]);
1621 array[11] = tmp;
1622 tmp = std::min(array[14], array[16]);
1623 array[16] = std::max(array[14], array[16]);
1624 array[14] = tmp;
1625 tmp = std::min(array[15], array[17]);
1626 array[17] = std::max(array[15], array[17]);
1627 array[15] = tmp;
1628 tmp = std::min(array[18], array[20]);
1629 array[20] = std::max(array[18], array[20]);
1630 array[18] = tmp;
1631 tmp = std::min(array[19], array[21]);
1632 array[21] = std::max(array[19], array[21]);
1633 array[19] = tmp;
1634 tmp = std::min(array[22], array[24]);
1635 array[24] = std::max(array[22], array[24]);
1636 array[22] = tmp;
1637 tmp = std::min(array[23], array[25]);
1638 array[25] = std::max(array[23], array[25]);
1639 array[23] = tmp;
1640 tmp = std::min(array[26], array[28]);
1641 array[28] = std::max(array[26], array[28]);
1642 array[26] = tmp;
1643 tmp = std::min(array[27], array[29]);
1644 array[29] = std::max(array[27], array[29]);
1645 array[27] = tmp;
1646 tmp = std::min(array[30], array[32]);
1647 array[32] = std::max(array[30], array[32]);
1648 array[30] = tmp;
1649 tmp = std::min(array[31], array[33]);
1650 array[33] = std::max(array[31], array[33]);
1651 array[31] = tmp;
1652 tmp = std::min(array[34], array[36]);
1653 array[36] = std::max(array[34], array[36]);
1654 array[34] = tmp;
1655 tmp = std::min(array[35], array[37]);
1656 array[37] = std::max(array[35], array[37]);
1657 array[35] = tmp;
1658 tmp = std::min(array[38], array[40]);
1659 array[40] = std::max(array[38], array[40]);
1660 array[38] = tmp;
1661 tmp = std::min(array[39], array[41]);
1662 array[41] = std::max(array[39], array[41]);
1663 array[39] = tmp;
1664 tmp = std::min(array[42], array[44]);
1665 array[44] = std::max(array[42], array[44]);
1666 array[42] = tmp;
1667 tmp = std::min(array[43], array[45]);
1668 array[45] = std::max(array[43], array[45]);
1669 array[43] = tmp;
1670 tmp = std::min(array[46], array[48]);
1671 array[48] = std::max(array[46], array[48]);
1672 array[46] = tmp;
1673 array[1] = std::max(array[0], array[1]);
1674 array[3] = std::max(array[2], array[3]);
1675 array[5] = std::max(array[4], array[5]);
1676 array[7] = std::max(array[6], array[7]);
1677 array[9] = std::max(array[8], array[9]);
1678 array[11] = std::max(array[10], array[11]);
1679 array[13] = std::max(array[12], array[13]);
1680 array[15] = std::max(array[14], array[15]);
1681 array[17] = std::max(array[16], array[17]);
1682 array[19] = std::max(array[18], array[19]);
1683 array[21] = std::max(array[20], array[21]);
1684 array[23] = std::max(array[22], array[23]);
1685 array[24] = std::min(array[24], array[25]);
1686 array[26] = std::min(array[26], array[27]);
1687 array[28] = std::min(array[28], array[29]);
1688 array[30] = std::min(array[30], array[31]);
1689 array[32] = std::min(array[32], array[33]);
1690 array[34] = std::min(array[34], array[35]);
1691 array[36] = std::min(array[36], array[37]);
1692 array[38] = std::min(array[38], array[39]);
1693 array[40] = std::min(array[40], array[41]);
1694 array[42] = std::min(array[42], array[43]);
1695 array[44] = std::min(array[44], array[45]);
1696 array[46] = std::min(array[46], array[47]);
1697 array[32] = std::max(array[1], array[32]);
1698 array[34] = std::max(array[3], array[34]);
1699 array[36] = std::max(array[5], array[36]);
1700 array[38] = std::max(array[7], array[38]);
1701 array[9] = std::min(array[9], array[40]);
1702 array[11] = std::min(array[11], array[42]);
1703 array[13] = std::min(array[13], array[44]);
1704 array[15] = std::min(array[15], array[46]);
1705 array[17] = std::min(array[17], array[48]);
1706 array[24] = std::max(array[9], array[24]);
1707 array[26] = std::max(array[11], array[26]);
1708 array[28] = std::max(array[13], array[28]);
1709 array[30] = std::max(array[15], array[30]);
1710 array[17] = std::min(array[17], array[32]);
1711 array[19] = std::min(array[19], array[34]);
1712 array[21] = std::min(array[21], array[36]);
1713 array[23] = std::min(array[23], array[38]);
1714 array[24] = std::max(array[17], array[24]);
1715 array[26] = std::max(array[19], array[26]);
1716 array[21] = std::min(array[21], array[28]);
1717 array[23] = std::min(array[23], array[30]);
1718 array[24] = std::max(array[21], array[24]);
1719 array[23] = std::min(array[23], array[26]);
1720 return std::max(array[23], array[24]);
1721 }
1722
1723 #ifdef __SSE2__
1724 template<>
median(std::array<vfloat,49> array)1725 inline vfloat median(std::array<vfloat, 49> array)
1726 {
1727 vfloat tmp = vminf(array[0], array[32]);
1728 array[32] = vmaxf(array[0], array[32]);
1729 array[0] = tmp;
1730 tmp = vminf(array[1], array[33]);
1731 array[33] = vmaxf(array[1], array[33]);
1732 array[1] = tmp;
1733 tmp = vminf(array[2], array[34]);
1734 array[34] = vmaxf(array[2], array[34]);
1735 array[2] = tmp;
1736 tmp = vminf(array[3], array[35]);
1737 array[35] = vmaxf(array[3], array[35]);
1738 array[3] = tmp;
1739 tmp = vminf(array[4], array[36]);
1740 array[36] = vmaxf(array[4], array[36]);
1741 array[4] = tmp;
1742 tmp = vminf(array[5], array[37]);
1743 array[37] = vmaxf(array[5], array[37]);
1744 array[5] = tmp;
1745 tmp = vminf(array[6], array[38]);
1746 array[38] = vmaxf(array[6], array[38]);
1747 array[6] = tmp;
1748 tmp = vminf(array[7], array[39]);
1749 array[39] = vmaxf(array[7], array[39]);
1750 array[7] = tmp;
1751 tmp = vminf(array[8], array[40]);
1752 array[40] = vmaxf(array[8], array[40]);
1753 array[8] = tmp;
1754 tmp = vminf(array[9], array[41]);
1755 array[41] = vmaxf(array[9], array[41]);
1756 array[9] = tmp;
1757 tmp = vminf(array[10], array[42]);
1758 array[42] = vmaxf(array[10], array[42]);
1759 array[10] = tmp;
1760 tmp = vminf(array[11], array[43]);
1761 array[43] = vmaxf(array[11], array[43]);
1762 array[11] = tmp;
1763 tmp = vminf(array[12], array[44]);
1764 array[44] = vmaxf(array[12], array[44]);
1765 array[12] = tmp;
1766 tmp = vminf(array[13], array[45]);
1767 array[45] = vmaxf(array[13], array[45]);
1768 array[13] = tmp;
1769 tmp = vminf(array[14], array[46]);
1770 array[46] = vmaxf(array[14], array[46]);
1771 array[14] = tmp;
1772 tmp = vminf(array[15], array[47]);
1773 array[47] = vmaxf(array[15], array[47]);
1774 array[15] = tmp;
1775 tmp = vminf(array[16], array[48]);
1776 array[48] = vmaxf(array[16], array[48]);
1777 array[16] = tmp;
1778 tmp = vminf(array[0], array[16]);
1779 array[16] = vmaxf(array[0], array[16]);
1780 array[0] = tmp;
1781 tmp = vminf(array[1], array[17]);
1782 array[17] = vmaxf(array[1], array[17]);
1783 array[1] = tmp;
1784 tmp = vminf(array[2], array[18]);
1785 array[18] = vmaxf(array[2], array[18]);
1786 array[2] = tmp;
1787 tmp = vminf(array[3], array[19]);
1788 array[19] = vmaxf(array[3], array[19]);
1789 array[3] = tmp;
1790 tmp = vminf(array[4], array[20]);
1791 array[20] = vmaxf(array[4], array[20]);
1792 array[4] = tmp;
1793 tmp = vminf(array[5], array[21]);
1794 array[21] = vmaxf(array[5], array[21]);
1795 array[5] = tmp;
1796 tmp = vminf(array[6], array[22]);
1797 array[22] = vmaxf(array[6], array[22]);
1798 array[6] = tmp;
1799 tmp = vminf(array[7], array[23]);
1800 array[23] = vmaxf(array[7], array[23]);
1801 array[7] = tmp;
1802 tmp = vminf(array[8], array[24]);
1803 array[24] = vmaxf(array[8], array[24]);
1804 array[8] = tmp;
1805 tmp = vminf(array[9], array[25]);
1806 array[25] = vmaxf(array[9], array[25]);
1807 array[9] = tmp;
1808 tmp = vminf(array[10], array[26]);
1809 array[26] = vmaxf(array[10], array[26]);
1810 array[10] = tmp;
1811 tmp = vminf(array[11], array[27]);
1812 array[27] = vmaxf(array[11], array[27]);
1813 array[11] = tmp;
1814 tmp = vminf(array[12], array[28]);
1815 array[28] = vmaxf(array[12], array[28]);
1816 array[12] = tmp;
1817 tmp = vminf(array[13], array[29]);
1818 array[29] = vmaxf(array[13], array[29]);
1819 array[13] = tmp;
1820 tmp = vminf(array[14], array[30]);
1821 array[30] = vmaxf(array[14], array[30]);
1822 array[14] = tmp;
1823 tmp = vminf(array[15], array[31]);
1824 array[31] = vmaxf(array[15], array[31]);
1825 array[15] = tmp;
1826 tmp = vminf(array[32], array[48]);
1827 array[48] = vmaxf(array[32], array[48]);
1828 array[32] = tmp;
1829 tmp = vminf(array[16], array[32]);
1830 array[32] = vmaxf(array[16], array[32]);
1831 array[16] = tmp;
1832 tmp = vminf(array[17], array[33]);
1833 array[33] = vmaxf(array[17], array[33]);
1834 array[17] = tmp;
1835 tmp = vminf(array[18], array[34]);
1836 array[34] = vmaxf(array[18], array[34]);
1837 array[18] = tmp;
1838 tmp = vminf(array[19], array[35]);
1839 array[35] = vmaxf(array[19], array[35]);
1840 array[19] = tmp;
1841 tmp = vminf(array[20], array[36]);
1842 array[36] = vmaxf(array[20], array[36]);
1843 array[20] = tmp;
1844 tmp = vminf(array[21], array[37]);
1845 array[37] = vmaxf(array[21], array[37]);
1846 array[21] = tmp;
1847 tmp = vminf(array[22], array[38]);
1848 array[38] = vmaxf(array[22], array[38]);
1849 array[22] = tmp;
1850 tmp = vminf(array[23], array[39]);
1851 array[39] = vmaxf(array[23], array[39]);
1852 array[23] = tmp;
1853 tmp = vminf(array[24], array[40]);
1854 array[40] = vmaxf(array[24], array[40]);
1855 array[24] = tmp;
1856 tmp = vminf(array[25], array[41]);
1857 array[41] = vmaxf(array[25], array[41]);
1858 array[25] = tmp;
1859 tmp = vminf(array[26], array[42]);
1860 array[42] = vmaxf(array[26], array[42]);
1861 array[26] = tmp;
1862 tmp = vminf(array[27], array[43]);
1863 array[43] = vmaxf(array[27], array[43]);
1864 array[27] = tmp;
1865 tmp = vminf(array[28], array[44]);
1866 array[44] = vmaxf(array[28], array[44]);
1867 array[28] = tmp;
1868 tmp = vminf(array[29], array[45]);
1869 array[45] = vmaxf(array[29], array[45]);
1870 array[29] = tmp;
1871 tmp = vminf(array[30], array[46]);
1872 array[46] = vmaxf(array[30], array[46]);
1873 array[30] = tmp;
1874 tmp = vminf(array[31], array[47]);
1875 array[47] = vmaxf(array[31], array[47]);
1876 array[31] = tmp;
1877 tmp = vminf(array[0], array[8]);
1878 array[8] = vmaxf(array[0], array[8]);
1879 array[0] = tmp;
1880 tmp = vminf(array[1], array[9]);
1881 array[9] = vmaxf(array[1], array[9]);
1882 array[1] = tmp;
1883 tmp = vminf(array[2], array[10]);
1884 array[10] = vmaxf(array[2], array[10]);
1885 array[2] = tmp;
1886 tmp = vminf(array[3], array[11]);
1887 array[11] = vmaxf(array[3], array[11]);
1888 array[3] = tmp;
1889 tmp = vminf(array[4], array[12]);
1890 array[12] = vmaxf(array[4], array[12]);
1891 array[4] = tmp;
1892 tmp = vminf(array[5], array[13]);
1893 array[13] = vmaxf(array[5], array[13]);
1894 array[5] = tmp;
1895 tmp = vminf(array[6], array[14]);
1896 array[14] = vmaxf(array[6], array[14]);
1897 array[6] = tmp;
1898 tmp = vminf(array[7], array[15]);
1899 array[15] = vmaxf(array[7], array[15]);
1900 array[7] = tmp;
1901 tmp = vminf(array[16], array[24]);
1902 array[24] = vmaxf(array[16], array[24]);
1903 array[16] = tmp;
1904 tmp = vminf(array[17], array[25]);
1905 array[25] = vmaxf(array[17], array[25]);
1906 array[17] = tmp;
1907 tmp = vminf(array[18], array[26]);
1908 array[26] = vmaxf(array[18], array[26]);
1909 array[18] = tmp;
1910 tmp = vminf(array[19], array[27]);
1911 array[27] = vmaxf(array[19], array[27]);
1912 array[19] = tmp;
1913 tmp = vminf(array[20], array[28]);
1914 array[28] = vmaxf(array[20], array[28]);
1915 array[20] = tmp;
1916 tmp = vminf(array[21], array[29]);
1917 array[29] = vmaxf(array[21], array[29]);
1918 array[21] = tmp;
1919 tmp = vminf(array[22], array[30]);
1920 array[30] = vmaxf(array[22], array[30]);
1921 array[22] = tmp;
1922 tmp = vminf(array[23], array[31]);
1923 array[31] = vmaxf(array[23], array[31]);
1924 array[23] = tmp;
1925 tmp = vminf(array[32], array[40]);
1926 array[40] = vmaxf(array[32], array[40]);
1927 array[32] = tmp;
1928 tmp = vminf(array[33], array[41]);
1929 array[41] = vmaxf(array[33], array[41]);
1930 array[33] = tmp;
1931 tmp = vminf(array[34], array[42]);
1932 array[42] = vmaxf(array[34], array[42]);
1933 array[34] = tmp;
1934 tmp = vminf(array[35], array[43]);
1935 array[43] = vmaxf(array[35], array[43]);
1936 array[35] = tmp;
1937 tmp = vminf(array[36], array[44]);
1938 array[44] = vmaxf(array[36], array[44]);
1939 array[36] = tmp;
1940 tmp = vminf(array[37], array[45]);
1941 array[45] = vmaxf(array[37], array[45]);
1942 array[37] = tmp;
1943 tmp = vminf(array[38], array[46]);
1944 array[46] = vmaxf(array[38], array[46]);
1945 array[38] = tmp;
1946 tmp = vminf(array[39], array[47]);
1947 array[47] = vmaxf(array[39], array[47]);
1948 array[39] = tmp;
1949 tmp = vminf(array[8], array[32]);
1950 array[32] = vmaxf(array[8], array[32]);
1951 array[8] = tmp;
1952 tmp = vminf(array[9], array[33]);
1953 array[33] = vmaxf(array[9], array[33]);
1954 array[9] = tmp;
1955 tmp = vminf(array[10], array[34]);
1956 array[34] = vmaxf(array[10], array[34]);
1957 array[10] = tmp;
1958 tmp = vminf(array[11], array[35]);
1959 array[35] = vmaxf(array[11], array[35]);
1960 array[11] = tmp;
1961 tmp = vminf(array[12], array[36]);
1962 array[36] = vmaxf(array[12], array[36]);
1963 array[12] = tmp;
1964 tmp = vminf(array[13], array[37]);
1965 array[37] = vmaxf(array[13], array[37]);
1966 array[13] = tmp;
1967 tmp = vminf(array[14], array[38]);
1968 array[38] = vmaxf(array[14], array[38]);
1969 array[14] = tmp;
1970 tmp = vminf(array[15], array[39]);
1971 array[39] = vmaxf(array[15], array[39]);
1972 array[15] = tmp;
1973 tmp = vminf(array[24], array[48]);
1974 array[48] = vmaxf(array[24], array[48]);
1975 array[24] = tmp;
1976 tmp = vminf(array[8], array[16]);
1977 array[16] = vmaxf(array[8], array[16]);
1978 array[8] = tmp;
1979 tmp = vminf(array[9], array[17]);
1980 array[17] = vmaxf(array[9], array[17]);
1981 array[9] = tmp;
1982 tmp = vminf(array[10], array[18]);
1983 array[18] = vmaxf(array[10], array[18]);
1984 array[10] = tmp;
1985 tmp = vminf(array[11], array[19]);
1986 array[19] = vmaxf(array[11], array[19]);
1987 array[11] = tmp;
1988 tmp = vminf(array[12], array[20]);
1989 array[20] = vmaxf(array[12], array[20]);
1990 array[12] = tmp;
1991 tmp = vminf(array[13], array[21]);
1992 array[21] = vmaxf(array[13], array[21]);
1993 array[13] = tmp;
1994 tmp = vminf(array[14], array[22]);
1995 array[22] = vmaxf(array[14], array[22]);
1996 array[14] = tmp;
1997 tmp = vminf(array[15], array[23]);
1998 array[23] = vmaxf(array[15], array[23]);
1999 array[15] = tmp;
2000 tmp = vminf(array[24], array[32]);
2001 array[32] = vmaxf(array[24], array[32]);
2002 array[24] = tmp;
2003 tmp = vminf(array[25], array[33]);
2004 array[33] = vmaxf(array[25], array[33]);
2005 array[25] = tmp;
2006 tmp = vminf(array[26], array[34]);
2007 array[34] = vmaxf(array[26], array[34]);
2008 array[26] = tmp;
2009 tmp = vminf(array[27], array[35]);
2010 array[35] = vmaxf(array[27], array[35]);
2011 array[27] = tmp;
2012 tmp = vminf(array[28], array[36]);
2013 array[36] = vmaxf(array[28], array[36]);
2014 array[28] = tmp;
2015 tmp = vminf(array[29], array[37]);
2016 array[37] = vmaxf(array[29], array[37]);
2017 array[29] = tmp;
2018 tmp = vminf(array[30], array[38]);
2019 array[38] = vmaxf(array[30], array[38]);
2020 array[30] = tmp;
2021 tmp = vminf(array[31], array[39]);
2022 array[39] = vmaxf(array[31], array[39]);
2023 array[31] = tmp;
2024 tmp = vminf(array[40], array[48]);
2025 array[48] = vmaxf(array[40], array[48]);
2026 array[40] = tmp;
2027 tmp = vminf(array[0], array[4]);
2028 array[4] = vmaxf(array[0], array[4]);
2029 array[0] = tmp;
2030 tmp = vminf(array[1], array[5]);
2031 array[5] = vmaxf(array[1], array[5]);
2032 array[1] = tmp;
2033 tmp = vminf(array[2], array[6]);
2034 array[6] = vmaxf(array[2], array[6]);
2035 array[2] = tmp;
2036 tmp = vminf(array[3], array[7]);
2037 array[7] = vmaxf(array[3], array[7]);
2038 array[3] = tmp;
2039 tmp = vminf(array[8], array[12]);
2040 array[12] = vmaxf(array[8], array[12]);
2041 array[8] = tmp;
2042 tmp = vminf(array[9], array[13]);
2043 array[13] = vmaxf(array[9], array[13]);
2044 array[9] = tmp;
2045 tmp = vminf(array[10], array[14]);
2046 array[14] = vmaxf(array[10], array[14]);
2047 array[10] = tmp;
2048 tmp = vminf(array[11], array[15]);
2049 array[15] = vmaxf(array[11], array[15]);
2050 array[11] = tmp;
2051 tmp = vminf(array[16], array[20]);
2052 array[20] = vmaxf(array[16], array[20]);
2053 array[16] = tmp;
2054 tmp = vminf(array[17], array[21]);
2055 array[21] = vmaxf(array[17], array[21]);
2056 array[17] = tmp;
2057 tmp = vminf(array[18], array[22]);
2058 array[22] = vmaxf(array[18], array[22]);
2059 array[18] = tmp;
2060 tmp = vminf(array[19], array[23]);
2061 array[23] = vmaxf(array[19], array[23]);
2062 array[19] = tmp;
2063 tmp = vminf(array[24], array[28]);
2064 array[28] = vmaxf(array[24], array[28]);
2065 array[24] = tmp;
2066 tmp = vminf(array[25], array[29]);
2067 array[29] = vmaxf(array[25], array[29]);
2068 array[25] = tmp;
2069 tmp = vminf(array[26], array[30]);
2070 array[30] = vmaxf(array[26], array[30]);
2071 array[26] = tmp;
2072 tmp = vminf(array[27], array[31]);
2073 array[31] = vmaxf(array[27], array[31]);
2074 array[27] = tmp;
2075 tmp = vminf(array[32], array[36]);
2076 array[36] = vmaxf(array[32], array[36]);
2077 array[32] = tmp;
2078 tmp = vminf(array[33], array[37]);
2079 array[37] = vmaxf(array[33], array[37]);
2080 array[33] = tmp;
2081 tmp = vminf(array[34], array[38]);
2082 array[38] = vmaxf(array[34], array[38]);
2083 array[34] = tmp;
2084 tmp = vminf(array[35], array[39]);
2085 array[39] = vmaxf(array[35], array[39]);
2086 array[35] = tmp;
2087 tmp = vminf(array[40], array[44]);
2088 array[44] = vmaxf(array[40], array[44]);
2089 array[40] = tmp;
2090 tmp = vminf(array[41], array[45]);
2091 array[45] = vmaxf(array[41], array[45]);
2092 array[41] = tmp;
2093 tmp = vminf(array[42], array[46]);
2094 array[46] = vmaxf(array[42], array[46]);
2095 array[42] = tmp;
2096 tmp = vminf(array[43], array[47]);
2097 array[47] = vmaxf(array[43], array[47]);
2098 array[43] = tmp;
2099 tmp = vminf(array[4], array[32]);
2100 array[32] = vmaxf(array[4], array[32]);
2101 array[4] = tmp;
2102 tmp = vminf(array[5], array[33]);
2103 array[33] = vmaxf(array[5], array[33]);
2104 array[5] = tmp;
2105 tmp = vminf(array[6], array[34]);
2106 array[34] = vmaxf(array[6], array[34]);
2107 array[6] = tmp;
2108 tmp = vminf(array[7], array[35]);
2109 array[35] = vmaxf(array[7], array[35]);
2110 array[7] = tmp;
2111 tmp = vminf(array[12], array[40]);
2112 array[40] = vmaxf(array[12], array[40]);
2113 array[12] = tmp;
2114 tmp = vminf(array[13], array[41]);
2115 array[41] = vmaxf(array[13], array[41]);
2116 array[13] = tmp;
2117 tmp = vminf(array[14], array[42]);
2118 array[42] = vmaxf(array[14], array[42]);
2119 array[14] = tmp;
2120 tmp = vminf(array[15], array[43]);
2121 array[43] = vmaxf(array[15], array[43]);
2122 array[15] = tmp;
2123 tmp = vminf(array[20], array[48]);
2124 array[48] = vmaxf(array[20], array[48]);
2125 array[20] = tmp;
2126 tmp = vminf(array[4], array[16]);
2127 array[16] = vmaxf(array[4], array[16]);
2128 array[4] = tmp;
2129 tmp = vminf(array[5], array[17]);
2130 array[17] = vmaxf(array[5], array[17]);
2131 array[5] = tmp;
2132 tmp = vminf(array[6], array[18]);
2133 array[18] = vmaxf(array[6], array[18]);
2134 array[6] = tmp;
2135 tmp = vminf(array[7], array[19]);
2136 array[19] = vmaxf(array[7], array[19]);
2137 array[7] = tmp;
2138 tmp = vminf(array[12], array[24]);
2139 array[24] = vmaxf(array[12], array[24]);
2140 array[12] = tmp;
2141 tmp = vminf(array[13], array[25]);
2142 array[25] = vmaxf(array[13], array[25]);
2143 array[13] = tmp;
2144 tmp = vminf(array[14], array[26]);
2145 array[26] = vmaxf(array[14], array[26]);
2146 array[14] = tmp;
2147 tmp = vminf(array[15], array[27]);
2148 array[27] = vmaxf(array[15], array[27]);
2149 array[15] = tmp;
2150 tmp = vminf(array[20], array[32]);
2151 array[32] = vmaxf(array[20], array[32]);
2152 array[20] = tmp;
2153 tmp = vminf(array[21], array[33]);
2154 array[33] = vmaxf(array[21], array[33]);
2155 array[21] = tmp;
2156 tmp = vminf(array[22], array[34]);
2157 array[34] = vmaxf(array[22], array[34]);
2158 array[22] = tmp;
2159 tmp = vminf(array[23], array[35]);
2160 array[35] = vmaxf(array[23], array[35]);
2161 array[23] = tmp;
2162 tmp = vminf(array[28], array[40]);
2163 array[40] = vmaxf(array[28], array[40]);
2164 array[28] = tmp;
2165 tmp = vminf(array[29], array[41]);
2166 array[41] = vmaxf(array[29], array[41]);
2167 array[29] = tmp;
2168 tmp = vminf(array[30], array[42]);
2169 array[42] = vmaxf(array[30], array[42]);
2170 array[30] = tmp;
2171 tmp = vminf(array[31], array[43]);
2172 array[43] = vmaxf(array[31], array[43]);
2173 array[31] = tmp;
2174 tmp = vminf(array[36], array[48]);
2175 array[48] = vmaxf(array[36], array[48]);
2176 array[36] = tmp;
2177 tmp = vminf(array[4], array[8]);
2178 array[8] = vmaxf(array[4], array[8]);
2179 array[4] = tmp;
2180 tmp = vminf(array[5], array[9]);
2181 array[9] = vmaxf(array[5], array[9]);
2182 array[5] = tmp;
2183 tmp = vminf(array[6], array[10]);
2184 array[10] = vmaxf(array[6], array[10]);
2185 array[6] = tmp;
2186 tmp = vminf(array[7], array[11]);
2187 array[11] = vmaxf(array[7], array[11]);
2188 array[7] = tmp;
2189 tmp = vminf(array[12], array[16]);
2190 array[16] = vmaxf(array[12], array[16]);
2191 array[12] = tmp;
2192 tmp = vminf(array[13], array[17]);
2193 array[17] = vmaxf(array[13], array[17]);
2194 array[13] = tmp;
2195 tmp = vminf(array[14], array[18]);
2196 array[18] = vmaxf(array[14], array[18]);
2197 array[14] = tmp;
2198 tmp = vminf(array[15], array[19]);
2199 array[19] = vmaxf(array[15], array[19]);
2200 array[15] = tmp;
2201 tmp = vminf(array[20], array[24]);
2202 array[24] = vmaxf(array[20], array[24]);
2203 array[20] = tmp;
2204 tmp = vminf(array[21], array[25]);
2205 array[25] = vmaxf(array[21], array[25]);
2206 array[21] = tmp;
2207 tmp = vminf(array[22], array[26]);
2208 array[26] = vmaxf(array[22], array[26]);
2209 array[22] = tmp;
2210 tmp = vminf(array[23], array[27]);
2211 array[27] = vmaxf(array[23], array[27]);
2212 array[23] = tmp;
2213 tmp = vminf(array[28], array[32]);
2214 array[32] = vmaxf(array[28], array[32]);
2215 array[28] = tmp;
2216 tmp = vminf(array[29], array[33]);
2217 array[33] = vmaxf(array[29], array[33]);
2218 array[29] = tmp;
2219 tmp = vminf(array[30], array[34]);
2220 array[34] = vmaxf(array[30], array[34]);
2221 array[30] = tmp;
2222 tmp = vminf(array[31], array[35]);
2223 array[35] = vmaxf(array[31], array[35]);
2224 array[31] = tmp;
2225 tmp = vminf(array[36], array[40]);
2226 array[40] = vmaxf(array[36], array[40]);
2227 array[36] = tmp;
2228 tmp = vminf(array[37], array[41]);
2229 array[41] = vmaxf(array[37], array[41]);
2230 array[37] = tmp;
2231 tmp = vminf(array[38], array[42]);
2232 array[42] = vmaxf(array[38], array[42]);
2233 array[38] = tmp;
2234 tmp = vminf(array[39], array[43]);
2235 array[43] = vmaxf(array[39], array[43]);
2236 array[39] = tmp;
2237 tmp = vminf(array[44], array[48]);
2238 array[48] = vmaxf(array[44], array[48]);
2239 array[44] = tmp;
2240 tmp = vminf(array[0], array[2]);
2241 array[2] = vmaxf(array[0], array[2]);
2242 array[0] = tmp;
2243 tmp = vminf(array[1], array[3]);
2244 array[3] = vmaxf(array[1], array[3]);
2245 array[1] = tmp;
2246 tmp = vminf(array[4], array[6]);
2247 array[6] = vmaxf(array[4], array[6]);
2248 array[4] = tmp;
2249 tmp = vminf(array[5], array[7]);
2250 array[7] = vmaxf(array[5], array[7]);
2251 array[5] = tmp;
2252 tmp = vminf(array[8], array[10]);
2253 array[10] = vmaxf(array[8], array[10]);
2254 array[8] = tmp;
2255 tmp = vminf(array[9], array[11]);
2256 array[11] = vmaxf(array[9], array[11]);
2257 array[9] = tmp;
2258 tmp = vminf(array[12], array[14]);
2259 array[14] = vmaxf(array[12], array[14]);
2260 array[12] = tmp;
2261 tmp = vminf(array[13], array[15]);
2262 array[15] = vmaxf(array[13], array[15]);
2263 array[13] = tmp;
2264 tmp = vminf(array[16], array[18]);
2265 array[18] = vmaxf(array[16], array[18]);
2266 array[16] = tmp;
2267 tmp = vminf(array[17], array[19]);
2268 array[19] = vmaxf(array[17], array[19]);
2269 array[17] = tmp;
2270 tmp = vminf(array[20], array[22]);
2271 array[22] = vmaxf(array[20], array[22]);
2272 array[20] = tmp;
2273 tmp = vminf(array[21], array[23]);
2274 array[23] = vmaxf(array[21], array[23]);
2275 array[21] = tmp;
2276 tmp = vminf(array[24], array[26]);
2277 array[26] = vmaxf(array[24], array[26]);
2278 array[24] = tmp;
2279 tmp = vminf(array[25], array[27]);
2280 array[27] = vmaxf(array[25], array[27]);
2281 array[25] = tmp;
2282 tmp = vminf(array[28], array[30]);
2283 array[30] = vmaxf(array[28], array[30]);
2284 array[28] = tmp;
2285 tmp = vminf(array[29], array[31]);
2286 array[31] = vmaxf(array[29], array[31]);
2287 array[29] = tmp;
2288 tmp = vminf(array[32], array[34]);
2289 array[34] = vmaxf(array[32], array[34]);
2290 array[32] = tmp;
2291 tmp = vminf(array[33], array[35]);
2292 array[35] = vmaxf(array[33], array[35]);
2293 array[33] = tmp;
2294 tmp = vminf(array[36], array[38]);
2295 array[38] = vmaxf(array[36], array[38]);
2296 array[36] = tmp;
2297 tmp = vminf(array[37], array[39]);
2298 array[39] = vmaxf(array[37], array[39]);
2299 array[37] = tmp;
2300 tmp = vminf(array[40], array[42]);
2301 array[42] = vmaxf(array[40], array[42]);
2302 array[40] = tmp;
2303 tmp = vminf(array[41], array[43]);
2304 array[43] = vmaxf(array[41], array[43]);
2305 array[41] = tmp;
2306 tmp = vminf(array[44], array[46]);
2307 array[46] = vmaxf(array[44], array[46]);
2308 array[44] = tmp;
2309 tmp = vminf(array[45], array[47]);
2310 array[47] = vmaxf(array[45], array[47]);
2311 array[45] = tmp;
2312 tmp = vminf(array[2], array[32]);
2313 array[32] = vmaxf(array[2], array[32]);
2314 array[2] = tmp;
2315 tmp = vminf(array[3], array[33]);
2316 array[33] = vmaxf(array[3], array[33]);
2317 array[3] = tmp;
2318 tmp = vminf(array[6], array[36]);
2319 array[36] = vmaxf(array[6], array[36]);
2320 array[6] = tmp;
2321 tmp = vminf(array[7], array[37]);
2322 array[37] = vmaxf(array[7], array[37]);
2323 array[7] = tmp;
2324 tmp = vminf(array[10], array[40]);
2325 array[40] = vmaxf(array[10], array[40]);
2326 array[10] = tmp;
2327 tmp = vminf(array[11], array[41]);
2328 array[41] = vmaxf(array[11], array[41]);
2329 array[11] = tmp;
2330 tmp = vminf(array[14], array[44]);
2331 array[44] = vmaxf(array[14], array[44]);
2332 array[14] = tmp;
2333 tmp = vminf(array[15], array[45]);
2334 array[45] = vmaxf(array[15], array[45]);
2335 array[15] = tmp;
2336 tmp = vminf(array[18], array[48]);
2337 array[48] = vmaxf(array[18], array[48]);
2338 array[18] = tmp;
2339 tmp = vminf(array[2], array[16]);
2340 array[16] = vmaxf(array[2], array[16]);
2341 array[2] = tmp;
2342 tmp = vminf(array[3], array[17]);
2343 array[17] = vmaxf(array[3], array[17]);
2344 array[3] = tmp;
2345 tmp = vminf(array[6], array[20]);
2346 array[20] = vmaxf(array[6], array[20]);
2347 array[6] = tmp;
2348 tmp = vminf(array[7], array[21]);
2349 array[21] = vmaxf(array[7], array[21]);
2350 array[7] = tmp;
2351 tmp = vminf(array[10], array[24]);
2352 array[24] = vmaxf(array[10], array[24]);
2353 array[10] = tmp;
2354 tmp = vminf(array[11], array[25]);
2355 array[25] = vmaxf(array[11], array[25]);
2356 array[11] = tmp;
2357 tmp = vminf(array[14], array[28]);
2358 array[28] = vmaxf(array[14], array[28]);
2359 array[14] = tmp;
2360 tmp = vminf(array[15], array[29]);
2361 array[29] = vmaxf(array[15], array[29]);
2362 array[15] = tmp;
2363 tmp = vminf(array[18], array[32]);
2364 array[32] = vmaxf(array[18], array[32]);
2365 array[18] = tmp;
2366 tmp = vminf(array[19], array[33]);
2367 array[33] = vmaxf(array[19], array[33]);
2368 array[19] = tmp;
2369 tmp = vminf(array[22], array[36]);
2370 array[36] = vmaxf(array[22], array[36]);
2371 array[22] = tmp;
2372 tmp = vminf(array[23], array[37]);
2373 array[37] = vmaxf(array[23], array[37]);
2374 array[23] = tmp;
2375 tmp = vminf(array[26], array[40]);
2376 array[40] = vmaxf(array[26], array[40]);
2377 array[26] = tmp;
2378 tmp = vminf(array[27], array[41]);
2379 array[41] = vmaxf(array[27], array[41]);
2380 array[27] = tmp;
2381 tmp = vminf(array[30], array[44]);
2382 array[44] = vmaxf(array[30], array[44]);
2383 array[30] = tmp;
2384 tmp = vminf(array[31], array[45]);
2385 array[45] = vmaxf(array[31], array[45]);
2386 array[31] = tmp;
2387 tmp = vminf(array[34], array[48]);
2388 array[48] = vmaxf(array[34], array[48]);
2389 array[34] = tmp;
2390 tmp = vminf(array[2], array[8]);
2391 array[8] = vmaxf(array[2], array[8]);
2392 array[2] = tmp;
2393 tmp = vminf(array[3], array[9]);
2394 array[9] = vmaxf(array[3], array[9]);
2395 array[3] = tmp;
2396 tmp = vminf(array[6], array[12]);
2397 array[12] = vmaxf(array[6], array[12]);
2398 array[6] = tmp;
2399 tmp = vminf(array[7], array[13]);
2400 array[13] = vmaxf(array[7], array[13]);
2401 array[7] = tmp;
2402 tmp = vminf(array[10], array[16]);
2403 array[16] = vmaxf(array[10], array[16]);
2404 array[10] = tmp;
2405 tmp = vminf(array[11], array[17]);
2406 array[17] = vmaxf(array[11], array[17]);
2407 array[11] = tmp;
2408 tmp = vminf(array[14], array[20]);
2409 array[20] = vmaxf(array[14], array[20]);
2410 array[14] = tmp;
2411 tmp = vminf(array[15], array[21]);
2412 array[21] = vmaxf(array[15], array[21]);
2413 array[15] = tmp;
2414 tmp = vminf(array[18], array[24]);
2415 array[24] = vmaxf(array[18], array[24]);
2416 array[18] = tmp;
2417 tmp = vminf(array[19], array[25]);
2418 array[25] = vmaxf(array[19], array[25]);
2419 array[19] = tmp;
2420 tmp = vminf(array[22], array[28]);
2421 array[28] = vmaxf(array[22], array[28]);
2422 array[22] = tmp;
2423 tmp = vminf(array[23], array[29]);
2424 array[29] = vmaxf(array[23], array[29]);
2425 array[23] = tmp;
2426 tmp = vminf(array[26], array[32]);
2427 array[32] = vmaxf(array[26], array[32]);
2428 array[26] = tmp;
2429 tmp = vminf(array[27], array[33]);
2430 array[33] = vmaxf(array[27], array[33]);
2431 array[27] = tmp;
2432 tmp = vminf(array[30], array[36]);
2433 array[36] = vmaxf(array[30], array[36]);
2434 array[30] = tmp;
2435 tmp = vminf(array[31], array[37]);
2436 array[37] = vmaxf(array[31], array[37]);
2437 array[31] = tmp;
2438 tmp = vminf(array[34], array[40]);
2439 array[40] = vmaxf(array[34], array[40]);
2440 array[34] = tmp;
2441 tmp = vminf(array[35], array[41]);
2442 array[41] = vmaxf(array[35], array[41]);
2443 array[35] = tmp;
2444 tmp = vminf(array[38], array[44]);
2445 array[44] = vmaxf(array[38], array[44]);
2446 array[38] = tmp;
2447 tmp = vminf(array[39], array[45]);
2448 array[45] = vmaxf(array[39], array[45]);
2449 array[39] = tmp;
2450 tmp = vminf(array[42], array[48]);
2451 array[48] = vmaxf(array[42], array[48]);
2452 array[42] = tmp;
2453 tmp = vminf(array[2], array[4]);
2454 array[4] = vmaxf(array[2], array[4]);
2455 array[2] = tmp;
2456 tmp = vminf(array[3], array[5]);
2457 array[5] = vmaxf(array[3], array[5]);
2458 array[3] = tmp;
2459 tmp = vminf(array[6], array[8]);
2460 array[8] = vmaxf(array[6], array[8]);
2461 array[6] = tmp;
2462 tmp = vminf(array[7], array[9]);
2463 array[9] = vmaxf(array[7], array[9]);
2464 array[7] = tmp;
2465 tmp = vminf(array[10], array[12]);
2466 array[12] = vmaxf(array[10], array[12]);
2467 array[10] = tmp;
2468 tmp = vminf(array[11], array[13]);
2469 array[13] = vmaxf(array[11], array[13]);
2470 array[11] = tmp;
2471 tmp = vminf(array[14], array[16]);
2472 array[16] = vmaxf(array[14], array[16]);
2473 array[14] = tmp;
2474 tmp = vminf(array[15], array[17]);
2475 array[17] = vmaxf(array[15], array[17]);
2476 array[15] = tmp;
2477 tmp = vminf(array[18], array[20]);
2478 array[20] = vmaxf(array[18], array[20]);
2479 array[18] = tmp;
2480 tmp = vminf(array[19], array[21]);
2481 array[21] = vmaxf(array[19], array[21]);
2482 array[19] = tmp;
2483 tmp = vminf(array[22], array[24]);
2484 array[24] = vmaxf(array[22], array[24]);
2485 array[22] = tmp;
2486 tmp = vminf(array[23], array[25]);
2487 array[25] = vmaxf(array[23], array[25]);
2488 array[23] = tmp;
2489 tmp = vminf(array[26], array[28]);
2490 array[28] = vmaxf(array[26], array[28]);
2491 array[26] = tmp;
2492 tmp = vminf(array[27], array[29]);
2493 array[29] = vmaxf(array[27], array[29]);
2494 array[27] = tmp;
2495 tmp = vminf(array[30], array[32]);
2496 array[32] = vmaxf(array[30], array[32]);
2497 array[30] = tmp;
2498 tmp = vminf(array[31], array[33]);
2499 array[33] = vmaxf(array[31], array[33]);
2500 array[31] = tmp;
2501 tmp = vminf(array[34], array[36]);
2502 array[36] = vmaxf(array[34], array[36]);
2503 array[34] = tmp;
2504 tmp = vminf(array[35], array[37]);
2505 array[37] = vmaxf(array[35], array[37]);
2506 array[35] = tmp;
2507 tmp = vminf(array[38], array[40]);
2508 array[40] = vmaxf(array[38], array[40]);
2509 array[38] = tmp;
2510 tmp = vminf(array[39], array[41]);
2511 array[41] = vmaxf(array[39], array[41]);
2512 array[39] = tmp;
2513 tmp = vminf(array[42], array[44]);
2514 array[44] = vmaxf(array[42], array[44]);
2515 array[42] = tmp;
2516 tmp = vminf(array[43], array[45]);
2517 array[45] = vmaxf(array[43], array[45]);
2518 array[43] = tmp;
2519 tmp = vminf(array[46], array[48]);
2520 array[48] = vmaxf(array[46], array[48]);
2521 array[46] = tmp;
2522 array[1] = vmaxf(array[0], array[1]);
2523 array[3] = vmaxf(array[2], array[3]);
2524 array[5] = vmaxf(array[4], array[5]);
2525 array[7] = vmaxf(array[6], array[7]);
2526 array[9] = vmaxf(array[8], array[9]);
2527 array[11] = vmaxf(array[10], array[11]);
2528 array[13] = vmaxf(array[12], array[13]);
2529 array[15] = vmaxf(array[14], array[15]);
2530 array[17] = vmaxf(array[16], array[17]);
2531 array[19] = vmaxf(array[18], array[19]);
2532 array[21] = vmaxf(array[20], array[21]);
2533 array[23] = vmaxf(array[22], array[23]);
2534 array[24] = vminf(array[24], array[25]);
2535 array[26] = vminf(array[26], array[27]);
2536 array[28] = vminf(array[28], array[29]);
2537 array[30] = vminf(array[30], array[31]);
2538 array[32] = vminf(array[32], array[33]);
2539 array[34] = vminf(array[34], array[35]);
2540 array[36] = vminf(array[36], array[37]);
2541 array[38] = vminf(array[38], array[39]);
2542 array[40] = vminf(array[40], array[41]);
2543 array[42] = vminf(array[42], array[43]);
2544 array[44] = vminf(array[44], array[45]);
2545 array[46] = vminf(array[46], array[47]);
2546 array[32] = vmaxf(array[1], array[32]);
2547 array[34] = vmaxf(array[3], array[34]);
2548 array[36] = vmaxf(array[5], array[36]);
2549 array[38] = vmaxf(array[7], array[38]);
2550 array[9] = vminf(array[9], array[40]);
2551 array[11] = vminf(array[11], array[42]);
2552 array[13] = vminf(array[13], array[44]);
2553 array[15] = vminf(array[15], array[46]);
2554 array[17] = vminf(array[17], array[48]);
2555 array[24] = vmaxf(array[9], array[24]);
2556 array[26] = vmaxf(array[11], array[26]);
2557 array[28] = vmaxf(array[13], array[28]);
2558 array[30] = vmaxf(array[15], array[30]);
2559 array[17] = vminf(array[17], array[32]);
2560 array[19] = vminf(array[19], array[34]);
2561 array[21] = vminf(array[21], array[36]);
2562 array[23] = vminf(array[23], array[38]);
2563 array[24] = vmaxf(array[17], array[24]);
2564 array[26] = vmaxf(array[19], array[26]);
2565 array[21] = vminf(array[21], array[28]);
2566 array[23] = vminf(array[23], array[30]);
2567 array[24] = vmaxf(array[21], array[24]);
2568 array[23] = vminf(array[23], array[26]);
2569 return vmaxf(array[23], array[24]);
2570 }
2571 #endif
2572
2573 template<typename T>
median(std::array<T,81> array)2574 inline T median(std::array<T, 81> array)
2575 {
2576 T tmp = std::min(array[0], array[64]);
2577 array[64] = std::max(array[0], array[64]);
2578 array[0] = tmp;
2579 tmp = std::min(array[1], array[65]);
2580 array[65] = std::max(array[1], array[65]);
2581 array[1] = tmp;
2582 tmp = std::min(array[2], array[66]);
2583 array[66] = std::max(array[2], array[66]);
2584 array[2] = tmp;
2585 tmp = std::min(array[3], array[67]);
2586 array[67] = std::max(array[3], array[67]);
2587 array[3] = tmp;
2588 tmp = std::min(array[4], array[68]);
2589 array[68] = std::max(array[4], array[68]);
2590 array[4] = tmp;
2591 tmp = std::min(array[5], array[69]);
2592 array[69] = std::max(array[5], array[69]);
2593 array[5] = tmp;
2594 tmp = std::min(array[6], array[70]);
2595 array[70] = std::max(array[6], array[70]);
2596 array[6] = tmp;
2597 tmp = std::min(array[7], array[71]);
2598 array[71] = std::max(array[7], array[71]);
2599 array[7] = tmp;
2600 tmp = std::min(array[8], array[72]);
2601 array[72] = std::max(array[8], array[72]);
2602 array[8] = tmp;
2603 tmp = std::min(array[9], array[73]);
2604 array[73] = std::max(array[9], array[73]);
2605 array[9] = tmp;
2606 tmp = std::min(array[10], array[74]);
2607 array[74] = std::max(array[10], array[74]);
2608 array[10] = tmp;
2609 tmp = std::min(array[11], array[75]);
2610 array[75] = std::max(array[11], array[75]);
2611 array[11] = tmp;
2612 tmp = std::min(array[12], array[76]);
2613 array[76] = std::max(array[12], array[76]);
2614 array[12] = tmp;
2615 tmp = std::min(array[13], array[77]);
2616 array[77] = std::max(array[13], array[77]);
2617 array[13] = tmp;
2618 tmp = std::min(array[14], array[78]);
2619 array[78] = std::max(array[14], array[78]);
2620 array[14] = tmp;
2621 tmp = std::min(array[15], array[79]);
2622 array[79] = std::max(array[15], array[79]);
2623 array[15] = tmp;
2624 tmp = std::min(array[16], array[80]);
2625 array[80] = std::max(array[16], array[80]);
2626 array[16] = tmp;
2627 tmp = std::min(array[0], array[32]);
2628 array[32] = std::max(array[0], array[32]);
2629 array[0] = tmp;
2630 tmp = std::min(array[1], array[33]);
2631 array[33] = std::max(array[1], array[33]);
2632 array[1] = tmp;
2633 tmp = std::min(array[2], array[34]);
2634 array[34] = std::max(array[2], array[34]);
2635 array[2] = tmp;
2636 tmp = std::min(array[3], array[35]);
2637 array[35] = std::max(array[3], array[35]);
2638 array[3] = tmp;
2639 tmp = std::min(array[4], array[36]);
2640 array[36] = std::max(array[4], array[36]);
2641 array[4] = tmp;
2642 tmp = std::min(array[5], array[37]);
2643 array[37] = std::max(array[5], array[37]);
2644 array[5] = tmp;
2645 tmp = std::min(array[6], array[38]);
2646 array[38] = std::max(array[6], array[38]);
2647 array[6] = tmp;
2648 tmp = std::min(array[7], array[39]);
2649 array[39] = std::max(array[7], array[39]);
2650 array[7] = tmp;
2651 tmp = std::min(array[8], array[40]);
2652 array[40] = std::max(array[8], array[40]);
2653 array[8] = tmp;
2654 tmp = std::min(array[9], array[41]);
2655 array[41] = std::max(array[9], array[41]);
2656 array[9] = tmp;
2657 tmp = std::min(array[10], array[42]);
2658 array[42] = std::max(array[10], array[42]);
2659 array[10] = tmp;
2660 tmp = std::min(array[11], array[43]);
2661 array[43] = std::max(array[11], array[43]);
2662 array[11] = tmp;
2663 tmp = std::min(array[12], array[44]);
2664 array[44] = std::max(array[12], array[44]);
2665 array[12] = tmp;
2666 tmp = std::min(array[13], array[45]);
2667 array[45] = std::max(array[13], array[45]);
2668 array[13] = tmp;
2669 tmp = std::min(array[14], array[46]);
2670 array[46] = std::max(array[14], array[46]);
2671 array[14] = tmp;
2672 tmp = std::min(array[15], array[47]);
2673 array[47] = std::max(array[15], array[47]);
2674 array[15] = tmp;
2675 tmp = std::min(array[16], array[48]);
2676 array[48] = std::max(array[16], array[48]);
2677 array[16] = tmp;
2678 tmp = std::min(array[17], array[49]);
2679 array[49] = std::max(array[17], array[49]);
2680 array[17] = tmp;
2681 tmp = std::min(array[18], array[50]);
2682 array[50] = std::max(array[18], array[50]);
2683 array[18] = tmp;
2684 tmp = std::min(array[19], array[51]);
2685 array[51] = std::max(array[19], array[51]);
2686 array[19] = tmp;
2687 tmp = std::min(array[20], array[52]);
2688 array[52] = std::max(array[20], array[52]);
2689 array[20] = tmp;
2690 tmp = std::min(array[21], array[53]);
2691 array[53] = std::max(array[21], array[53]);
2692 array[21] = tmp;
2693 tmp = std::min(array[22], array[54]);
2694 array[54] = std::max(array[22], array[54]);
2695 array[22] = tmp;
2696 tmp = std::min(array[23], array[55]);
2697 array[55] = std::max(array[23], array[55]);
2698 array[23] = tmp;
2699 tmp = std::min(array[24], array[56]);
2700 array[56] = std::max(array[24], array[56]);
2701 array[24] = tmp;
2702 tmp = std::min(array[25], array[57]);
2703 array[57] = std::max(array[25], array[57]);
2704 array[25] = tmp;
2705 tmp = std::min(array[26], array[58]);
2706 array[58] = std::max(array[26], array[58]);
2707 array[26] = tmp;
2708 tmp = std::min(array[27], array[59]);
2709 array[59] = std::max(array[27], array[59]);
2710 array[27] = tmp;
2711 tmp = std::min(array[28], array[60]);
2712 array[60] = std::max(array[28], array[60]);
2713 array[28] = tmp;
2714 tmp = std::min(array[29], array[61]);
2715 array[61] = std::max(array[29], array[61]);
2716 array[29] = tmp;
2717 tmp = std::min(array[30], array[62]);
2718 array[62] = std::max(array[30], array[62]);
2719 array[30] = tmp;
2720 tmp = std::min(array[31], array[63]);
2721 array[63] = std::max(array[31], array[63]);
2722 array[31] = tmp;
2723 tmp = std::min(array[32], array[64]);
2724 array[64] = std::max(array[32], array[64]);
2725 array[32] = tmp;
2726 tmp = std::min(array[33], array[65]);
2727 array[65] = std::max(array[33], array[65]);
2728 array[33] = tmp;
2729 tmp = std::min(array[34], array[66]);
2730 array[66] = std::max(array[34], array[66]);
2731 array[34] = tmp;
2732 tmp = std::min(array[35], array[67]);
2733 array[67] = std::max(array[35], array[67]);
2734 array[35] = tmp;
2735 tmp = std::min(array[36], array[68]);
2736 array[68] = std::max(array[36], array[68]);
2737 array[36] = tmp;
2738 tmp = std::min(array[37], array[69]);
2739 array[69] = std::max(array[37], array[69]);
2740 array[37] = tmp;
2741 tmp = std::min(array[38], array[70]);
2742 array[70] = std::max(array[38], array[70]);
2743 array[38] = tmp;
2744 tmp = std::min(array[39], array[71]);
2745 array[71] = std::max(array[39], array[71]);
2746 array[39] = tmp;
2747 tmp = std::min(array[40], array[72]);
2748 array[72] = std::max(array[40], array[72]);
2749 array[40] = tmp;
2750 tmp = std::min(array[41], array[73]);
2751 array[73] = std::max(array[41], array[73]);
2752 array[41] = tmp;
2753 tmp = std::min(array[42], array[74]);
2754 array[74] = std::max(array[42], array[74]);
2755 array[42] = tmp;
2756 tmp = std::min(array[43], array[75]);
2757 array[75] = std::max(array[43], array[75]);
2758 array[43] = tmp;
2759 tmp = std::min(array[44], array[76]);
2760 array[76] = std::max(array[44], array[76]);
2761 array[44] = tmp;
2762 tmp = std::min(array[45], array[77]);
2763 array[77] = std::max(array[45], array[77]);
2764 array[45] = tmp;
2765 tmp = std::min(array[46], array[78]);
2766 array[78] = std::max(array[46], array[78]);
2767 array[46] = tmp;
2768 tmp = std::min(array[47], array[79]);
2769 array[79] = std::max(array[47], array[79]);
2770 array[47] = tmp;
2771 tmp = std::min(array[48], array[80]);
2772 array[80] = std::max(array[48], array[80]);
2773 array[48] = tmp;
2774 tmp = std::min(array[0], array[16]);
2775 array[16] = std::max(array[0], array[16]);
2776 array[0] = tmp;
2777 tmp = std::min(array[1], array[17]);
2778 array[17] = std::max(array[1], array[17]);
2779 array[1] = tmp;
2780 tmp = std::min(array[2], array[18]);
2781 array[18] = std::max(array[2], array[18]);
2782 array[2] = tmp;
2783 tmp = std::min(array[3], array[19]);
2784 array[19] = std::max(array[3], array[19]);
2785 array[3] = tmp;
2786 tmp = std::min(array[4], array[20]);
2787 array[20] = std::max(array[4], array[20]);
2788 array[4] = tmp;
2789 tmp = std::min(array[5], array[21]);
2790 array[21] = std::max(array[5], array[21]);
2791 array[5] = tmp;
2792 tmp = std::min(array[6], array[22]);
2793 array[22] = std::max(array[6], array[22]);
2794 array[6] = tmp;
2795 tmp = std::min(array[7], array[23]);
2796 array[23] = std::max(array[7], array[23]);
2797 array[7] = tmp;
2798 tmp = std::min(array[8], array[24]);
2799 array[24] = std::max(array[8], array[24]);
2800 array[8] = tmp;
2801 tmp = std::min(array[9], array[25]);
2802 array[25] = std::max(array[9], array[25]);
2803 array[9] = tmp;
2804 tmp = std::min(array[10], array[26]);
2805 array[26] = std::max(array[10], array[26]);
2806 array[10] = tmp;
2807 tmp = std::min(array[11], array[27]);
2808 array[27] = std::max(array[11], array[27]);
2809 array[11] = tmp;
2810 tmp = std::min(array[12], array[28]);
2811 array[28] = std::max(array[12], array[28]);
2812 array[12] = tmp;
2813 tmp = std::min(array[13], array[29]);
2814 array[29] = std::max(array[13], array[29]);
2815 array[13] = tmp;
2816 tmp = std::min(array[14], array[30]);
2817 array[30] = std::max(array[14], array[30]);
2818 array[14] = tmp;
2819 tmp = std::min(array[15], array[31]);
2820 array[31] = std::max(array[15], array[31]);
2821 array[15] = tmp;
2822 tmp = std::min(array[32], array[48]);
2823 array[48] = std::max(array[32], array[48]);
2824 array[32] = tmp;
2825 tmp = std::min(array[33], array[49]);
2826 array[49] = std::max(array[33], array[49]);
2827 array[33] = tmp;
2828 tmp = std::min(array[34], array[50]);
2829 array[50] = std::max(array[34], array[50]);
2830 array[34] = tmp;
2831 tmp = std::min(array[35], array[51]);
2832 array[51] = std::max(array[35], array[51]);
2833 array[35] = tmp;
2834 tmp = std::min(array[36], array[52]);
2835 array[52] = std::max(array[36], array[52]);
2836 array[36] = tmp;
2837 tmp = std::min(array[37], array[53]);
2838 array[53] = std::max(array[37], array[53]);
2839 array[37] = tmp;
2840 tmp = std::min(array[38], array[54]);
2841 array[54] = std::max(array[38], array[54]);
2842 array[38] = tmp;
2843 tmp = std::min(array[39], array[55]);
2844 array[55] = std::max(array[39], array[55]);
2845 array[39] = tmp;
2846 tmp = std::min(array[40], array[56]);
2847 array[56] = std::max(array[40], array[56]);
2848 array[40] = tmp;
2849 tmp = std::min(array[41], array[57]);
2850 array[57] = std::max(array[41], array[57]);
2851 array[41] = tmp;
2852 tmp = std::min(array[42], array[58]);
2853 array[58] = std::max(array[42], array[58]);
2854 array[42] = tmp;
2855 tmp = std::min(array[43], array[59]);
2856 array[59] = std::max(array[43], array[59]);
2857 array[43] = tmp;
2858 tmp = std::min(array[44], array[60]);
2859 array[60] = std::max(array[44], array[60]);
2860 array[44] = tmp;
2861 tmp = std::min(array[45], array[61]);
2862 array[61] = std::max(array[45], array[61]);
2863 array[45] = tmp;
2864 tmp = std::min(array[46], array[62]);
2865 array[62] = std::max(array[46], array[62]);
2866 array[46] = tmp;
2867 tmp = std::min(array[47], array[63]);
2868 array[63] = std::max(array[47], array[63]);
2869 array[47] = tmp;
2870 tmp = std::min(array[64], array[80]);
2871 array[80] = std::max(array[64], array[80]);
2872 array[64] = tmp;
2873 tmp = std::min(array[16], array[64]);
2874 array[64] = std::max(array[16], array[64]);
2875 array[16] = tmp;
2876 tmp = std::min(array[17], array[65]);
2877 array[65] = std::max(array[17], array[65]);
2878 array[17] = tmp;
2879 tmp = std::min(array[18], array[66]);
2880 array[66] = std::max(array[18], array[66]);
2881 array[18] = tmp;
2882 tmp = std::min(array[19], array[67]);
2883 array[67] = std::max(array[19], array[67]);
2884 array[19] = tmp;
2885 tmp = std::min(array[20], array[68]);
2886 array[68] = std::max(array[20], array[68]);
2887 array[20] = tmp;
2888 tmp = std::min(array[21], array[69]);
2889 array[69] = std::max(array[21], array[69]);
2890 array[21] = tmp;
2891 tmp = std::min(array[22], array[70]);
2892 array[70] = std::max(array[22], array[70]);
2893 array[22] = tmp;
2894 tmp = std::min(array[23], array[71]);
2895 array[71] = std::max(array[23], array[71]);
2896 array[23] = tmp;
2897 tmp = std::min(array[24], array[72]);
2898 array[72] = std::max(array[24], array[72]);
2899 array[24] = tmp;
2900 tmp = std::min(array[25], array[73]);
2901 array[73] = std::max(array[25], array[73]);
2902 array[25] = tmp;
2903 tmp = std::min(array[26], array[74]);
2904 array[74] = std::max(array[26], array[74]);
2905 array[26] = tmp;
2906 tmp = std::min(array[27], array[75]);
2907 array[75] = std::max(array[27], array[75]);
2908 array[27] = tmp;
2909 tmp = std::min(array[28], array[76]);
2910 array[76] = std::max(array[28], array[76]);
2911 array[28] = tmp;
2912 tmp = std::min(array[29], array[77]);
2913 array[77] = std::max(array[29], array[77]);
2914 array[29] = tmp;
2915 tmp = std::min(array[30], array[78]);
2916 array[78] = std::max(array[30], array[78]);
2917 array[30] = tmp;
2918 tmp = std::min(array[31], array[79]);
2919 array[79] = std::max(array[31], array[79]);
2920 array[31] = tmp;
2921 tmp = std::min(array[16], array[32]);
2922 array[32] = std::max(array[16], array[32]);
2923 array[16] = tmp;
2924 tmp = std::min(array[17], array[33]);
2925 array[33] = std::max(array[17], array[33]);
2926 array[17] = tmp;
2927 tmp = std::min(array[18], array[34]);
2928 array[34] = std::max(array[18], array[34]);
2929 array[18] = tmp;
2930 tmp = std::min(array[19], array[35]);
2931 array[35] = std::max(array[19], array[35]);
2932 array[19] = tmp;
2933 tmp = std::min(array[20], array[36]);
2934 array[36] = std::max(array[20], array[36]);
2935 array[20] = tmp;
2936 tmp = std::min(array[21], array[37]);
2937 array[37] = std::max(array[21], array[37]);
2938 array[21] = tmp;
2939 tmp = std::min(array[22], array[38]);
2940 array[38] = std::max(array[22], array[38]);
2941 array[22] = tmp;
2942 tmp = std::min(array[23], array[39]);
2943 array[39] = std::max(array[23], array[39]);
2944 array[23] = tmp;
2945 tmp = std::min(array[24], array[40]);
2946 array[40] = std::max(array[24], array[40]);
2947 array[24] = tmp;
2948 tmp = std::min(array[25], array[41]);
2949 array[41] = std::max(array[25], array[41]);
2950 array[25] = tmp;
2951 tmp = std::min(array[26], array[42]);
2952 array[42] = std::max(array[26], array[42]);
2953 array[26] = tmp;
2954 tmp = std::min(array[27], array[43]);
2955 array[43] = std::max(array[27], array[43]);
2956 array[27] = tmp;
2957 tmp = std::min(array[28], array[44]);
2958 array[44] = std::max(array[28], array[44]);
2959 array[28] = tmp;
2960 tmp = std::min(array[29], array[45]);
2961 array[45] = std::max(array[29], array[45]);
2962 array[29] = tmp;
2963 tmp = std::min(array[30], array[46]);
2964 array[46] = std::max(array[30], array[46]);
2965 array[30] = tmp;
2966 tmp = std::min(array[31], array[47]);
2967 array[47] = std::max(array[31], array[47]);
2968 array[31] = tmp;
2969 tmp = std::min(array[48], array[64]);
2970 array[64] = std::max(array[48], array[64]);
2971 array[48] = tmp;
2972 tmp = std::min(array[49], array[65]);
2973 array[65] = std::max(array[49], array[65]);
2974 array[49] = tmp;
2975 tmp = std::min(array[50], array[66]);
2976 array[66] = std::max(array[50], array[66]);
2977 array[50] = tmp;
2978 tmp = std::min(array[51], array[67]);
2979 array[67] = std::max(array[51], array[67]);
2980 array[51] = tmp;
2981 tmp = std::min(array[52], array[68]);
2982 array[68] = std::max(array[52], array[68]);
2983 array[52] = tmp;
2984 tmp = std::min(array[53], array[69]);
2985 array[69] = std::max(array[53], array[69]);
2986 array[53] = tmp;
2987 tmp = std::min(array[54], array[70]);
2988 array[70] = std::max(array[54], array[70]);
2989 array[54] = tmp;
2990 tmp = std::min(array[55], array[71]);
2991 array[71] = std::max(array[55], array[71]);
2992 array[55] = tmp;
2993 tmp = std::min(array[56], array[72]);
2994 array[72] = std::max(array[56], array[72]);
2995 array[56] = tmp;
2996 tmp = std::min(array[57], array[73]);
2997 array[73] = std::max(array[57], array[73]);
2998 array[57] = tmp;
2999 tmp = std::min(array[58], array[74]);
3000 array[74] = std::max(array[58], array[74]);
3001 array[58] = tmp;
3002 tmp = std::min(array[59], array[75]);
3003 array[75] = std::max(array[59], array[75]);
3004 array[59] = tmp;
3005 tmp = std::min(array[60], array[76]);
3006 array[76] = std::max(array[60], array[76]);
3007 array[60] = tmp;
3008 tmp = std::min(array[61], array[77]);
3009 array[77] = std::max(array[61], array[77]);
3010 array[61] = tmp;
3011 tmp = std::min(array[62], array[78]);
3012 array[78] = std::max(array[62], array[78]);
3013 array[62] = tmp;
3014 tmp = std::min(array[63], array[79]);
3015 array[79] = std::max(array[63], array[79]);
3016 array[63] = tmp;
3017 tmp = std::min(array[0], array[8]);
3018 array[8] = std::max(array[0], array[8]);
3019 array[0] = tmp;
3020 tmp = std::min(array[1], array[9]);
3021 array[9] = std::max(array[1], array[9]);
3022 array[1] = tmp;
3023 tmp = std::min(array[2], array[10]);
3024 array[10] = std::max(array[2], array[10]);
3025 array[2] = tmp;
3026 tmp = std::min(array[3], array[11]);
3027 array[11] = std::max(array[3], array[11]);
3028 array[3] = tmp;
3029 tmp = std::min(array[4], array[12]);
3030 array[12] = std::max(array[4], array[12]);
3031 array[4] = tmp;
3032 tmp = std::min(array[5], array[13]);
3033 array[13] = std::max(array[5], array[13]);
3034 array[5] = tmp;
3035 tmp = std::min(array[6], array[14]);
3036 array[14] = std::max(array[6], array[14]);
3037 array[6] = tmp;
3038 tmp = std::min(array[7], array[15]);
3039 array[15] = std::max(array[7], array[15]);
3040 array[7] = tmp;
3041 tmp = std::min(array[16], array[24]);
3042 array[24] = std::max(array[16], array[24]);
3043 array[16] = tmp;
3044 tmp = std::min(array[17], array[25]);
3045 array[25] = std::max(array[17], array[25]);
3046 array[17] = tmp;
3047 tmp = std::min(array[18], array[26]);
3048 array[26] = std::max(array[18], array[26]);
3049 array[18] = tmp;
3050 tmp = std::min(array[19], array[27]);
3051 array[27] = std::max(array[19], array[27]);
3052 array[19] = tmp;
3053 tmp = std::min(array[20], array[28]);
3054 array[28] = std::max(array[20], array[28]);
3055 array[20] = tmp;
3056 tmp = std::min(array[21], array[29]);
3057 array[29] = std::max(array[21], array[29]);
3058 array[21] = tmp;
3059 tmp = std::min(array[22], array[30]);
3060 array[30] = std::max(array[22], array[30]);
3061 array[22] = tmp;
3062 tmp = std::min(array[23], array[31]);
3063 array[31] = std::max(array[23], array[31]);
3064 array[23] = tmp;
3065 tmp = std::min(array[32], array[40]);
3066 array[40] = std::max(array[32], array[40]);
3067 array[32] = tmp;
3068 tmp = std::min(array[33], array[41]);
3069 array[41] = std::max(array[33], array[41]);
3070 array[33] = tmp;
3071 tmp = std::min(array[34], array[42]);
3072 array[42] = std::max(array[34], array[42]);
3073 array[34] = tmp;
3074 tmp = std::min(array[35], array[43]);
3075 array[43] = std::max(array[35], array[43]);
3076 array[35] = tmp;
3077 tmp = std::min(array[36], array[44]);
3078 array[44] = std::max(array[36], array[44]);
3079 array[36] = tmp;
3080 tmp = std::min(array[37], array[45]);
3081 array[45] = std::max(array[37], array[45]);
3082 array[37] = tmp;
3083 tmp = std::min(array[38], array[46]);
3084 array[46] = std::max(array[38], array[46]);
3085 array[38] = tmp;
3086 tmp = std::min(array[39], array[47]);
3087 array[47] = std::max(array[39], array[47]);
3088 array[39] = tmp;
3089 tmp = std::min(array[48], array[56]);
3090 array[56] = std::max(array[48], array[56]);
3091 array[48] = tmp;
3092 tmp = std::min(array[49], array[57]);
3093 array[57] = std::max(array[49], array[57]);
3094 array[49] = tmp;
3095 tmp = std::min(array[50], array[58]);
3096 array[58] = std::max(array[50], array[58]);
3097 array[50] = tmp;
3098 tmp = std::min(array[51], array[59]);
3099 array[59] = std::max(array[51], array[59]);
3100 array[51] = tmp;
3101 tmp = std::min(array[52], array[60]);
3102 array[60] = std::max(array[52], array[60]);
3103 array[52] = tmp;
3104 tmp = std::min(array[53], array[61]);
3105 array[61] = std::max(array[53], array[61]);
3106 array[53] = tmp;
3107 tmp = std::min(array[54], array[62]);
3108 array[62] = std::max(array[54], array[62]);
3109 array[54] = tmp;
3110 tmp = std::min(array[55], array[63]);
3111 array[63] = std::max(array[55], array[63]);
3112 array[55] = tmp;
3113 tmp = std::min(array[64], array[72]);
3114 array[72] = std::max(array[64], array[72]);
3115 array[64] = tmp;
3116 tmp = std::min(array[65], array[73]);
3117 array[73] = std::max(array[65], array[73]);
3118 array[65] = tmp;
3119 tmp = std::min(array[66], array[74]);
3120 array[74] = std::max(array[66], array[74]);
3121 array[66] = tmp;
3122 tmp = std::min(array[67], array[75]);
3123 array[75] = std::max(array[67], array[75]);
3124 array[67] = tmp;
3125 tmp = std::min(array[68], array[76]);
3126 array[76] = std::max(array[68], array[76]);
3127 array[68] = tmp;
3128 tmp = std::min(array[69], array[77]);
3129 array[77] = std::max(array[69], array[77]);
3130 array[69] = tmp;
3131 tmp = std::min(array[70], array[78]);
3132 array[78] = std::max(array[70], array[78]);
3133 array[70] = tmp;
3134 tmp = std::min(array[71], array[79]);
3135 array[79] = std::max(array[71], array[79]);
3136 array[71] = tmp;
3137 tmp = std::min(array[8], array[64]);
3138 array[64] = std::max(array[8], array[64]);
3139 array[8] = tmp;
3140 tmp = std::min(array[9], array[65]);
3141 array[65] = std::max(array[9], array[65]);
3142 array[9] = tmp;
3143 tmp = std::min(array[10], array[66]);
3144 array[66] = std::max(array[10], array[66]);
3145 array[10] = tmp;
3146 tmp = std::min(array[11], array[67]);
3147 array[67] = std::max(array[11], array[67]);
3148 array[11] = tmp;
3149 tmp = std::min(array[12], array[68]);
3150 array[68] = std::max(array[12], array[68]);
3151 array[12] = tmp;
3152 tmp = std::min(array[13], array[69]);
3153 array[69] = std::max(array[13], array[69]);
3154 array[13] = tmp;
3155 tmp = std::min(array[14], array[70]);
3156 array[70] = std::max(array[14], array[70]);
3157 array[14] = tmp;
3158 tmp = std::min(array[15], array[71]);
3159 array[71] = std::max(array[15], array[71]);
3160 array[15] = tmp;
3161 tmp = std::min(array[24], array[80]);
3162 array[80] = std::max(array[24], array[80]);
3163 array[24] = tmp;
3164 tmp = std::min(array[8], array[32]);
3165 array[32] = std::max(array[8], array[32]);
3166 array[8] = tmp;
3167 tmp = std::min(array[9], array[33]);
3168 array[33] = std::max(array[9], array[33]);
3169 array[9] = tmp;
3170 tmp = std::min(array[10], array[34]);
3171 array[34] = std::max(array[10], array[34]);
3172 array[10] = tmp;
3173 tmp = std::min(array[11], array[35]);
3174 array[35] = std::max(array[11], array[35]);
3175 array[11] = tmp;
3176 tmp = std::min(array[12], array[36]);
3177 array[36] = std::max(array[12], array[36]);
3178 array[12] = tmp;
3179 tmp = std::min(array[13], array[37]);
3180 array[37] = std::max(array[13], array[37]);
3181 array[13] = tmp;
3182 tmp = std::min(array[14], array[38]);
3183 array[38] = std::max(array[14], array[38]);
3184 array[14] = tmp;
3185 tmp = std::min(array[15], array[39]);
3186 array[39] = std::max(array[15], array[39]);
3187 array[15] = tmp;
3188 tmp = std::min(array[24], array[48]);
3189 array[48] = std::max(array[24], array[48]);
3190 array[24] = tmp;
3191 tmp = std::min(array[25], array[49]);
3192 array[49] = std::max(array[25], array[49]);
3193 array[25] = tmp;
3194 tmp = std::min(array[26], array[50]);
3195 array[50] = std::max(array[26], array[50]);
3196 array[26] = tmp;
3197 tmp = std::min(array[27], array[51]);
3198 array[51] = std::max(array[27], array[51]);
3199 array[27] = tmp;
3200 tmp = std::min(array[28], array[52]);
3201 array[52] = std::max(array[28], array[52]);
3202 array[28] = tmp;
3203 tmp = std::min(array[29], array[53]);
3204 array[53] = std::max(array[29], array[53]);
3205 array[29] = tmp;
3206 tmp = std::min(array[30], array[54]);
3207 array[54] = std::max(array[30], array[54]);
3208 array[30] = tmp;
3209 tmp = std::min(array[31], array[55]);
3210 array[55] = std::max(array[31], array[55]);
3211 array[31] = tmp;
3212 tmp = std::min(array[40], array[64]);
3213 array[64] = std::max(array[40], array[64]);
3214 array[40] = tmp;
3215 tmp = std::min(array[41], array[65]);
3216 array[65] = std::max(array[41], array[65]);
3217 array[41] = tmp;
3218 tmp = std::min(array[42], array[66]);
3219 array[66] = std::max(array[42], array[66]);
3220 array[42] = tmp;
3221 tmp = std::min(array[43], array[67]);
3222 array[67] = std::max(array[43], array[67]);
3223 array[43] = tmp;
3224 tmp = std::min(array[44], array[68]);
3225 array[68] = std::max(array[44], array[68]);
3226 array[44] = tmp;
3227 tmp = std::min(array[45], array[69]);
3228 array[69] = std::max(array[45], array[69]);
3229 array[45] = tmp;
3230 tmp = std::min(array[46], array[70]);
3231 array[70] = std::max(array[46], array[70]);
3232 array[46] = tmp;
3233 tmp = std::min(array[47], array[71]);
3234 array[71] = std::max(array[47], array[71]);
3235 array[47] = tmp;
3236 tmp = std::min(array[56], array[80]);
3237 array[80] = std::max(array[56], array[80]);
3238 array[56] = tmp;
3239 tmp = std::min(array[8], array[16]);
3240 array[16] = std::max(array[8], array[16]);
3241 array[8] = tmp;
3242 tmp = std::min(array[9], array[17]);
3243 array[17] = std::max(array[9], array[17]);
3244 array[9] = tmp;
3245 tmp = std::min(array[10], array[18]);
3246 array[18] = std::max(array[10], array[18]);
3247 array[10] = tmp;
3248 tmp = std::min(array[11], array[19]);
3249 array[19] = std::max(array[11], array[19]);
3250 array[11] = tmp;
3251 tmp = std::min(array[12], array[20]);
3252 array[20] = std::max(array[12], array[20]);
3253 array[12] = tmp;
3254 tmp = std::min(array[13], array[21]);
3255 array[21] = std::max(array[13], array[21]);
3256 array[13] = tmp;
3257 tmp = std::min(array[14], array[22]);
3258 array[22] = std::max(array[14], array[22]);
3259 array[14] = tmp;
3260 tmp = std::min(array[15], array[23]);
3261 array[23] = std::max(array[15], array[23]);
3262 array[15] = tmp;
3263 tmp = std::min(array[24], array[32]);
3264 array[32] = std::max(array[24], array[32]);
3265 array[24] = tmp;
3266 tmp = std::min(array[25], array[33]);
3267 array[33] = std::max(array[25], array[33]);
3268 array[25] = tmp;
3269 tmp = std::min(array[26], array[34]);
3270 array[34] = std::max(array[26], array[34]);
3271 array[26] = tmp;
3272 tmp = std::min(array[27], array[35]);
3273 array[35] = std::max(array[27], array[35]);
3274 array[27] = tmp;
3275 tmp = std::min(array[28], array[36]);
3276 array[36] = std::max(array[28], array[36]);
3277 array[28] = tmp;
3278 tmp = std::min(array[29], array[37]);
3279 array[37] = std::max(array[29], array[37]);
3280 array[29] = tmp;
3281 tmp = std::min(array[30], array[38]);
3282 array[38] = std::max(array[30], array[38]);
3283 array[30] = tmp;
3284 tmp = std::min(array[31], array[39]);
3285 array[39] = std::max(array[31], array[39]);
3286 array[31] = tmp;
3287 tmp = std::min(array[40], array[48]);
3288 array[48] = std::max(array[40], array[48]);
3289 array[40] = tmp;
3290 tmp = std::min(array[41], array[49]);
3291 array[49] = std::max(array[41], array[49]);
3292 array[41] = tmp;
3293 tmp = std::min(array[42], array[50]);
3294 array[50] = std::max(array[42], array[50]);
3295 array[42] = tmp;
3296 tmp = std::min(array[43], array[51]);
3297 array[51] = std::max(array[43], array[51]);
3298 array[43] = tmp;
3299 tmp = std::min(array[44], array[52]);
3300 array[52] = std::max(array[44], array[52]);
3301 array[44] = tmp;
3302 tmp = std::min(array[45], array[53]);
3303 array[53] = std::max(array[45], array[53]);
3304 array[45] = tmp;
3305 tmp = std::min(array[46], array[54]);
3306 array[54] = std::max(array[46], array[54]);
3307 array[46] = tmp;
3308 tmp = std::min(array[47], array[55]);
3309 array[55] = std::max(array[47], array[55]);
3310 array[47] = tmp;
3311 tmp = std::min(array[56], array[64]);
3312 array[64] = std::max(array[56], array[64]);
3313 array[56] = tmp;
3314 tmp = std::min(array[57], array[65]);
3315 array[65] = std::max(array[57], array[65]);
3316 array[57] = tmp;
3317 tmp = std::min(array[58], array[66]);
3318 array[66] = std::max(array[58], array[66]);
3319 array[58] = tmp;
3320 tmp = std::min(array[59], array[67]);
3321 array[67] = std::max(array[59], array[67]);
3322 array[59] = tmp;
3323 tmp = std::min(array[60], array[68]);
3324 array[68] = std::max(array[60], array[68]);
3325 array[60] = tmp;
3326 tmp = std::min(array[61], array[69]);
3327 array[69] = std::max(array[61], array[69]);
3328 array[61] = tmp;
3329 tmp = std::min(array[62], array[70]);
3330 array[70] = std::max(array[62], array[70]);
3331 array[62] = tmp;
3332 tmp = std::min(array[63], array[71]);
3333 array[71] = std::max(array[63], array[71]);
3334 array[63] = tmp;
3335 tmp = std::min(array[72], array[80]);
3336 array[80] = std::max(array[72], array[80]);
3337 array[72] = tmp;
3338 tmp = std::min(array[0], array[4]);
3339 array[4] = std::max(array[0], array[4]);
3340 array[0] = tmp;
3341 tmp = std::min(array[1], array[5]);
3342 array[5] = std::max(array[1], array[5]);
3343 array[1] = tmp;
3344 tmp = std::min(array[2], array[6]);
3345 array[6] = std::max(array[2], array[6]);
3346 array[2] = tmp;
3347 tmp = std::min(array[3], array[7]);
3348 array[7] = std::max(array[3], array[7]);
3349 array[3] = tmp;
3350 tmp = std::min(array[8], array[12]);
3351 array[12] = std::max(array[8], array[12]);
3352 array[8] = tmp;
3353 tmp = std::min(array[9], array[13]);
3354 array[13] = std::max(array[9], array[13]);
3355 array[9] = tmp;
3356 tmp = std::min(array[10], array[14]);
3357 array[14] = std::max(array[10], array[14]);
3358 array[10] = tmp;
3359 tmp = std::min(array[11], array[15]);
3360 array[15] = std::max(array[11], array[15]);
3361 array[11] = tmp;
3362 tmp = std::min(array[16], array[20]);
3363 array[20] = std::max(array[16], array[20]);
3364 array[16] = tmp;
3365 tmp = std::min(array[17], array[21]);
3366 array[21] = std::max(array[17], array[21]);
3367 array[17] = tmp;
3368 tmp = std::min(array[18], array[22]);
3369 array[22] = std::max(array[18], array[22]);
3370 array[18] = tmp;
3371 tmp = std::min(array[19], array[23]);
3372 array[23] = std::max(array[19], array[23]);
3373 array[19] = tmp;
3374 tmp = std::min(array[24], array[28]);
3375 array[28] = std::max(array[24], array[28]);
3376 array[24] = tmp;
3377 tmp = std::min(array[25], array[29]);
3378 array[29] = std::max(array[25], array[29]);
3379 array[25] = tmp;
3380 tmp = std::min(array[26], array[30]);
3381 array[30] = std::max(array[26], array[30]);
3382 array[26] = tmp;
3383 tmp = std::min(array[27], array[31]);
3384 array[31] = std::max(array[27], array[31]);
3385 array[27] = tmp;
3386 tmp = std::min(array[32], array[36]);
3387 array[36] = std::max(array[32], array[36]);
3388 array[32] = tmp;
3389 tmp = std::min(array[33], array[37]);
3390 array[37] = std::max(array[33], array[37]);
3391 array[33] = tmp;
3392 tmp = std::min(array[34], array[38]);
3393 array[38] = std::max(array[34], array[38]);
3394 array[34] = tmp;
3395 tmp = std::min(array[35], array[39]);
3396 array[39] = std::max(array[35], array[39]);
3397 array[35] = tmp;
3398 tmp = std::min(array[40], array[44]);
3399 array[44] = std::max(array[40], array[44]);
3400 array[40] = tmp;
3401 tmp = std::min(array[41], array[45]);
3402 array[45] = std::max(array[41], array[45]);
3403 array[41] = tmp;
3404 tmp = std::min(array[42], array[46]);
3405 array[46] = std::max(array[42], array[46]);
3406 array[42] = tmp;
3407 tmp = std::min(array[43], array[47]);
3408 array[47] = std::max(array[43], array[47]);
3409 array[43] = tmp;
3410 tmp = std::min(array[48], array[52]);
3411 array[52] = std::max(array[48], array[52]);
3412 array[48] = tmp;
3413 tmp = std::min(array[49], array[53]);
3414 array[53] = std::max(array[49], array[53]);
3415 array[49] = tmp;
3416 tmp = std::min(array[50], array[54]);
3417 array[54] = std::max(array[50], array[54]);
3418 array[50] = tmp;
3419 tmp = std::min(array[51], array[55]);
3420 array[55] = std::max(array[51], array[55]);
3421 array[51] = tmp;
3422 tmp = std::min(array[56], array[60]);
3423 array[60] = std::max(array[56], array[60]);
3424 array[56] = tmp;
3425 tmp = std::min(array[57], array[61]);
3426 array[61] = std::max(array[57], array[61]);
3427 array[57] = tmp;
3428 tmp = std::min(array[58], array[62]);
3429 array[62] = std::max(array[58], array[62]);
3430 array[58] = tmp;
3431 tmp = std::min(array[59], array[63]);
3432 array[63] = std::max(array[59], array[63]);
3433 array[59] = tmp;
3434 tmp = std::min(array[64], array[68]);
3435 array[68] = std::max(array[64], array[68]);
3436 array[64] = tmp;
3437 tmp = std::min(array[65], array[69]);
3438 array[69] = std::max(array[65], array[69]);
3439 array[65] = tmp;
3440 tmp = std::min(array[66], array[70]);
3441 array[70] = std::max(array[66], array[70]);
3442 array[66] = tmp;
3443 tmp = std::min(array[67], array[71]);
3444 array[71] = std::max(array[67], array[71]);
3445 array[67] = tmp;
3446 tmp = std::min(array[72], array[76]);
3447 array[76] = std::max(array[72], array[76]);
3448 array[72] = tmp;
3449 tmp = std::min(array[73], array[77]);
3450 array[77] = std::max(array[73], array[77]);
3451 array[73] = tmp;
3452 tmp = std::min(array[74], array[78]);
3453 array[78] = std::max(array[74], array[78]);
3454 array[74] = tmp;
3455 tmp = std::min(array[75], array[79]);
3456 array[79] = std::max(array[75], array[79]);
3457 array[75] = tmp;
3458 tmp = std::min(array[4], array[64]);
3459 array[64] = std::max(array[4], array[64]);
3460 array[4] = tmp;
3461 tmp = std::min(array[5], array[65]);
3462 array[65] = std::max(array[5], array[65]);
3463 array[5] = tmp;
3464 tmp = std::min(array[6], array[66]);
3465 array[66] = std::max(array[6], array[66]);
3466 array[6] = tmp;
3467 tmp = std::min(array[7], array[67]);
3468 array[67] = std::max(array[7], array[67]);
3469 array[7] = tmp;
3470 tmp = std::min(array[12], array[72]);
3471 array[72] = std::max(array[12], array[72]);
3472 array[12] = tmp;
3473 tmp = std::min(array[13], array[73]);
3474 array[73] = std::max(array[13], array[73]);
3475 array[13] = tmp;
3476 tmp = std::min(array[14], array[74]);
3477 array[74] = std::max(array[14], array[74]);
3478 array[14] = tmp;
3479 tmp = std::min(array[15], array[75]);
3480 array[75] = std::max(array[15], array[75]);
3481 array[15] = tmp;
3482 tmp = std::min(array[20], array[80]);
3483 array[80] = std::max(array[20], array[80]);
3484 array[20] = tmp;
3485 tmp = std::min(array[4], array[32]);
3486 array[32] = std::max(array[4], array[32]);
3487 array[4] = tmp;
3488 tmp = std::min(array[5], array[33]);
3489 array[33] = std::max(array[5], array[33]);
3490 array[5] = tmp;
3491 tmp = std::min(array[6], array[34]);
3492 array[34] = std::max(array[6], array[34]);
3493 array[6] = tmp;
3494 tmp = std::min(array[7], array[35]);
3495 array[35] = std::max(array[7], array[35]);
3496 array[7] = tmp;
3497 tmp = std::min(array[12], array[40]);
3498 array[40] = std::max(array[12], array[40]);
3499 array[12] = tmp;
3500 tmp = std::min(array[13], array[41]);
3501 array[41] = std::max(array[13], array[41]);
3502 array[13] = tmp;
3503 tmp = std::min(array[14], array[42]);
3504 array[42] = std::max(array[14], array[42]);
3505 array[14] = tmp;
3506 tmp = std::min(array[15], array[43]);
3507 array[43] = std::max(array[15], array[43]);
3508 array[15] = tmp;
3509 tmp = std::min(array[20], array[48]);
3510 array[48] = std::max(array[20], array[48]);
3511 array[20] = tmp;
3512 tmp = std::min(array[21], array[49]);
3513 array[49] = std::max(array[21], array[49]);
3514 array[21] = tmp;
3515 tmp = std::min(array[22], array[50]);
3516 array[50] = std::max(array[22], array[50]);
3517 array[22] = tmp;
3518 tmp = std::min(array[23], array[51]);
3519 array[51] = std::max(array[23], array[51]);
3520 array[23] = tmp;
3521 tmp = std::min(array[28], array[56]);
3522 array[56] = std::max(array[28], array[56]);
3523 array[28] = tmp;
3524 tmp = std::min(array[29], array[57]);
3525 array[57] = std::max(array[29], array[57]);
3526 array[29] = tmp;
3527 tmp = std::min(array[30], array[58]);
3528 array[58] = std::max(array[30], array[58]);
3529 array[30] = tmp;
3530 tmp = std::min(array[31], array[59]);
3531 array[59] = std::max(array[31], array[59]);
3532 array[31] = tmp;
3533 tmp = std::min(array[36], array[64]);
3534 array[64] = std::max(array[36], array[64]);
3535 array[36] = tmp;
3536 tmp = std::min(array[37], array[65]);
3537 array[65] = std::max(array[37], array[65]);
3538 array[37] = tmp;
3539 tmp = std::min(array[38], array[66]);
3540 array[66] = std::max(array[38], array[66]);
3541 array[38] = tmp;
3542 tmp = std::min(array[39], array[67]);
3543 array[67] = std::max(array[39], array[67]);
3544 array[39] = tmp;
3545 tmp = std::min(array[44], array[72]);
3546 array[72] = std::max(array[44], array[72]);
3547 array[44] = tmp;
3548 tmp = std::min(array[45], array[73]);
3549 array[73] = std::max(array[45], array[73]);
3550 array[45] = tmp;
3551 tmp = std::min(array[46], array[74]);
3552 array[74] = std::max(array[46], array[74]);
3553 array[46] = tmp;
3554 tmp = std::min(array[47], array[75]);
3555 array[75] = std::max(array[47], array[75]);
3556 array[47] = tmp;
3557 tmp = std::min(array[52], array[80]);
3558 array[80] = std::max(array[52], array[80]);
3559 array[52] = tmp;
3560 tmp = std::min(array[4], array[16]);
3561 array[16] = std::max(array[4], array[16]);
3562 array[4] = tmp;
3563 tmp = std::min(array[5], array[17]);
3564 array[17] = std::max(array[5], array[17]);
3565 array[5] = tmp;
3566 tmp = std::min(array[6], array[18]);
3567 array[18] = std::max(array[6], array[18]);
3568 array[6] = tmp;
3569 tmp = std::min(array[7], array[19]);
3570 array[19] = std::max(array[7], array[19]);
3571 array[7] = tmp;
3572 tmp = std::min(array[12], array[24]);
3573 array[24] = std::max(array[12], array[24]);
3574 array[12] = tmp;
3575 tmp = std::min(array[13], array[25]);
3576 array[25] = std::max(array[13], array[25]);
3577 array[13] = tmp;
3578 tmp = std::min(array[14], array[26]);
3579 array[26] = std::max(array[14], array[26]);
3580 array[14] = tmp;
3581 tmp = std::min(array[15], array[27]);
3582 array[27] = std::max(array[15], array[27]);
3583 array[15] = tmp;
3584 tmp = std::min(array[20], array[32]);
3585 array[32] = std::max(array[20], array[32]);
3586 array[20] = tmp;
3587 tmp = std::min(array[21], array[33]);
3588 array[33] = std::max(array[21], array[33]);
3589 array[21] = tmp;
3590 tmp = std::min(array[22], array[34]);
3591 array[34] = std::max(array[22], array[34]);
3592 array[22] = tmp;
3593 tmp = std::min(array[23], array[35]);
3594 array[35] = std::max(array[23], array[35]);
3595 array[23] = tmp;
3596 tmp = std::min(array[28], array[40]);
3597 array[40] = std::max(array[28], array[40]);
3598 array[28] = tmp;
3599 tmp = std::min(array[29], array[41]);
3600 array[41] = std::max(array[29], array[41]);
3601 array[29] = tmp;
3602 tmp = std::min(array[30], array[42]);
3603 array[42] = std::max(array[30], array[42]);
3604 array[30] = tmp;
3605 tmp = std::min(array[31], array[43]);
3606 array[43] = std::max(array[31], array[43]);
3607 array[31] = tmp;
3608 tmp = std::min(array[36], array[48]);
3609 array[48] = std::max(array[36], array[48]);
3610 array[36] = tmp;
3611 tmp = std::min(array[37], array[49]);
3612 array[49] = std::max(array[37], array[49]);
3613 array[37] = tmp;
3614 tmp = std::min(array[38], array[50]);
3615 array[50] = std::max(array[38], array[50]);
3616 array[38] = tmp;
3617 tmp = std::min(array[39], array[51]);
3618 array[51] = std::max(array[39], array[51]);
3619 array[39] = tmp;
3620 tmp = std::min(array[44], array[56]);
3621 array[56] = std::max(array[44], array[56]);
3622 array[44] = tmp;
3623 tmp = std::min(array[45], array[57]);
3624 array[57] = std::max(array[45], array[57]);
3625 array[45] = tmp;
3626 tmp = std::min(array[46], array[58]);
3627 array[58] = std::max(array[46], array[58]);
3628 array[46] = tmp;
3629 tmp = std::min(array[47], array[59]);
3630 array[59] = std::max(array[47], array[59]);
3631 array[47] = tmp;
3632 tmp = std::min(array[52], array[64]);
3633 array[64] = std::max(array[52], array[64]);
3634 array[52] = tmp;
3635 tmp = std::min(array[53], array[65]);
3636 array[65] = std::max(array[53], array[65]);
3637 array[53] = tmp;
3638 tmp = std::min(array[54], array[66]);
3639 array[66] = std::max(array[54], array[66]);
3640 array[54] = tmp;
3641 tmp = std::min(array[55], array[67]);
3642 array[67] = std::max(array[55], array[67]);
3643 array[55] = tmp;
3644 tmp = std::min(array[60], array[72]);
3645 array[72] = std::max(array[60], array[72]);
3646 array[60] = tmp;
3647 tmp = std::min(array[61], array[73]);
3648 array[73] = std::max(array[61], array[73]);
3649 array[61] = tmp;
3650 tmp = std::min(array[62], array[74]);
3651 array[74] = std::max(array[62], array[74]);
3652 array[62] = tmp;
3653 tmp = std::min(array[63], array[75]);
3654 array[75] = std::max(array[63], array[75]);
3655 array[63] = tmp;
3656 tmp = std::min(array[68], array[80]);
3657 array[80] = std::max(array[68], array[80]);
3658 array[68] = tmp;
3659 tmp = std::min(array[4], array[8]);
3660 array[8] = std::max(array[4], array[8]);
3661 array[4] = tmp;
3662 tmp = std::min(array[5], array[9]);
3663 array[9] = std::max(array[5], array[9]);
3664 array[5] = tmp;
3665 tmp = std::min(array[6], array[10]);
3666 array[10] = std::max(array[6], array[10]);
3667 array[6] = tmp;
3668 tmp = std::min(array[7], array[11]);
3669 array[11] = std::max(array[7], array[11]);
3670 array[7] = tmp;
3671 tmp = std::min(array[12], array[16]);
3672 array[16] = std::max(array[12], array[16]);
3673 array[12] = tmp;
3674 tmp = std::min(array[13], array[17]);
3675 array[17] = std::max(array[13], array[17]);
3676 array[13] = tmp;
3677 tmp = std::min(array[14], array[18]);
3678 array[18] = std::max(array[14], array[18]);
3679 array[14] = tmp;
3680 tmp = std::min(array[15], array[19]);
3681 array[19] = std::max(array[15], array[19]);
3682 array[15] = tmp;
3683 tmp = std::min(array[20], array[24]);
3684 array[24] = std::max(array[20], array[24]);
3685 array[20] = tmp;
3686 tmp = std::min(array[21], array[25]);
3687 array[25] = std::max(array[21], array[25]);
3688 array[21] = tmp;
3689 tmp = std::min(array[22], array[26]);
3690 array[26] = std::max(array[22], array[26]);
3691 array[22] = tmp;
3692 tmp = std::min(array[23], array[27]);
3693 array[27] = std::max(array[23], array[27]);
3694 array[23] = tmp;
3695 tmp = std::min(array[28], array[32]);
3696 array[32] = std::max(array[28], array[32]);
3697 array[28] = tmp;
3698 tmp = std::min(array[29], array[33]);
3699 array[33] = std::max(array[29], array[33]);
3700 array[29] = tmp;
3701 tmp = std::min(array[30], array[34]);
3702 array[34] = std::max(array[30], array[34]);
3703 array[30] = tmp;
3704 tmp = std::min(array[31], array[35]);
3705 array[35] = std::max(array[31], array[35]);
3706 array[31] = tmp;
3707 tmp = std::min(array[36], array[40]);
3708 array[40] = std::max(array[36], array[40]);
3709 array[36] = tmp;
3710 tmp = std::min(array[37], array[41]);
3711 array[41] = std::max(array[37], array[41]);
3712 array[37] = tmp;
3713 tmp = std::min(array[38], array[42]);
3714 array[42] = std::max(array[38], array[42]);
3715 array[38] = tmp;
3716 tmp = std::min(array[39], array[43]);
3717 array[43] = std::max(array[39], array[43]);
3718 array[39] = tmp;
3719 tmp = std::min(array[44], array[48]);
3720 array[48] = std::max(array[44], array[48]);
3721 array[44] = tmp;
3722 tmp = std::min(array[45], array[49]);
3723 array[49] = std::max(array[45], array[49]);
3724 array[45] = tmp;
3725 tmp = std::min(array[46], array[50]);
3726 array[50] = std::max(array[46], array[50]);
3727 array[46] = tmp;
3728 tmp = std::min(array[47], array[51]);
3729 array[51] = std::max(array[47], array[51]);
3730 array[47] = tmp;
3731 tmp = std::min(array[52], array[56]);
3732 array[56] = std::max(array[52], array[56]);
3733 array[52] = tmp;
3734 tmp = std::min(array[53], array[57]);
3735 array[57] = std::max(array[53], array[57]);
3736 array[53] = tmp;
3737 tmp = std::min(array[54], array[58]);
3738 array[58] = std::max(array[54], array[58]);
3739 array[54] = tmp;
3740 tmp = std::min(array[55], array[59]);
3741 array[59] = std::max(array[55], array[59]);
3742 array[55] = tmp;
3743 tmp = std::min(array[60], array[64]);
3744 array[64] = std::max(array[60], array[64]);
3745 array[60] = tmp;
3746 tmp = std::min(array[61], array[65]);
3747 array[65] = std::max(array[61], array[65]);
3748 array[61] = tmp;
3749 tmp = std::min(array[62], array[66]);
3750 array[66] = std::max(array[62], array[66]);
3751 array[62] = tmp;
3752 tmp = std::min(array[63], array[67]);
3753 array[67] = std::max(array[63], array[67]);
3754 array[63] = tmp;
3755 tmp = std::min(array[68], array[72]);
3756 array[72] = std::max(array[68], array[72]);
3757 array[68] = tmp;
3758 tmp = std::min(array[69], array[73]);
3759 array[73] = std::max(array[69], array[73]);
3760 array[69] = tmp;
3761 tmp = std::min(array[70], array[74]);
3762 array[74] = std::max(array[70], array[74]);
3763 array[70] = tmp;
3764 tmp = std::min(array[71], array[75]);
3765 array[75] = std::max(array[71], array[75]);
3766 array[71] = tmp;
3767 tmp = std::min(array[76], array[80]);
3768 array[80] = std::max(array[76], array[80]);
3769 array[76] = tmp;
3770 tmp = std::min(array[0], array[2]);
3771 array[2] = std::max(array[0], array[2]);
3772 array[0] = tmp;
3773 tmp = std::min(array[1], array[3]);
3774 array[3] = std::max(array[1], array[3]);
3775 array[1] = tmp;
3776 tmp = std::min(array[4], array[6]);
3777 array[6] = std::max(array[4], array[6]);
3778 array[4] = tmp;
3779 tmp = std::min(array[5], array[7]);
3780 array[7] = std::max(array[5], array[7]);
3781 array[5] = tmp;
3782 tmp = std::min(array[8], array[10]);
3783 array[10] = std::max(array[8], array[10]);
3784 array[8] = tmp;
3785 tmp = std::min(array[9], array[11]);
3786 array[11] = std::max(array[9], array[11]);
3787 array[9] = tmp;
3788 tmp = std::min(array[12], array[14]);
3789 array[14] = std::max(array[12], array[14]);
3790 array[12] = tmp;
3791 tmp = std::min(array[13], array[15]);
3792 array[15] = std::max(array[13], array[15]);
3793 array[13] = tmp;
3794 tmp = std::min(array[16], array[18]);
3795 array[18] = std::max(array[16], array[18]);
3796 array[16] = tmp;
3797 tmp = std::min(array[17], array[19]);
3798 array[19] = std::max(array[17], array[19]);
3799 array[17] = tmp;
3800 tmp = std::min(array[20], array[22]);
3801 array[22] = std::max(array[20], array[22]);
3802 array[20] = tmp;
3803 tmp = std::min(array[21], array[23]);
3804 array[23] = std::max(array[21], array[23]);
3805 array[21] = tmp;
3806 tmp = std::min(array[24], array[26]);
3807 array[26] = std::max(array[24], array[26]);
3808 array[24] = tmp;
3809 tmp = std::min(array[25], array[27]);
3810 array[27] = std::max(array[25], array[27]);
3811 array[25] = tmp;
3812 tmp = std::min(array[28], array[30]);
3813 array[30] = std::max(array[28], array[30]);
3814 array[28] = tmp;
3815 tmp = std::min(array[29], array[31]);
3816 array[31] = std::max(array[29], array[31]);
3817 array[29] = tmp;
3818 tmp = std::min(array[32], array[34]);
3819 array[34] = std::max(array[32], array[34]);
3820 array[32] = tmp;
3821 tmp = std::min(array[33], array[35]);
3822 array[35] = std::max(array[33], array[35]);
3823 array[33] = tmp;
3824 tmp = std::min(array[36], array[38]);
3825 array[38] = std::max(array[36], array[38]);
3826 array[36] = tmp;
3827 tmp = std::min(array[37], array[39]);
3828 array[39] = std::max(array[37], array[39]);
3829 array[37] = tmp;
3830 tmp = std::min(array[40], array[42]);
3831 array[42] = std::max(array[40], array[42]);
3832 array[40] = tmp;
3833 tmp = std::min(array[41], array[43]);
3834 array[43] = std::max(array[41], array[43]);
3835 array[41] = tmp;
3836 tmp = std::min(array[44], array[46]);
3837 array[46] = std::max(array[44], array[46]);
3838 array[44] = tmp;
3839 tmp = std::min(array[45], array[47]);
3840 array[47] = std::max(array[45], array[47]);
3841 array[45] = tmp;
3842 tmp = std::min(array[48], array[50]);
3843 array[50] = std::max(array[48], array[50]);
3844 array[48] = tmp;
3845 tmp = std::min(array[49], array[51]);
3846 array[51] = std::max(array[49], array[51]);
3847 array[49] = tmp;
3848 tmp = std::min(array[52], array[54]);
3849 array[54] = std::max(array[52], array[54]);
3850 array[52] = tmp;
3851 tmp = std::min(array[53], array[55]);
3852 array[55] = std::max(array[53], array[55]);
3853 array[53] = tmp;
3854 tmp = std::min(array[56], array[58]);
3855 array[58] = std::max(array[56], array[58]);
3856 array[56] = tmp;
3857 tmp = std::min(array[57], array[59]);
3858 array[59] = std::max(array[57], array[59]);
3859 array[57] = tmp;
3860 tmp = std::min(array[60], array[62]);
3861 array[62] = std::max(array[60], array[62]);
3862 array[60] = tmp;
3863 tmp = std::min(array[61], array[63]);
3864 array[63] = std::max(array[61], array[63]);
3865 array[61] = tmp;
3866 tmp = std::min(array[64], array[66]);
3867 array[66] = std::max(array[64], array[66]);
3868 array[64] = tmp;
3869 tmp = std::min(array[65], array[67]);
3870 array[67] = std::max(array[65], array[67]);
3871 array[65] = tmp;
3872 tmp = std::min(array[68], array[70]);
3873 array[70] = std::max(array[68], array[70]);
3874 array[68] = tmp;
3875 tmp = std::min(array[69], array[71]);
3876 array[71] = std::max(array[69], array[71]);
3877 array[69] = tmp;
3878 tmp = std::min(array[72], array[74]);
3879 array[74] = std::max(array[72], array[74]);
3880 array[72] = tmp;
3881 tmp = std::min(array[73], array[75]);
3882 array[75] = std::max(array[73], array[75]);
3883 array[73] = tmp;
3884 tmp = std::min(array[76], array[78]);
3885 array[78] = std::max(array[76], array[78]);
3886 array[76] = tmp;
3887 tmp = std::min(array[77], array[79]);
3888 array[79] = std::max(array[77], array[79]);
3889 array[77] = tmp;
3890 tmp = std::min(array[2], array[64]);
3891 array[64] = std::max(array[2], array[64]);
3892 array[2] = tmp;
3893 tmp = std::min(array[3], array[65]);
3894 array[65] = std::max(array[3], array[65]);
3895 array[3] = tmp;
3896 tmp = std::min(array[6], array[68]);
3897 array[68] = std::max(array[6], array[68]);
3898 array[6] = tmp;
3899 tmp = std::min(array[7], array[69]);
3900 array[69] = std::max(array[7], array[69]);
3901 array[7] = tmp;
3902 tmp = std::min(array[10], array[72]);
3903 array[72] = std::max(array[10], array[72]);
3904 array[10] = tmp;
3905 tmp = std::min(array[11], array[73]);
3906 array[73] = std::max(array[11], array[73]);
3907 array[11] = tmp;
3908 tmp = std::min(array[14], array[76]);
3909 array[76] = std::max(array[14], array[76]);
3910 array[14] = tmp;
3911 tmp = std::min(array[15], array[77]);
3912 array[77] = std::max(array[15], array[77]);
3913 array[15] = tmp;
3914 tmp = std::min(array[18], array[80]);
3915 array[80] = std::max(array[18], array[80]);
3916 array[18] = tmp;
3917 tmp = std::min(array[2], array[32]);
3918 array[32] = std::max(array[2], array[32]);
3919 array[2] = tmp;
3920 tmp = std::min(array[3], array[33]);
3921 array[33] = std::max(array[3], array[33]);
3922 array[3] = tmp;
3923 tmp = std::min(array[6], array[36]);
3924 array[36] = std::max(array[6], array[36]);
3925 array[6] = tmp;
3926 tmp = std::min(array[7], array[37]);
3927 array[37] = std::max(array[7], array[37]);
3928 array[7] = tmp;
3929 tmp = std::min(array[10], array[40]);
3930 array[40] = std::max(array[10], array[40]);
3931 array[10] = tmp;
3932 tmp = std::min(array[11], array[41]);
3933 array[41] = std::max(array[11], array[41]);
3934 array[11] = tmp;
3935 tmp = std::min(array[14], array[44]);
3936 array[44] = std::max(array[14], array[44]);
3937 array[14] = tmp;
3938 tmp = std::min(array[15], array[45]);
3939 array[45] = std::max(array[15], array[45]);
3940 array[15] = tmp;
3941 tmp = std::min(array[18], array[48]);
3942 array[48] = std::max(array[18], array[48]);
3943 array[18] = tmp;
3944 tmp = std::min(array[19], array[49]);
3945 array[49] = std::max(array[19], array[49]);
3946 array[19] = tmp;
3947 tmp = std::min(array[22], array[52]);
3948 array[52] = std::max(array[22], array[52]);
3949 array[22] = tmp;
3950 tmp = std::min(array[23], array[53]);
3951 array[53] = std::max(array[23], array[53]);
3952 array[23] = tmp;
3953 tmp = std::min(array[26], array[56]);
3954 array[56] = std::max(array[26], array[56]);
3955 array[26] = tmp;
3956 tmp = std::min(array[27], array[57]);
3957 array[57] = std::max(array[27], array[57]);
3958 array[27] = tmp;
3959 tmp = std::min(array[30], array[60]);
3960 array[60] = std::max(array[30], array[60]);
3961 array[30] = tmp;
3962 tmp = std::min(array[31], array[61]);
3963 array[61] = std::max(array[31], array[61]);
3964 array[31] = tmp;
3965 tmp = std::min(array[34], array[64]);
3966 array[64] = std::max(array[34], array[64]);
3967 array[34] = tmp;
3968 tmp = std::min(array[35], array[65]);
3969 array[65] = std::max(array[35], array[65]);
3970 array[35] = tmp;
3971 tmp = std::min(array[38], array[68]);
3972 array[68] = std::max(array[38], array[68]);
3973 array[38] = tmp;
3974 tmp = std::min(array[39], array[69]);
3975 array[69] = std::max(array[39], array[69]);
3976 array[39] = tmp;
3977 tmp = std::min(array[42], array[72]);
3978 array[72] = std::max(array[42], array[72]);
3979 array[42] = tmp;
3980 tmp = std::min(array[43], array[73]);
3981 array[73] = std::max(array[43], array[73]);
3982 array[43] = tmp;
3983 tmp = std::min(array[46], array[76]);
3984 array[76] = std::max(array[46], array[76]);
3985 array[46] = tmp;
3986 tmp = std::min(array[47], array[77]);
3987 array[77] = std::max(array[47], array[77]);
3988 array[47] = tmp;
3989 tmp = std::min(array[50], array[80]);
3990 array[80] = std::max(array[50], array[80]);
3991 array[50] = tmp;
3992 tmp = std::min(array[2], array[16]);
3993 array[16] = std::max(array[2], array[16]);
3994 array[2] = tmp;
3995 tmp = std::min(array[3], array[17]);
3996 array[17] = std::max(array[3], array[17]);
3997 array[3] = tmp;
3998 tmp = std::min(array[6], array[20]);
3999 array[20] = std::max(array[6], array[20]);
4000 array[6] = tmp;
4001 tmp = std::min(array[7], array[21]);
4002 array[21] = std::max(array[7], array[21]);
4003 array[7] = tmp;
4004 tmp = std::min(array[10], array[24]);
4005 array[24] = std::max(array[10], array[24]);
4006 array[10] = tmp;
4007 tmp = std::min(array[11], array[25]);
4008 array[25] = std::max(array[11], array[25]);
4009 array[11] = tmp;
4010 tmp = std::min(array[14], array[28]);
4011 array[28] = std::max(array[14], array[28]);
4012 array[14] = tmp;
4013 tmp = std::min(array[15], array[29]);
4014 array[29] = std::max(array[15], array[29]);
4015 array[15] = tmp;
4016 tmp = std::min(array[18], array[32]);
4017 array[32] = std::max(array[18], array[32]);
4018 array[18] = tmp;
4019 tmp = std::min(array[19], array[33]);
4020 array[33] = std::max(array[19], array[33]);
4021 array[19] = tmp;
4022 tmp = std::min(array[22], array[36]);
4023 array[36] = std::max(array[22], array[36]);
4024 array[22] = tmp;
4025 tmp = std::min(array[23], array[37]);
4026 array[37] = std::max(array[23], array[37]);
4027 array[23] = tmp;
4028 tmp = std::min(array[26], array[40]);
4029 array[40] = std::max(array[26], array[40]);
4030 array[26] = tmp;
4031 tmp = std::min(array[27], array[41]);
4032 array[41] = std::max(array[27], array[41]);
4033 array[27] = tmp;
4034 tmp = std::min(array[30], array[44]);
4035 array[44] = std::max(array[30], array[44]);
4036 array[30] = tmp;
4037 tmp = std::min(array[31], array[45]);
4038 array[45] = std::max(array[31], array[45]);
4039 array[31] = tmp;
4040 tmp = std::min(array[34], array[48]);
4041 array[48] = std::max(array[34], array[48]);
4042 array[34] = tmp;
4043 tmp = std::min(array[35], array[49]);
4044 array[49] = std::max(array[35], array[49]);
4045 array[35] = tmp;
4046 tmp = std::min(array[38], array[52]);
4047 array[52] = std::max(array[38], array[52]);
4048 array[38] = tmp;
4049 tmp = std::min(array[39], array[53]);
4050 array[53] = std::max(array[39], array[53]);
4051 array[39] = tmp;
4052 tmp = std::min(array[42], array[56]);
4053 array[56] = std::max(array[42], array[56]);
4054 array[42] = tmp;
4055 tmp = std::min(array[43], array[57]);
4056 array[57] = std::max(array[43], array[57]);
4057 array[43] = tmp;
4058 tmp = std::min(array[46], array[60]);
4059 array[60] = std::max(array[46], array[60]);
4060 array[46] = tmp;
4061 tmp = std::min(array[47], array[61]);
4062 array[61] = std::max(array[47], array[61]);
4063 array[47] = tmp;
4064 tmp = std::min(array[50], array[64]);
4065 array[64] = std::max(array[50], array[64]);
4066 array[50] = tmp;
4067 tmp = std::min(array[51], array[65]);
4068 array[65] = std::max(array[51], array[65]);
4069 array[51] = tmp;
4070 tmp = std::min(array[54], array[68]);
4071 array[68] = std::max(array[54], array[68]);
4072 array[54] = tmp;
4073 tmp = std::min(array[55], array[69]);
4074 array[69] = std::max(array[55], array[69]);
4075 array[55] = tmp;
4076 tmp = std::min(array[58], array[72]);
4077 array[72] = std::max(array[58], array[72]);
4078 array[58] = tmp;
4079 tmp = std::min(array[59], array[73]);
4080 array[73] = std::max(array[59], array[73]);
4081 array[59] = tmp;
4082 tmp = std::min(array[62], array[76]);
4083 array[76] = std::max(array[62], array[76]);
4084 array[62] = tmp;
4085 tmp = std::min(array[63], array[77]);
4086 array[77] = std::max(array[63], array[77]);
4087 array[63] = tmp;
4088 tmp = std::min(array[66], array[80]);
4089 array[80] = std::max(array[66], array[80]);
4090 array[66] = tmp;
4091 tmp = std::min(array[2], array[8]);
4092 array[8] = std::max(array[2], array[8]);
4093 array[2] = tmp;
4094 tmp = std::min(array[3], array[9]);
4095 array[9] = std::max(array[3], array[9]);
4096 array[3] = tmp;
4097 tmp = std::min(array[6], array[12]);
4098 array[12] = std::max(array[6], array[12]);
4099 array[6] = tmp;
4100 tmp = std::min(array[7], array[13]);
4101 array[13] = std::max(array[7], array[13]);
4102 array[7] = tmp;
4103 tmp = std::min(array[10], array[16]);
4104 array[16] = std::max(array[10], array[16]);
4105 array[10] = tmp;
4106 tmp = std::min(array[11], array[17]);
4107 array[17] = std::max(array[11], array[17]);
4108 array[11] = tmp;
4109 tmp = std::min(array[14], array[20]);
4110 array[20] = std::max(array[14], array[20]);
4111 array[14] = tmp;
4112 tmp = std::min(array[15], array[21]);
4113 array[21] = std::max(array[15], array[21]);
4114 array[15] = tmp;
4115 tmp = std::min(array[18], array[24]);
4116 array[24] = std::max(array[18], array[24]);
4117 array[18] = tmp;
4118 tmp = std::min(array[19], array[25]);
4119 array[25] = std::max(array[19], array[25]);
4120 array[19] = tmp;
4121 tmp = std::min(array[22], array[28]);
4122 array[28] = std::max(array[22], array[28]);
4123 array[22] = tmp;
4124 tmp = std::min(array[23], array[29]);
4125 array[29] = std::max(array[23], array[29]);
4126 array[23] = tmp;
4127 tmp = std::min(array[26], array[32]);
4128 array[32] = std::max(array[26], array[32]);
4129 array[26] = tmp;
4130 tmp = std::min(array[27], array[33]);
4131 array[33] = std::max(array[27], array[33]);
4132 array[27] = tmp;
4133 tmp = std::min(array[30], array[36]);
4134 array[36] = std::max(array[30], array[36]);
4135 array[30] = tmp;
4136 tmp = std::min(array[31], array[37]);
4137 array[37] = std::max(array[31], array[37]);
4138 array[31] = tmp;
4139 tmp = std::min(array[34], array[40]);
4140 array[40] = std::max(array[34], array[40]);
4141 array[34] = tmp;
4142 tmp = std::min(array[35], array[41]);
4143 array[41] = std::max(array[35], array[41]);
4144 array[35] = tmp;
4145 tmp = std::min(array[38], array[44]);
4146 array[44] = std::max(array[38], array[44]);
4147 array[38] = tmp;
4148 tmp = std::min(array[39], array[45]);
4149 array[45] = std::max(array[39], array[45]);
4150 array[39] = tmp;
4151 tmp = std::min(array[42], array[48]);
4152 array[48] = std::max(array[42], array[48]);
4153 array[42] = tmp;
4154 tmp = std::min(array[43], array[49]);
4155 array[49] = std::max(array[43], array[49]);
4156 array[43] = tmp;
4157 tmp = std::min(array[46], array[52]);
4158 array[52] = std::max(array[46], array[52]);
4159 array[46] = tmp;
4160 tmp = std::min(array[47], array[53]);
4161 array[53] = std::max(array[47], array[53]);
4162 array[47] = tmp;
4163 tmp = std::min(array[50], array[56]);
4164 array[56] = std::max(array[50], array[56]);
4165 array[50] = tmp;
4166 tmp = std::min(array[51], array[57]);
4167 array[57] = std::max(array[51], array[57]);
4168 array[51] = tmp;
4169 tmp = std::min(array[54], array[60]);
4170 array[60] = std::max(array[54], array[60]);
4171 array[54] = tmp;
4172 tmp = std::min(array[55], array[61]);
4173 array[61] = std::max(array[55], array[61]);
4174 array[55] = tmp;
4175 tmp = std::min(array[58], array[64]);
4176 array[64] = std::max(array[58], array[64]);
4177 array[58] = tmp;
4178 tmp = std::min(array[59], array[65]);
4179 array[65] = std::max(array[59], array[65]);
4180 array[59] = tmp;
4181 tmp = std::min(array[62], array[68]);
4182 array[68] = std::max(array[62], array[68]);
4183 array[62] = tmp;
4184 tmp = std::min(array[63], array[69]);
4185 array[69] = std::max(array[63], array[69]);
4186 array[63] = tmp;
4187 tmp = std::min(array[66], array[72]);
4188 array[72] = std::max(array[66], array[72]);
4189 array[66] = tmp;
4190 tmp = std::min(array[67], array[73]);
4191 array[73] = std::max(array[67], array[73]);
4192 array[67] = tmp;
4193 tmp = std::min(array[70], array[76]);
4194 array[76] = std::max(array[70], array[76]);
4195 array[70] = tmp;
4196 tmp = std::min(array[71], array[77]);
4197 array[77] = std::max(array[71], array[77]);
4198 array[71] = tmp;
4199 tmp = std::min(array[74], array[80]);
4200 array[80] = std::max(array[74], array[80]);
4201 array[74] = tmp;
4202 tmp = std::min(array[2], array[4]);
4203 array[4] = std::max(array[2], array[4]);
4204 array[2] = tmp;
4205 tmp = std::min(array[3], array[5]);
4206 array[5] = std::max(array[3], array[5]);
4207 array[3] = tmp;
4208 tmp = std::min(array[6], array[8]);
4209 array[8] = std::max(array[6], array[8]);
4210 array[6] = tmp;
4211 tmp = std::min(array[7], array[9]);
4212 array[9] = std::max(array[7], array[9]);
4213 array[7] = tmp;
4214 tmp = std::min(array[10], array[12]);
4215 array[12] = std::max(array[10], array[12]);
4216 array[10] = tmp;
4217 tmp = std::min(array[11], array[13]);
4218 array[13] = std::max(array[11], array[13]);
4219 array[11] = tmp;
4220 tmp = std::min(array[14], array[16]);
4221 array[16] = std::max(array[14], array[16]);
4222 array[14] = tmp;
4223 tmp = std::min(array[15], array[17]);
4224 array[17] = std::max(array[15], array[17]);
4225 array[15] = tmp;
4226 tmp = std::min(array[18], array[20]);
4227 array[20] = std::max(array[18], array[20]);
4228 array[18] = tmp;
4229 tmp = std::min(array[19], array[21]);
4230 array[21] = std::max(array[19], array[21]);
4231 array[19] = tmp;
4232 tmp = std::min(array[22], array[24]);
4233 array[24] = std::max(array[22], array[24]);
4234 array[22] = tmp;
4235 tmp = std::min(array[23], array[25]);
4236 array[25] = std::max(array[23], array[25]);
4237 array[23] = tmp;
4238 tmp = std::min(array[26], array[28]);
4239 array[28] = std::max(array[26], array[28]);
4240 array[26] = tmp;
4241 tmp = std::min(array[27], array[29]);
4242 array[29] = std::max(array[27], array[29]);
4243 array[27] = tmp;
4244 tmp = std::min(array[30], array[32]);
4245 array[32] = std::max(array[30], array[32]);
4246 array[30] = tmp;
4247 tmp = std::min(array[31], array[33]);
4248 array[33] = std::max(array[31], array[33]);
4249 array[31] = tmp;
4250 tmp = std::min(array[34], array[36]);
4251 array[36] = std::max(array[34], array[36]);
4252 array[34] = tmp;
4253 tmp = std::min(array[35], array[37]);
4254 array[37] = std::max(array[35], array[37]);
4255 array[35] = tmp;
4256 tmp = std::min(array[38], array[40]);
4257 array[40] = std::max(array[38], array[40]);
4258 array[38] = tmp;
4259 tmp = std::min(array[39], array[41]);
4260 array[41] = std::max(array[39], array[41]);
4261 array[39] = tmp;
4262 tmp = std::min(array[42], array[44]);
4263 array[44] = std::max(array[42], array[44]);
4264 array[42] = tmp;
4265 tmp = std::min(array[43], array[45]);
4266 array[45] = std::max(array[43], array[45]);
4267 array[43] = tmp;
4268 tmp = std::min(array[46], array[48]);
4269 array[48] = std::max(array[46], array[48]);
4270 array[46] = tmp;
4271 tmp = std::min(array[47], array[49]);
4272 array[49] = std::max(array[47], array[49]);
4273 array[47] = tmp;
4274 tmp = std::min(array[50], array[52]);
4275 array[52] = std::max(array[50], array[52]);
4276 array[50] = tmp;
4277 tmp = std::min(array[51], array[53]);
4278 array[53] = std::max(array[51], array[53]);
4279 array[51] = tmp;
4280 tmp = std::min(array[54], array[56]);
4281 array[56] = std::max(array[54], array[56]);
4282 array[54] = tmp;
4283 tmp = std::min(array[55], array[57]);
4284 array[57] = std::max(array[55], array[57]);
4285 array[55] = tmp;
4286 tmp = std::min(array[58], array[60]);
4287 array[60] = std::max(array[58], array[60]);
4288 array[58] = tmp;
4289 tmp = std::min(array[59], array[61]);
4290 array[61] = std::max(array[59], array[61]);
4291 array[59] = tmp;
4292 tmp = std::min(array[62], array[64]);
4293 array[64] = std::max(array[62], array[64]);
4294 array[62] = tmp;
4295 tmp = std::min(array[63], array[65]);
4296 array[65] = std::max(array[63], array[65]);
4297 array[63] = tmp;
4298 tmp = std::min(array[66], array[68]);
4299 array[68] = std::max(array[66], array[68]);
4300 array[66] = tmp;
4301 tmp = std::min(array[67], array[69]);
4302 array[69] = std::max(array[67], array[69]);
4303 array[67] = tmp;
4304 tmp = std::min(array[70], array[72]);
4305 array[72] = std::max(array[70], array[72]);
4306 array[70] = tmp;
4307 tmp = std::min(array[71], array[73]);
4308 array[73] = std::max(array[71], array[73]);
4309 array[71] = tmp;
4310 tmp = std::min(array[74], array[76]);
4311 array[76] = std::max(array[74], array[76]);
4312 array[74] = tmp;
4313 tmp = std::min(array[75], array[77]);
4314 array[77] = std::max(array[75], array[77]);
4315 array[75] = tmp;
4316 tmp = std::min(array[78], array[80]);
4317 array[80] = std::max(array[78], array[80]);
4318 array[78] = tmp;
4319 array[1] = std::max(array[0], array[1]);
4320 array[3] = std::max(array[2], array[3]);
4321 array[5] = std::max(array[4], array[5]);
4322 array[7] = std::max(array[6], array[7]);
4323 array[9] = std::max(array[8], array[9]);
4324 array[11] = std::max(array[10], array[11]);
4325 array[13] = std::max(array[12], array[13]);
4326 array[15] = std::max(array[14], array[15]);
4327 array[17] = std::max(array[16], array[17]);
4328 array[19] = std::max(array[18], array[19]);
4329 array[21] = std::max(array[20], array[21]);
4330 array[23] = std::max(array[22], array[23]);
4331 array[25] = std::max(array[24], array[25]);
4332 array[27] = std::max(array[26], array[27]);
4333 array[29] = std::max(array[28], array[29]);
4334 array[31] = std::max(array[30], array[31]);
4335 array[33] = std::max(array[32], array[33]);
4336 array[35] = std::max(array[34], array[35]);
4337 array[37] = std::max(array[36], array[37]);
4338 array[39] = std::max(array[38], array[39]);
4339 array[40] = std::min(array[40], array[41]);
4340 array[42] = std::min(array[42], array[43]);
4341 array[44] = std::min(array[44], array[45]);
4342 array[46] = std::min(array[46], array[47]);
4343 array[48] = std::min(array[48], array[49]);
4344 array[50] = std::min(array[50], array[51]);
4345 array[52] = std::min(array[52], array[53]);
4346 array[54] = std::min(array[54], array[55]);
4347 array[56] = std::min(array[56], array[57]);
4348 array[58] = std::min(array[58], array[59]);
4349 array[60] = std::min(array[60], array[61]);
4350 array[62] = std::min(array[62], array[63]);
4351 array[64] = std::min(array[64], array[65]);
4352 array[66] = std::min(array[66], array[67]);
4353 array[68] = std::min(array[68], array[69]);
4354 array[70] = std::min(array[70], array[71]);
4355 array[72] = std::min(array[72], array[73]);
4356 array[74] = std::min(array[74], array[75]);
4357 array[76] = std::min(array[76], array[77]);
4358 array[78] = std::min(array[78], array[79]);
4359 array[64] = std::max(array[1], array[64]);
4360 array[66] = std::max(array[3], array[66]);
4361 array[68] = std::max(array[5], array[68]);
4362 array[70] = std::max(array[7], array[70]);
4363 array[9] = std::min(array[9], array[72]);
4364 array[11] = std::min(array[11], array[74]);
4365 array[13] = std::min(array[13], array[76]);
4366 array[15] = std::min(array[15], array[78]);
4367 array[17] = std::min(array[17], array[80]);
4368 array[40] = std::max(array[9], array[40]);
4369 array[42] = std::max(array[11], array[42]);
4370 array[44] = std::max(array[13], array[44]);
4371 array[46] = std::max(array[15], array[46]);
4372 array[48] = std::max(array[17], array[48]);
4373 array[50] = std::max(array[19], array[50]);
4374 array[52] = std::max(array[21], array[52]);
4375 array[54] = std::max(array[23], array[54]);
4376 array[25] = std::min(array[25], array[56]);
4377 array[27] = std::min(array[27], array[58]);
4378 array[29] = std::min(array[29], array[60]);
4379 array[31] = std::min(array[31], array[62]);
4380 array[33] = std::min(array[33], array[64]);
4381 array[35] = std::min(array[35], array[66]);
4382 array[37] = std::min(array[37], array[68]);
4383 array[39] = std::min(array[39], array[70]);
4384 array[40] = std::max(array[25], array[40]);
4385 array[42] = std::max(array[27], array[42]);
4386 array[44] = std::max(array[29], array[44]);
4387 array[46] = std::max(array[31], array[46]);
4388 array[33] = std::min(array[33], array[48]);
4389 array[35] = std::min(array[35], array[50]);
4390 array[37] = std::min(array[37], array[52]);
4391 array[39] = std::min(array[39], array[54]);
4392 array[40] = std::max(array[33], array[40]);
4393 array[42] = std::max(array[35], array[42]);
4394 array[37] = std::min(array[37], array[44]);
4395 array[39] = std::min(array[39], array[46]);
4396 array[40] = std::max(array[37], array[40]);
4397 array[39] = std::min(array[39], array[42]);
4398 return std::max(array[39], array[40]);
4399 }
4400
4401 #ifdef __SSE2__
4402 template<>
median(std::array<vfloat,81> array)4403 inline vfloat median(std::array<vfloat, 81> array)
4404 {
4405 vfloat tmp = vminf(array[0], array[64]);
4406 array[64] = vmaxf(array[0], array[64]);
4407 array[0] = tmp;
4408 tmp = vminf(array[1], array[65]);
4409 array[65] = vmaxf(array[1], array[65]);
4410 array[1] = tmp;
4411 tmp = vminf(array[2], array[66]);
4412 array[66] = vmaxf(array[2], array[66]);
4413 array[2] = tmp;
4414 tmp = vminf(array[3], array[67]);
4415 array[67] = vmaxf(array[3], array[67]);
4416 array[3] = tmp;
4417 tmp = vminf(array[4], array[68]);
4418 array[68] = vmaxf(array[4], array[68]);
4419 array[4] = tmp;
4420 tmp = vminf(array[5], array[69]);
4421 array[69] = vmaxf(array[5], array[69]);
4422 array[5] = tmp;
4423 tmp = vminf(array[6], array[70]);
4424 array[70] = vmaxf(array[6], array[70]);
4425 array[6] = tmp;
4426 tmp = vminf(array[7], array[71]);
4427 array[71] = vmaxf(array[7], array[71]);
4428 array[7] = tmp;
4429 tmp = vminf(array[8], array[72]);
4430 array[72] = vmaxf(array[8], array[72]);
4431 array[8] = tmp;
4432 tmp = vminf(array[9], array[73]);
4433 array[73] = vmaxf(array[9], array[73]);
4434 array[9] = tmp;
4435 tmp = vminf(array[10], array[74]);
4436 array[74] = vmaxf(array[10], array[74]);
4437 array[10] = tmp;
4438 tmp = vminf(array[11], array[75]);
4439 array[75] = vmaxf(array[11], array[75]);
4440 array[11] = tmp;
4441 tmp = vminf(array[12], array[76]);
4442 array[76] = vmaxf(array[12], array[76]);
4443 array[12] = tmp;
4444 tmp = vminf(array[13], array[77]);
4445 array[77] = vmaxf(array[13], array[77]);
4446 array[13] = tmp;
4447 tmp = vminf(array[14], array[78]);
4448 array[78] = vmaxf(array[14], array[78]);
4449 array[14] = tmp;
4450 tmp = vminf(array[15], array[79]);
4451 array[79] = vmaxf(array[15], array[79]);
4452 array[15] = tmp;
4453 tmp = vminf(array[16], array[80]);
4454 array[80] = vmaxf(array[16], array[80]);
4455 array[16] = tmp;
4456 tmp = vminf(array[0], array[32]);
4457 array[32] = vmaxf(array[0], array[32]);
4458 array[0] = tmp;
4459 tmp = vminf(array[1], array[33]);
4460 array[33] = vmaxf(array[1], array[33]);
4461 array[1] = tmp;
4462 tmp = vminf(array[2], array[34]);
4463 array[34] = vmaxf(array[2], array[34]);
4464 array[2] = tmp;
4465 tmp = vminf(array[3], array[35]);
4466 array[35] = vmaxf(array[3], array[35]);
4467 array[3] = tmp;
4468 tmp = vminf(array[4], array[36]);
4469 array[36] = vmaxf(array[4], array[36]);
4470 array[4] = tmp;
4471 tmp = vminf(array[5], array[37]);
4472 array[37] = vmaxf(array[5], array[37]);
4473 array[5] = tmp;
4474 tmp = vminf(array[6], array[38]);
4475 array[38] = vmaxf(array[6], array[38]);
4476 array[6] = tmp;
4477 tmp = vminf(array[7], array[39]);
4478 array[39] = vmaxf(array[7], array[39]);
4479 array[7] = tmp;
4480 tmp = vminf(array[8], array[40]);
4481 array[40] = vmaxf(array[8], array[40]);
4482 array[8] = tmp;
4483 tmp = vminf(array[9], array[41]);
4484 array[41] = vmaxf(array[9], array[41]);
4485 array[9] = tmp;
4486 tmp = vminf(array[10], array[42]);
4487 array[42] = vmaxf(array[10], array[42]);
4488 array[10] = tmp;
4489 tmp = vminf(array[11], array[43]);
4490 array[43] = vmaxf(array[11], array[43]);
4491 array[11] = tmp;
4492 tmp = vminf(array[12], array[44]);
4493 array[44] = vmaxf(array[12], array[44]);
4494 array[12] = tmp;
4495 tmp = vminf(array[13], array[45]);
4496 array[45] = vmaxf(array[13], array[45]);
4497 array[13] = tmp;
4498 tmp = vminf(array[14], array[46]);
4499 array[46] = vmaxf(array[14], array[46]);
4500 array[14] = tmp;
4501 tmp = vminf(array[15], array[47]);
4502 array[47] = vmaxf(array[15], array[47]);
4503 array[15] = tmp;
4504 tmp = vminf(array[16], array[48]);
4505 array[48] = vmaxf(array[16], array[48]);
4506 array[16] = tmp;
4507 tmp = vminf(array[17], array[49]);
4508 array[49] = vmaxf(array[17], array[49]);
4509 array[17] = tmp;
4510 tmp = vminf(array[18], array[50]);
4511 array[50] = vmaxf(array[18], array[50]);
4512 array[18] = tmp;
4513 tmp = vminf(array[19], array[51]);
4514 array[51] = vmaxf(array[19], array[51]);
4515 array[19] = tmp;
4516 tmp = vminf(array[20], array[52]);
4517 array[52] = vmaxf(array[20], array[52]);
4518 array[20] = tmp;
4519 tmp = vminf(array[21], array[53]);
4520 array[53] = vmaxf(array[21], array[53]);
4521 array[21] = tmp;
4522 tmp = vminf(array[22], array[54]);
4523 array[54] = vmaxf(array[22], array[54]);
4524 array[22] = tmp;
4525 tmp = vminf(array[23], array[55]);
4526 array[55] = vmaxf(array[23], array[55]);
4527 array[23] = tmp;
4528 tmp = vminf(array[24], array[56]);
4529 array[56] = vmaxf(array[24], array[56]);
4530 array[24] = tmp;
4531 tmp = vminf(array[25], array[57]);
4532 array[57] = vmaxf(array[25], array[57]);
4533 array[25] = tmp;
4534 tmp = vminf(array[26], array[58]);
4535 array[58] = vmaxf(array[26], array[58]);
4536 array[26] = tmp;
4537 tmp = vminf(array[27], array[59]);
4538 array[59] = vmaxf(array[27], array[59]);
4539 array[27] = tmp;
4540 tmp = vminf(array[28], array[60]);
4541 array[60] = vmaxf(array[28], array[60]);
4542 array[28] = tmp;
4543 tmp = vminf(array[29], array[61]);
4544 array[61] = vmaxf(array[29], array[61]);
4545 array[29] = tmp;
4546 tmp = vminf(array[30], array[62]);
4547 array[62] = vmaxf(array[30], array[62]);
4548 array[30] = tmp;
4549 tmp = vminf(array[31], array[63]);
4550 array[63] = vmaxf(array[31], array[63]);
4551 array[31] = tmp;
4552 tmp = vminf(array[32], array[64]);
4553 array[64] = vmaxf(array[32], array[64]);
4554 array[32] = tmp;
4555 tmp = vminf(array[33], array[65]);
4556 array[65] = vmaxf(array[33], array[65]);
4557 array[33] = tmp;
4558 tmp = vminf(array[34], array[66]);
4559 array[66] = vmaxf(array[34], array[66]);
4560 array[34] = tmp;
4561 tmp = vminf(array[35], array[67]);
4562 array[67] = vmaxf(array[35], array[67]);
4563 array[35] = tmp;
4564 tmp = vminf(array[36], array[68]);
4565 array[68] = vmaxf(array[36], array[68]);
4566 array[36] = tmp;
4567 tmp = vminf(array[37], array[69]);
4568 array[69] = vmaxf(array[37], array[69]);
4569 array[37] = tmp;
4570 tmp = vminf(array[38], array[70]);
4571 array[70] = vmaxf(array[38], array[70]);
4572 array[38] = tmp;
4573 tmp = vminf(array[39], array[71]);
4574 array[71] = vmaxf(array[39], array[71]);
4575 array[39] = tmp;
4576 tmp = vminf(array[40], array[72]);
4577 array[72] = vmaxf(array[40], array[72]);
4578 array[40] = tmp;
4579 tmp = vminf(array[41], array[73]);
4580 array[73] = vmaxf(array[41], array[73]);
4581 array[41] = tmp;
4582 tmp = vminf(array[42], array[74]);
4583 array[74] = vmaxf(array[42], array[74]);
4584 array[42] = tmp;
4585 tmp = vminf(array[43], array[75]);
4586 array[75] = vmaxf(array[43], array[75]);
4587 array[43] = tmp;
4588 tmp = vminf(array[44], array[76]);
4589 array[76] = vmaxf(array[44], array[76]);
4590 array[44] = tmp;
4591 tmp = vminf(array[45], array[77]);
4592 array[77] = vmaxf(array[45], array[77]);
4593 array[45] = tmp;
4594 tmp = vminf(array[46], array[78]);
4595 array[78] = vmaxf(array[46], array[78]);
4596 array[46] = tmp;
4597 tmp = vminf(array[47], array[79]);
4598 array[79] = vmaxf(array[47], array[79]);
4599 array[47] = tmp;
4600 tmp = vminf(array[48], array[80]);
4601 array[80] = vmaxf(array[48], array[80]);
4602 array[48] = tmp;
4603 tmp = vminf(array[0], array[16]);
4604 array[16] = vmaxf(array[0], array[16]);
4605 array[0] = tmp;
4606 tmp = vminf(array[1], array[17]);
4607 array[17] = vmaxf(array[1], array[17]);
4608 array[1] = tmp;
4609 tmp = vminf(array[2], array[18]);
4610 array[18] = vmaxf(array[2], array[18]);
4611 array[2] = tmp;
4612 tmp = vminf(array[3], array[19]);
4613 array[19] = vmaxf(array[3], array[19]);
4614 array[3] = tmp;
4615 tmp = vminf(array[4], array[20]);
4616 array[20] = vmaxf(array[4], array[20]);
4617 array[4] = tmp;
4618 tmp = vminf(array[5], array[21]);
4619 array[21] = vmaxf(array[5], array[21]);
4620 array[5] = tmp;
4621 tmp = vminf(array[6], array[22]);
4622 array[22] = vmaxf(array[6], array[22]);
4623 array[6] = tmp;
4624 tmp = vminf(array[7], array[23]);
4625 array[23] = vmaxf(array[7], array[23]);
4626 array[7] = tmp;
4627 tmp = vminf(array[8], array[24]);
4628 array[24] = vmaxf(array[8], array[24]);
4629 array[8] = tmp;
4630 tmp = vminf(array[9], array[25]);
4631 array[25] = vmaxf(array[9], array[25]);
4632 array[9] = tmp;
4633 tmp = vminf(array[10], array[26]);
4634 array[26] = vmaxf(array[10], array[26]);
4635 array[10] = tmp;
4636 tmp = vminf(array[11], array[27]);
4637 array[27] = vmaxf(array[11], array[27]);
4638 array[11] = tmp;
4639 tmp = vminf(array[12], array[28]);
4640 array[28] = vmaxf(array[12], array[28]);
4641 array[12] = tmp;
4642 tmp = vminf(array[13], array[29]);
4643 array[29] = vmaxf(array[13], array[29]);
4644 array[13] = tmp;
4645 tmp = vminf(array[14], array[30]);
4646 array[30] = vmaxf(array[14], array[30]);
4647 array[14] = tmp;
4648 tmp = vminf(array[15], array[31]);
4649 array[31] = vmaxf(array[15], array[31]);
4650 array[15] = tmp;
4651 tmp = vminf(array[32], array[48]);
4652 array[48] = vmaxf(array[32], array[48]);
4653 array[32] = tmp;
4654 tmp = vminf(array[33], array[49]);
4655 array[49] = vmaxf(array[33], array[49]);
4656 array[33] = tmp;
4657 tmp = vminf(array[34], array[50]);
4658 array[50] = vmaxf(array[34], array[50]);
4659 array[34] = tmp;
4660 tmp = vminf(array[35], array[51]);
4661 array[51] = vmaxf(array[35], array[51]);
4662 array[35] = tmp;
4663 tmp = vminf(array[36], array[52]);
4664 array[52] = vmaxf(array[36], array[52]);
4665 array[36] = tmp;
4666 tmp = vminf(array[37], array[53]);
4667 array[53] = vmaxf(array[37], array[53]);
4668 array[37] = tmp;
4669 tmp = vminf(array[38], array[54]);
4670 array[54] = vmaxf(array[38], array[54]);
4671 array[38] = tmp;
4672 tmp = vminf(array[39], array[55]);
4673 array[55] = vmaxf(array[39], array[55]);
4674 array[39] = tmp;
4675 tmp = vminf(array[40], array[56]);
4676 array[56] = vmaxf(array[40], array[56]);
4677 array[40] = tmp;
4678 tmp = vminf(array[41], array[57]);
4679 array[57] = vmaxf(array[41], array[57]);
4680 array[41] = tmp;
4681 tmp = vminf(array[42], array[58]);
4682 array[58] = vmaxf(array[42], array[58]);
4683 array[42] = tmp;
4684 tmp = vminf(array[43], array[59]);
4685 array[59] = vmaxf(array[43], array[59]);
4686 array[43] = tmp;
4687 tmp = vminf(array[44], array[60]);
4688 array[60] = vmaxf(array[44], array[60]);
4689 array[44] = tmp;
4690 tmp = vminf(array[45], array[61]);
4691 array[61] = vmaxf(array[45], array[61]);
4692 array[45] = tmp;
4693 tmp = vminf(array[46], array[62]);
4694 array[62] = vmaxf(array[46], array[62]);
4695 array[46] = tmp;
4696 tmp = vminf(array[47], array[63]);
4697 array[63] = vmaxf(array[47], array[63]);
4698 array[47] = tmp;
4699 tmp = vminf(array[64], array[80]);
4700 array[80] = vmaxf(array[64], array[80]);
4701 array[64] = tmp;
4702 tmp = vminf(array[16], array[64]);
4703 array[64] = vmaxf(array[16], array[64]);
4704 array[16] = tmp;
4705 tmp = vminf(array[17], array[65]);
4706 array[65] = vmaxf(array[17], array[65]);
4707 array[17] = tmp;
4708 tmp = vminf(array[18], array[66]);
4709 array[66] = vmaxf(array[18], array[66]);
4710 array[18] = tmp;
4711 tmp = vminf(array[19], array[67]);
4712 array[67] = vmaxf(array[19], array[67]);
4713 array[19] = tmp;
4714 tmp = vminf(array[20], array[68]);
4715 array[68] = vmaxf(array[20], array[68]);
4716 array[20] = tmp;
4717 tmp = vminf(array[21], array[69]);
4718 array[69] = vmaxf(array[21], array[69]);
4719 array[21] = tmp;
4720 tmp = vminf(array[22], array[70]);
4721 array[70] = vmaxf(array[22], array[70]);
4722 array[22] = tmp;
4723 tmp = vminf(array[23], array[71]);
4724 array[71] = vmaxf(array[23], array[71]);
4725 array[23] = tmp;
4726 tmp = vminf(array[24], array[72]);
4727 array[72] = vmaxf(array[24], array[72]);
4728 array[24] = tmp;
4729 tmp = vminf(array[25], array[73]);
4730 array[73] = vmaxf(array[25], array[73]);
4731 array[25] = tmp;
4732 tmp = vminf(array[26], array[74]);
4733 array[74] = vmaxf(array[26], array[74]);
4734 array[26] = tmp;
4735 tmp = vminf(array[27], array[75]);
4736 array[75] = vmaxf(array[27], array[75]);
4737 array[27] = tmp;
4738 tmp = vminf(array[28], array[76]);
4739 array[76] = vmaxf(array[28], array[76]);
4740 array[28] = tmp;
4741 tmp = vminf(array[29], array[77]);
4742 array[77] = vmaxf(array[29], array[77]);
4743 array[29] = tmp;
4744 tmp = vminf(array[30], array[78]);
4745 array[78] = vmaxf(array[30], array[78]);
4746 array[30] = tmp;
4747 tmp = vminf(array[31], array[79]);
4748 array[79] = vmaxf(array[31], array[79]);
4749 array[31] = tmp;
4750 tmp = vminf(array[16], array[32]);
4751 array[32] = vmaxf(array[16], array[32]);
4752 array[16] = tmp;
4753 tmp = vminf(array[17], array[33]);
4754 array[33] = vmaxf(array[17], array[33]);
4755 array[17] = tmp;
4756 tmp = vminf(array[18], array[34]);
4757 array[34] = vmaxf(array[18], array[34]);
4758 array[18] = tmp;
4759 tmp = vminf(array[19], array[35]);
4760 array[35] = vmaxf(array[19], array[35]);
4761 array[19] = tmp;
4762 tmp = vminf(array[20], array[36]);
4763 array[36] = vmaxf(array[20], array[36]);
4764 array[20] = tmp;
4765 tmp = vminf(array[21], array[37]);
4766 array[37] = vmaxf(array[21], array[37]);
4767 array[21] = tmp;
4768 tmp = vminf(array[22], array[38]);
4769 array[38] = vmaxf(array[22], array[38]);
4770 array[22] = tmp;
4771 tmp = vminf(array[23], array[39]);
4772 array[39] = vmaxf(array[23], array[39]);
4773 array[23] = tmp;
4774 tmp = vminf(array[24], array[40]);
4775 array[40] = vmaxf(array[24], array[40]);
4776 array[24] = tmp;
4777 tmp = vminf(array[25], array[41]);
4778 array[41] = vmaxf(array[25], array[41]);
4779 array[25] = tmp;
4780 tmp = vminf(array[26], array[42]);
4781 array[42] = vmaxf(array[26], array[42]);
4782 array[26] = tmp;
4783 tmp = vminf(array[27], array[43]);
4784 array[43] = vmaxf(array[27], array[43]);
4785 array[27] = tmp;
4786 tmp = vminf(array[28], array[44]);
4787 array[44] = vmaxf(array[28], array[44]);
4788 array[28] = tmp;
4789 tmp = vminf(array[29], array[45]);
4790 array[45] = vmaxf(array[29], array[45]);
4791 array[29] = tmp;
4792 tmp = vminf(array[30], array[46]);
4793 array[46] = vmaxf(array[30], array[46]);
4794 array[30] = tmp;
4795 tmp = vminf(array[31], array[47]);
4796 array[47] = vmaxf(array[31], array[47]);
4797 array[31] = tmp;
4798 tmp = vminf(array[48], array[64]);
4799 array[64] = vmaxf(array[48], array[64]);
4800 array[48] = tmp;
4801 tmp = vminf(array[49], array[65]);
4802 array[65] = vmaxf(array[49], array[65]);
4803 array[49] = tmp;
4804 tmp = vminf(array[50], array[66]);
4805 array[66] = vmaxf(array[50], array[66]);
4806 array[50] = tmp;
4807 tmp = vminf(array[51], array[67]);
4808 array[67] = vmaxf(array[51], array[67]);
4809 array[51] = tmp;
4810 tmp = vminf(array[52], array[68]);
4811 array[68] = vmaxf(array[52], array[68]);
4812 array[52] = tmp;
4813 tmp = vminf(array[53], array[69]);
4814 array[69] = vmaxf(array[53], array[69]);
4815 array[53] = tmp;
4816 tmp = vminf(array[54], array[70]);
4817 array[70] = vmaxf(array[54], array[70]);
4818 array[54] = tmp;
4819 tmp = vminf(array[55], array[71]);
4820 array[71] = vmaxf(array[55], array[71]);
4821 array[55] = tmp;
4822 tmp = vminf(array[56], array[72]);
4823 array[72] = vmaxf(array[56], array[72]);
4824 array[56] = tmp;
4825 tmp = vminf(array[57], array[73]);
4826 array[73] = vmaxf(array[57], array[73]);
4827 array[57] = tmp;
4828 tmp = vminf(array[58], array[74]);
4829 array[74] = vmaxf(array[58], array[74]);
4830 array[58] = tmp;
4831 tmp = vminf(array[59], array[75]);
4832 array[75] = vmaxf(array[59], array[75]);
4833 array[59] = tmp;
4834 tmp = vminf(array[60], array[76]);
4835 array[76] = vmaxf(array[60], array[76]);
4836 array[60] = tmp;
4837 tmp = vminf(array[61], array[77]);
4838 array[77] = vmaxf(array[61], array[77]);
4839 array[61] = tmp;
4840 tmp = vminf(array[62], array[78]);
4841 array[78] = vmaxf(array[62], array[78]);
4842 array[62] = tmp;
4843 tmp = vminf(array[63], array[79]);
4844 array[79] = vmaxf(array[63], array[79]);
4845 array[63] = tmp;
4846 tmp = vminf(array[0], array[8]);
4847 array[8] = vmaxf(array[0], array[8]);
4848 array[0] = tmp;
4849 tmp = vminf(array[1], array[9]);
4850 array[9] = vmaxf(array[1], array[9]);
4851 array[1] = tmp;
4852 tmp = vminf(array[2], array[10]);
4853 array[10] = vmaxf(array[2], array[10]);
4854 array[2] = tmp;
4855 tmp = vminf(array[3], array[11]);
4856 array[11] = vmaxf(array[3], array[11]);
4857 array[3] = tmp;
4858 tmp = vminf(array[4], array[12]);
4859 array[12] = vmaxf(array[4], array[12]);
4860 array[4] = tmp;
4861 tmp = vminf(array[5], array[13]);
4862 array[13] = vmaxf(array[5], array[13]);
4863 array[5] = tmp;
4864 tmp = vminf(array[6], array[14]);
4865 array[14] = vmaxf(array[6], array[14]);
4866 array[6] = tmp;
4867 tmp = vminf(array[7], array[15]);
4868 array[15] = vmaxf(array[7], array[15]);
4869 array[7] = tmp;
4870 tmp = vminf(array[16], array[24]);
4871 array[24] = vmaxf(array[16], array[24]);
4872 array[16] = tmp;
4873 tmp = vminf(array[17], array[25]);
4874 array[25] = vmaxf(array[17], array[25]);
4875 array[17] = tmp;
4876 tmp = vminf(array[18], array[26]);
4877 array[26] = vmaxf(array[18], array[26]);
4878 array[18] = tmp;
4879 tmp = vminf(array[19], array[27]);
4880 array[27] = vmaxf(array[19], array[27]);
4881 array[19] = tmp;
4882 tmp = vminf(array[20], array[28]);
4883 array[28] = vmaxf(array[20], array[28]);
4884 array[20] = tmp;
4885 tmp = vminf(array[21], array[29]);
4886 array[29] = vmaxf(array[21], array[29]);
4887 array[21] = tmp;
4888 tmp = vminf(array[22], array[30]);
4889 array[30] = vmaxf(array[22], array[30]);
4890 array[22] = tmp;
4891 tmp = vminf(array[23], array[31]);
4892 array[31] = vmaxf(array[23], array[31]);
4893 array[23] = tmp;
4894 tmp = vminf(array[32], array[40]);
4895 array[40] = vmaxf(array[32], array[40]);
4896 array[32] = tmp;
4897 tmp = vminf(array[33], array[41]);
4898 array[41] = vmaxf(array[33], array[41]);
4899 array[33] = tmp;
4900 tmp = vminf(array[34], array[42]);
4901 array[42] = vmaxf(array[34], array[42]);
4902 array[34] = tmp;
4903 tmp = vminf(array[35], array[43]);
4904 array[43] = vmaxf(array[35], array[43]);
4905 array[35] = tmp;
4906 tmp = vminf(array[36], array[44]);
4907 array[44] = vmaxf(array[36], array[44]);
4908 array[36] = tmp;
4909 tmp = vminf(array[37], array[45]);
4910 array[45] = vmaxf(array[37], array[45]);
4911 array[37] = tmp;
4912 tmp = vminf(array[38], array[46]);
4913 array[46] = vmaxf(array[38], array[46]);
4914 array[38] = tmp;
4915 tmp = vminf(array[39], array[47]);
4916 array[47] = vmaxf(array[39], array[47]);
4917 array[39] = tmp;
4918 tmp = vminf(array[48], array[56]);
4919 array[56] = vmaxf(array[48], array[56]);
4920 array[48] = tmp;
4921 tmp = vminf(array[49], array[57]);
4922 array[57] = vmaxf(array[49], array[57]);
4923 array[49] = tmp;
4924 tmp = vminf(array[50], array[58]);
4925 array[58] = vmaxf(array[50], array[58]);
4926 array[50] = tmp;
4927 tmp = vminf(array[51], array[59]);
4928 array[59] = vmaxf(array[51], array[59]);
4929 array[51] = tmp;
4930 tmp = vminf(array[52], array[60]);
4931 array[60] = vmaxf(array[52], array[60]);
4932 array[52] = tmp;
4933 tmp = vminf(array[53], array[61]);
4934 array[61] = vmaxf(array[53], array[61]);
4935 array[53] = tmp;
4936 tmp = vminf(array[54], array[62]);
4937 array[62] = vmaxf(array[54], array[62]);
4938 array[54] = tmp;
4939 tmp = vminf(array[55], array[63]);
4940 array[63] = vmaxf(array[55], array[63]);
4941 array[55] = tmp;
4942 tmp = vminf(array[64], array[72]);
4943 array[72] = vmaxf(array[64], array[72]);
4944 array[64] = tmp;
4945 tmp = vminf(array[65], array[73]);
4946 array[73] = vmaxf(array[65], array[73]);
4947 array[65] = tmp;
4948 tmp = vminf(array[66], array[74]);
4949 array[74] = vmaxf(array[66], array[74]);
4950 array[66] = tmp;
4951 tmp = vminf(array[67], array[75]);
4952 array[75] = vmaxf(array[67], array[75]);
4953 array[67] = tmp;
4954 tmp = vminf(array[68], array[76]);
4955 array[76] = vmaxf(array[68], array[76]);
4956 array[68] = tmp;
4957 tmp = vminf(array[69], array[77]);
4958 array[77] = vmaxf(array[69], array[77]);
4959 array[69] = tmp;
4960 tmp = vminf(array[70], array[78]);
4961 array[78] = vmaxf(array[70], array[78]);
4962 array[70] = tmp;
4963 tmp = vminf(array[71], array[79]);
4964 array[79] = vmaxf(array[71], array[79]);
4965 array[71] = tmp;
4966 tmp = vminf(array[8], array[64]);
4967 array[64] = vmaxf(array[8], array[64]);
4968 array[8] = tmp;
4969 tmp = vminf(array[9], array[65]);
4970 array[65] = vmaxf(array[9], array[65]);
4971 array[9] = tmp;
4972 tmp = vminf(array[10], array[66]);
4973 array[66] = vmaxf(array[10], array[66]);
4974 array[10] = tmp;
4975 tmp = vminf(array[11], array[67]);
4976 array[67] = vmaxf(array[11], array[67]);
4977 array[11] = tmp;
4978 tmp = vminf(array[12], array[68]);
4979 array[68] = vmaxf(array[12], array[68]);
4980 array[12] = tmp;
4981 tmp = vminf(array[13], array[69]);
4982 array[69] = vmaxf(array[13], array[69]);
4983 array[13] = tmp;
4984 tmp = vminf(array[14], array[70]);
4985 array[70] = vmaxf(array[14], array[70]);
4986 array[14] = tmp;
4987 tmp = vminf(array[15], array[71]);
4988 array[71] = vmaxf(array[15], array[71]);
4989 array[15] = tmp;
4990 tmp = vminf(array[24], array[80]);
4991 array[80] = vmaxf(array[24], array[80]);
4992 array[24] = tmp;
4993 tmp = vminf(array[8], array[32]);
4994 array[32] = vmaxf(array[8], array[32]);
4995 array[8] = tmp;
4996 tmp = vminf(array[9], array[33]);
4997 array[33] = vmaxf(array[9], array[33]);
4998 array[9] = tmp;
4999 tmp = vminf(array[10], array[34]);
5000 array[34] = vmaxf(array[10], array[34]);
5001 array[10] = tmp;
5002 tmp = vminf(array[11], array[35]);
5003 array[35] = vmaxf(array[11], array[35]);
5004 array[11] = tmp;
5005 tmp = vminf(array[12], array[36]);
5006 array[36] = vmaxf(array[12], array[36]);
5007 array[12] = tmp;
5008 tmp = vminf(array[13], array[37]);
5009 array[37] = vmaxf(array[13], array[37]);
5010 array[13] = tmp;
5011 tmp = vminf(array[14], array[38]);
5012 array[38] = vmaxf(array[14], array[38]);
5013 array[14] = tmp;
5014 tmp = vminf(array[15], array[39]);
5015 array[39] = vmaxf(array[15], array[39]);
5016 array[15] = tmp;
5017 tmp = vminf(array[24], array[48]);
5018 array[48] = vmaxf(array[24], array[48]);
5019 array[24] = tmp;
5020 tmp = vminf(array[25], array[49]);
5021 array[49] = vmaxf(array[25], array[49]);
5022 array[25] = tmp;
5023 tmp = vminf(array[26], array[50]);
5024 array[50] = vmaxf(array[26], array[50]);
5025 array[26] = tmp;
5026 tmp = vminf(array[27], array[51]);
5027 array[51] = vmaxf(array[27], array[51]);
5028 array[27] = tmp;
5029 tmp = vminf(array[28], array[52]);
5030 array[52] = vmaxf(array[28], array[52]);
5031 array[28] = tmp;
5032 tmp = vminf(array[29], array[53]);
5033 array[53] = vmaxf(array[29], array[53]);
5034 array[29] = tmp;
5035 tmp = vminf(array[30], array[54]);
5036 array[54] = vmaxf(array[30], array[54]);
5037 array[30] = tmp;
5038 tmp = vminf(array[31], array[55]);
5039 array[55] = vmaxf(array[31], array[55]);
5040 array[31] = tmp;
5041 tmp = vminf(array[40], array[64]);
5042 array[64] = vmaxf(array[40], array[64]);
5043 array[40] = tmp;
5044 tmp = vminf(array[41], array[65]);
5045 array[65] = vmaxf(array[41], array[65]);
5046 array[41] = tmp;
5047 tmp = vminf(array[42], array[66]);
5048 array[66] = vmaxf(array[42], array[66]);
5049 array[42] = tmp;
5050 tmp = vminf(array[43], array[67]);
5051 array[67] = vmaxf(array[43], array[67]);
5052 array[43] = tmp;
5053 tmp = vminf(array[44], array[68]);
5054 array[68] = vmaxf(array[44], array[68]);
5055 array[44] = tmp;
5056 tmp = vminf(array[45], array[69]);
5057 array[69] = vmaxf(array[45], array[69]);
5058 array[45] = tmp;
5059 tmp = vminf(array[46], array[70]);
5060 array[70] = vmaxf(array[46], array[70]);
5061 array[46] = tmp;
5062 tmp = vminf(array[47], array[71]);
5063 array[71] = vmaxf(array[47], array[71]);
5064 array[47] = tmp;
5065 tmp = vminf(array[56], array[80]);
5066 array[80] = vmaxf(array[56], array[80]);
5067 array[56] = tmp;
5068 tmp = vminf(array[8], array[16]);
5069 array[16] = vmaxf(array[8], array[16]);
5070 array[8] = tmp;
5071 tmp = vminf(array[9], array[17]);
5072 array[17] = vmaxf(array[9], array[17]);
5073 array[9] = tmp;
5074 tmp = vminf(array[10], array[18]);
5075 array[18] = vmaxf(array[10], array[18]);
5076 array[10] = tmp;
5077 tmp = vminf(array[11], array[19]);
5078 array[19] = vmaxf(array[11], array[19]);
5079 array[11] = tmp;
5080 tmp = vminf(array[12], array[20]);
5081 array[20] = vmaxf(array[12], array[20]);
5082 array[12] = tmp;
5083 tmp = vminf(array[13], array[21]);
5084 array[21] = vmaxf(array[13], array[21]);
5085 array[13] = tmp;
5086 tmp = vminf(array[14], array[22]);
5087 array[22] = vmaxf(array[14], array[22]);
5088 array[14] = tmp;
5089 tmp = vminf(array[15], array[23]);
5090 array[23] = vmaxf(array[15], array[23]);
5091 array[15] = tmp;
5092 tmp = vminf(array[24], array[32]);
5093 array[32] = vmaxf(array[24], array[32]);
5094 array[24] = tmp;
5095 tmp = vminf(array[25], array[33]);
5096 array[33] = vmaxf(array[25], array[33]);
5097 array[25] = tmp;
5098 tmp = vminf(array[26], array[34]);
5099 array[34] = vmaxf(array[26], array[34]);
5100 array[26] = tmp;
5101 tmp = vminf(array[27], array[35]);
5102 array[35] = vmaxf(array[27], array[35]);
5103 array[27] = tmp;
5104 tmp = vminf(array[28], array[36]);
5105 array[36] = vmaxf(array[28], array[36]);
5106 array[28] = tmp;
5107 tmp = vminf(array[29], array[37]);
5108 array[37] = vmaxf(array[29], array[37]);
5109 array[29] = tmp;
5110 tmp = vminf(array[30], array[38]);
5111 array[38] = vmaxf(array[30], array[38]);
5112 array[30] = tmp;
5113 tmp = vminf(array[31], array[39]);
5114 array[39] = vmaxf(array[31], array[39]);
5115 array[31] = tmp;
5116 tmp = vminf(array[40], array[48]);
5117 array[48] = vmaxf(array[40], array[48]);
5118 array[40] = tmp;
5119 tmp = vminf(array[41], array[49]);
5120 array[49] = vmaxf(array[41], array[49]);
5121 array[41] = tmp;
5122 tmp = vminf(array[42], array[50]);
5123 array[50] = vmaxf(array[42], array[50]);
5124 array[42] = tmp;
5125 tmp = vminf(array[43], array[51]);
5126 array[51] = vmaxf(array[43], array[51]);
5127 array[43] = tmp;
5128 tmp = vminf(array[44], array[52]);
5129 array[52] = vmaxf(array[44], array[52]);
5130 array[44] = tmp;
5131 tmp = vminf(array[45], array[53]);
5132 array[53] = vmaxf(array[45], array[53]);
5133 array[45] = tmp;
5134 tmp = vminf(array[46], array[54]);
5135 array[54] = vmaxf(array[46], array[54]);
5136 array[46] = tmp;
5137 tmp = vminf(array[47], array[55]);
5138 array[55] = vmaxf(array[47], array[55]);
5139 array[47] = tmp;
5140 tmp = vminf(array[56], array[64]);
5141 array[64] = vmaxf(array[56], array[64]);
5142 array[56] = tmp;
5143 tmp = vminf(array[57], array[65]);
5144 array[65] = vmaxf(array[57], array[65]);
5145 array[57] = tmp;
5146 tmp = vminf(array[58], array[66]);
5147 array[66] = vmaxf(array[58], array[66]);
5148 array[58] = tmp;
5149 tmp = vminf(array[59], array[67]);
5150 array[67] = vmaxf(array[59], array[67]);
5151 array[59] = tmp;
5152 tmp = vminf(array[60], array[68]);
5153 array[68] = vmaxf(array[60], array[68]);
5154 array[60] = tmp;
5155 tmp = vminf(array[61], array[69]);
5156 array[69] = vmaxf(array[61], array[69]);
5157 array[61] = tmp;
5158 tmp = vminf(array[62], array[70]);
5159 array[70] = vmaxf(array[62], array[70]);
5160 array[62] = tmp;
5161 tmp = vminf(array[63], array[71]);
5162 array[71] = vmaxf(array[63], array[71]);
5163 array[63] = tmp;
5164 tmp = vminf(array[72], array[80]);
5165 array[80] = vmaxf(array[72], array[80]);
5166 array[72] = tmp;
5167 tmp = vminf(array[0], array[4]);
5168 array[4] = vmaxf(array[0], array[4]);
5169 array[0] = tmp;
5170 tmp = vminf(array[1], array[5]);
5171 array[5] = vmaxf(array[1], array[5]);
5172 array[1] = tmp;
5173 tmp = vminf(array[2], array[6]);
5174 array[6] = vmaxf(array[2], array[6]);
5175 array[2] = tmp;
5176 tmp = vminf(array[3], array[7]);
5177 array[7] = vmaxf(array[3], array[7]);
5178 array[3] = tmp;
5179 tmp = vminf(array[8], array[12]);
5180 array[12] = vmaxf(array[8], array[12]);
5181 array[8] = tmp;
5182 tmp = vminf(array[9], array[13]);
5183 array[13] = vmaxf(array[9], array[13]);
5184 array[9] = tmp;
5185 tmp = vminf(array[10], array[14]);
5186 array[14] = vmaxf(array[10], array[14]);
5187 array[10] = tmp;
5188 tmp = vminf(array[11], array[15]);
5189 array[15] = vmaxf(array[11], array[15]);
5190 array[11] = tmp;
5191 tmp = vminf(array[16], array[20]);
5192 array[20] = vmaxf(array[16], array[20]);
5193 array[16] = tmp;
5194 tmp = vminf(array[17], array[21]);
5195 array[21] = vmaxf(array[17], array[21]);
5196 array[17] = tmp;
5197 tmp = vminf(array[18], array[22]);
5198 array[22] = vmaxf(array[18], array[22]);
5199 array[18] = tmp;
5200 tmp = vminf(array[19], array[23]);
5201 array[23] = vmaxf(array[19], array[23]);
5202 array[19] = tmp;
5203 tmp = vminf(array[24], array[28]);
5204 array[28] = vmaxf(array[24], array[28]);
5205 array[24] = tmp;
5206 tmp = vminf(array[25], array[29]);
5207 array[29] = vmaxf(array[25], array[29]);
5208 array[25] = tmp;
5209 tmp = vminf(array[26], array[30]);
5210 array[30] = vmaxf(array[26], array[30]);
5211 array[26] = tmp;
5212 tmp = vminf(array[27], array[31]);
5213 array[31] = vmaxf(array[27], array[31]);
5214 array[27] = tmp;
5215 tmp = vminf(array[32], array[36]);
5216 array[36] = vmaxf(array[32], array[36]);
5217 array[32] = tmp;
5218 tmp = vminf(array[33], array[37]);
5219 array[37] = vmaxf(array[33], array[37]);
5220 array[33] = tmp;
5221 tmp = vminf(array[34], array[38]);
5222 array[38] = vmaxf(array[34], array[38]);
5223 array[34] = tmp;
5224 tmp = vminf(array[35], array[39]);
5225 array[39] = vmaxf(array[35], array[39]);
5226 array[35] = tmp;
5227 tmp = vminf(array[40], array[44]);
5228 array[44] = vmaxf(array[40], array[44]);
5229 array[40] = tmp;
5230 tmp = vminf(array[41], array[45]);
5231 array[45] = vmaxf(array[41], array[45]);
5232 array[41] = tmp;
5233 tmp = vminf(array[42], array[46]);
5234 array[46] = vmaxf(array[42], array[46]);
5235 array[42] = tmp;
5236 tmp = vminf(array[43], array[47]);
5237 array[47] = vmaxf(array[43], array[47]);
5238 array[43] = tmp;
5239 tmp = vminf(array[48], array[52]);
5240 array[52] = vmaxf(array[48], array[52]);
5241 array[48] = tmp;
5242 tmp = vminf(array[49], array[53]);
5243 array[53] = vmaxf(array[49], array[53]);
5244 array[49] = tmp;
5245 tmp = vminf(array[50], array[54]);
5246 array[54] = vmaxf(array[50], array[54]);
5247 array[50] = tmp;
5248 tmp = vminf(array[51], array[55]);
5249 array[55] = vmaxf(array[51], array[55]);
5250 array[51] = tmp;
5251 tmp = vminf(array[56], array[60]);
5252 array[60] = vmaxf(array[56], array[60]);
5253 array[56] = tmp;
5254 tmp = vminf(array[57], array[61]);
5255 array[61] = vmaxf(array[57], array[61]);
5256 array[57] = tmp;
5257 tmp = vminf(array[58], array[62]);
5258 array[62] = vmaxf(array[58], array[62]);
5259 array[58] = tmp;
5260 tmp = vminf(array[59], array[63]);
5261 array[63] = vmaxf(array[59], array[63]);
5262 array[59] = tmp;
5263 tmp = vminf(array[64], array[68]);
5264 array[68] = vmaxf(array[64], array[68]);
5265 array[64] = tmp;
5266 tmp = vminf(array[65], array[69]);
5267 array[69] = vmaxf(array[65], array[69]);
5268 array[65] = tmp;
5269 tmp = vminf(array[66], array[70]);
5270 array[70] = vmaxf(array[66], array[70]);
5271 array[66] = tmp;
5272 tmp = vminf(array[67], array[71]);
5273 array[71] = vmaxf(array[67], array[71]);
5274 array[67] = tmp;
5275 tmp = vminf(array[72], array[76]);
5276 array[76] = vmaxf(array[72], array[76]);
5277 array[72] = tmp;
5278 tmp = vminf(array[73], array[77]);
5279 array[77] = vmaxf(array[73], array[77]);
5280 array[73] = tmp;
5281 tmp = vminf(array[74], array[78]);
5282 array[78] = vmaxf(array[74], array[78]);
5283 array[74] = tmp;
5284 tmp = vminf(array[75], array[79]);
5285 array[79] = vmaxf(array[75], array[79]);
5286 array[75] = tmp;
5287 tmp = vminf(array[4], array[64]);
5288 array[64] = vmaxf(array[4], array[64]);
5289 array[4] = tmp;
5290 tmp = vminf(array[5], array[65]);
5291 array[65] = vmaxf(array[5], array[65]);
5292 array[5] = tmp;
5293 tmp = vminf(array[6], array[66]);
5294 array[66] = vmaxf(array[6], array[66]);
5295 array[6] = tmp;
5296 tmp = vminf(array[7], array[67]);
5297 array[67] = vmaxf(array[7], array[67]);
5298 array[7] = tmp;
5299 tmp = vminf(array[12], array[72]);
5300 array[72] = vmaxf(array[12], array[72]);
5301 array[12] = tmp;
5302 tmp = vminf(array[13], array[73]);
5303 array[73] = vmaxf(array[13], array[73]);
5304 array[13] = tmp;
5305 tmp = vminf(array[14], array[74]);
5306 array[74] = vmaxf(array[14], array[74]);
5307 array[14] = tmp;
5308 tmp = vminf(array[15], array[75]);
5309 array[75] = vmaxf(array[15], array[75]);
5310 array[15] = tmp;
5311 tmp = vminf(array[20], array[80]);
5312 array[80] = vmaxf(array[20], array[80]);
5313 array[20] = tmp;
5314 tmp = vminf(array[4], array[32]);
5315 array[32] = vmaxf(array[4], array[32]);
5316 array[4] = tmp;
5317 tmp = vminf(array[5], array[33]);
5318 array[33] = vmaxf(array[5], array[33]);
5319 array[5] = tmp;
5320 tmp = vminf(array[6], array[34]);
5321 array[34] = vmaxf(array[6], array[34]);
5322 array[6] = tmp;
5323 tmp = vminf(array[7], array[35]);
5324 array[35] = vmaxf(array[7], array[35]);
5325 array[7] = tmp;
5326 tmp = vminf(array[12], array[40]);
5327 array[40] = vmaxf(array[12], array[40]);
5328 array[12] = tmp;
5329 tmp = vminf(array[13], array[41]);
5330 array[41] = vmaxf(array[13], array[41]);
5331 array[13] = tmp;
5332 tmp = vminf(array[14], array[42]);
5333 array[42] = vmaxf(array[14], array[42]);
5334 array[14] = tmp;
5335 tmp = vminf(array[15], array[43]);
5336 array[43] = vmaxf(array[15], array[43]);
5337 array[15] = tmp;
5338 tmp = vminf(array[20], array[48]);
5339 array[48] = vmaxf(array[20], array[48]);
5340 array[20] = tmp;
5341 tmp = vminf(array[21], array[49]);
5342 array[49] = vmaxf(array[21], array[49]);
5343 array[21] = tmp;
5344 tmp = vminf(array[22], array[50]);
5345 array[50] = vmaxf(array[22], array[50]);
5346 array[22] = tmp;
5347 tmp = vminf(array[23], array[51]);
5348 array[51] = vmaxf(array[23], array[51]);
5349 array[23] = tmp;
5350 tmp = vminf(array[28], array[56]);
5351 array[56] = vmaxf(array[28], array[56]);
5352 array[28] = tmp;
5353 tmp = vminf(array[29], array[57]);
5354 array[57] = vmaxf(array[29], array[57]);
5355 array[29] = tmp;
5356 tmp = vminf(array[30], array[58]);
5357 array[58] = vmaxf(array[30], array[58]);
5358 array[30] = tmp;
5359 tmp = vminf(array[31], array[59]);
5360 array[59] = vmaxf(array[31], array[59]);
5361 array[31] = tmp;
5362 tmp = vminf(array[36], array[64]);
5363 array[64] = vmaxf(array[36], array[64]);
5364 array[36] = tmp;
5365 tmp = vminf(array[37], array[65]);
5366 array[65] = vmaxf(array[37], array[65]);
5367 array[37] = tmp;
5368 tmp = vminf(array[38], array[66]);
5369 array[66] = vmaxf(array[38], array[66]);
5370 array[38] = tmp;
5371 tmp = vminf(array[39], array[67]);
5372 array[67] = vmaxf(array[39], array[67]);
5373 array[39] = tmp;
5374 tmp = vminf(array[44], array[72]);
5375 array[72] = vmaxf(array[44], array[72]);
5376 array[44] = tmp;
5377 tmp = vminf(array[45], array[73]);
5378 array[73] = vmaxf(array[45], array[73]);
5379 array[45] = tmp;
5380 tmp = vminf(array[46], array[74]);
5381 array[74] = vmaxf(array[46], array[74]);
5382 array[46] = tmp;
5383 tmp = vminf(array[47], array[75]);
5384 array[75] = vmaxf(array[47], array[75]);
5385 array[47] = tmp;
5386 tmp = vminf(array[52], array[80]);
5387 array[80] = vmaxf(array[52], array[80]);
5388 array[52] = tmp;
5389 tmp = vminf(array[4], array[16]);
5390 array[16] = vmaxf(array[4], array[16]);
5391 array[4] = tmp;
5392 tmp = vminf(array[5], array[17]);
5393 array[17] = vmaxf(array[5], array[17]);
5394 array[5] = tmp;
5395 tmp = vminf(array[6], array[18]);
5396 array[18] = vmaxf(array[6], array[18]);
5397 array[6] = tmp;
5398 tmp = vminf(array[7], array[19]);
5399 array[19] = vmaxf(array[7], array[19]);
5400 array[7] = tmp;
5401 tmp = vminf(array[12], array[24]);
5402 array[24] = vmaxf(array[12], array[24]);
5403 array[12] = tmp;
5404 tmp = vminf(array[13], array[25]);
5405 array[25] = vmaxf(array[13], array[25]);
5406 array[13] = tmp;
5407 tmp = vminf(array[14], array[26]);
5408 array[26] = vmaxf(array[14], array[26]);
5409 array[14] = tmp;
5410 tmp = vminf(array[15], array[27]);
5411 array[27] = vmaxf(array[15], array[27]);
5412 array[15] = tmp;
5413 tmp = vminf(array[20], array[32]);
5414 array[32] = vmaxf(array[20], array[32]);
5415 array[20] = tmp;
5416 tmp = vminf(array[21], array[33]);
5417 array[33] = vmaxf(array[21], array[33]);
5418 array[21] = tmp;
5419 tmp = vminf(array[22], array[34]);
5420 array[34] = vmaxf(array[22], array[34]);
5421 array[22] = tmp;
5422 tmp = vminf(array[23], array[35]);
5423 array[35] = vmaxf(array[23], array[35]);
5424 array[23] = tmp;
5425 tmp = vminf(array[28], array[40]);
5426 array[40] = vmaxf(array[28], array[40]);
5427 array[28] = tmp;
5428 tmp = vminf(array[29], array[41]);
5429 array[41] = vmaxf(array[29], array[41]);
5430 array[29] = tmp;
5431 tmp = vminf(array[30], array[42]);
5432 array[42] = vmaxf(array[30], array[42]);
5433 array[30] = tmp;
5434 tmp = vminf(array[31], array[43]);
5435 array[43] = vmaxf(array[31], array[43]);
5436 array[31] = tmp;
5437 tmp = vminf(array[36], array[48]);
5438 array[48] = vmaxf(array[36], array[48]);
5439 array[36] = tmp;
5440 tmp = vminf(array[37], array[49]);
5441 array[49] = vmaxf(array[37], array[49]);
5442 array[37] = tmp;
5443 tmp = vminf(array[38], array[50]);
5444 array[50] = vmaxf(array[38], array[50]);
5445 array[38] = tmp;
5446 tmp = vminf(array[39], array[51]);
5447 array[51] = vmaxf(array[39], array[51]);
5448 array[39] = tmp;
5449 tmp = vminf(array[44], array[56]);
5450 array[56] = vmaxf(array[44], array[56]);
5451 array[44] = tmp;
5452 tmp = vminf(array[45], array[57]);
5453 array[57] = vmaxf(array[45], array[57]);
5454 array[45] = tmp;
5455 tmp = vminf(array[46], array[58]);
5456 array[58] = vmaxf(array[46], array[58]);
5457 array[46] = tmp;
5458 tmp = vminf(array[47], array[59]);
5459 array[59] = vmaxf(array[47], array[59]);
5460 array[47] = tmp;
5461 tmp = vminf(array[52], array[64]);
5462 array[64] = vmaxf(array[52], array[64]);
5463 array[52] = tmp;
5464 tmp = vminf(array[53], array[65]);
5465 array[65] = vmaxf(array[53], array[65]);
5466 array[53] = tmp;
5467 tmp = vminf(array[54], array[66]);
5468 array[66] = vmaxf(array[54], array[66]);
5469 array[54] = tmp;
5470 tmp = vminf(array[55], array[67]);
5471 array[67] = vmaxf(array[55], array[67]);
5472 array[55] = tmp;
5473 tmp = vminf(array[60], array[72]);
5474 array[72] = vmaxf(array[60], array[72]);
5475 array[60] = tmp;
5476 tmp = vminf(array[61], array[73]);
5477 array[73] = vmaxf(array[61], array[73]);
5478 array[61] = tmp;
5479 tmp = vminf(array[62], array[74]);
5480 array[74] = vmaxf(array[62], array[74]);
5481 array[62] = tmp;
5482 tmp = vminf(array[63], array[75]);
5483 array[75] = vmaxf(array[63], array[75]);
5484 array[63] = tmp;
5485 tmp = vminf(array[68], array[80]);
5486 array[80] = vmaxf(array[68], array[80]);
5487 array[68] = tmp;
5488 tmp = vminf(array[4], array[8]);
5489 array[8] = vmaxf(array[4], array[8]);
5490 array[4] = tmp;
5491 tmp = vminf(array[5], array[9]);
5492 array[9] = vmaxf(array[5], array[9]);
5493 array[5] = tmp;
5494 tmp = vminf(array[6], array[10]);
5495 array[10] = vmaxf(array[6], array[10]);
5496 array[6] = tmp;
5497 tmp = vminf(array[7], array[11]);
5498 array[11] = vmaxf(array[7], array[11]);
5499 array[7] = tmp;
5500 tmp = vminf(array[12], array[16]);
5501 array[16] = vmaxf(array[12], array[16]);
5502 array[12] = tmp;
5503 tmp = vminf(array[13], array[17]);
5504 array[17] = vmaxf(array[13], array[17]);
5505 array[13] = tmp;
5506 tmp = vminf(array[14], array[18]);
5507 array[18] = vmaxf(array[14], array[18]);
5508 array[14] = tmp;
5509 tmp = vminf(array[15], array[19]);
5510 array[19] = vmaxf(array[15], array[19]);
5511 array[15] = tmp;
5512 tmp = vminf(array[20], array[24]);
5513 array[24] = vmaxf(array[20], array[24]);
5514 array[20] = tmp;
5515 tmp = vminf(array[21], array[25]);
5516 array[25] = vmaxf(array[21], array[25]);
5517 array[21] = tmp;
5518 tmp = vminf(array[22], array[26]);
5519 array[26] = vmaxf(array[22], array[26]);
5520 array[22] = tmp;
5521 tmp = vminf(array[23], array[27]);
5522 array[27] = vmaxf(array[23], array[27]);
5523 array[23] = tmp;
5524 tmp = vminf(array[28], array[32]);
5525 array[32] = vmaxf(array[28], array[32]);
5526 array[28] = tmp;
5527 tmp = vminf(array[29], array[33]);
5528 array[33] = vmaxf(array[29], array[33]);
5529 array[29] = tmp;
5530 tmp = vminf(array[30], array[34]);
5531 array[34] = vmaxf(array[30], array[34]);
5532 array[30] = tmp;
5533 tmp = vminf(array[31], array[35]);
5534 array[35] = vmaxf(array[31], array[35]);
5535 array[31] = tmp;
5536 tmp = vminf(array[36], array[40]);
5537 array[40] = vmaxf(array[36], array[40]);
5538 array[36] = tmp;
5539 tmp = vminf(array[37], array[41]);
5540 array[41] = vmaxf(array[37], array[41]);
5541 array[37] = tmp;
5542 tmp = vminf(array[38], array[42]);
5543 array[42] = vmaxf(array[38], array[42]);
5544 array[38] = tmp;
5545 tmp = vminf(array[39], array[43]);
5546 array[43] = vmaxf(array[39], array[43]);
5547 array[39] = tmp;
5548 tmp = vminf(array[44], array[48]);
5549 array[48] = vmaxf(array[44], array[48]);
5550 array[44] = tmp;
5551 tmp = vminf(array[45], array[49]);
5552 array[49] = vmaxf(array[45], array[49]);
5553 array[45] = tmp;
5554 tmp = vminf(array[46], array[50]);
5555 array[50] = vmaxf(array[46], array[50]);
5556 array[46] = tmp;
5557 tmp = vminf(array[47], array[51]);
5558 array[51] = vmaxf(array[47], array[51]);
5559 array[47] = tmp;
5560 tmp = vminf(array[52], array[56]);
5561 array[56] = vmaxf(array[52], array[56]);
5562 array[52] = tmp;
5563 tmp = vminf(array[53], array[57]);
5564 array[57] = vmaxf(array[53], array[57]);
5565 array[53] = tmp;
5566 tmp = vminf(array[54], array[58]);
5567 array[58] = vmaxf(array[54], array[58]);
5568 array[54] = tmp;
5569 tmp = vminf(array[55], array[59]);
5570 array[59] = vmaxf(array[55], array[59]);
5571 array[55] = tmp;
5572 tmp = vminf(array[60], array[64]);
5573 array[64] = vmaxf(array[60], array[64]);
5574 array[60] = tmp;
5575 tmp = vminf(array[61], array[65]);
5576 array[65] = vmaxf(array[61], array[65]);
5577 array[61] = tmp;
5578 tmp = vminf(array[62], array[66]);
5579 array[66] = vmaxf(array[62], array[66]);
5580 array[62] = tmp;
5581 tmp = vminf(array[63], array[67]);
5582 array[67] = vmaxf(array[63], array[67]);
5583 array[63] = tmp;
5584 tmp = vminf(array[68], array[72]);
5585 array[72] = vmaxf(array[68], array[72]);
5586 array[68] = tmp;
5587 tmp = vminf(array[69], array[73]);
5588 array[73] = vmaxf(array[69], array[73]);
5589 array[69] = tmp;
5590 tmp = vminf(array[70], array[74]);
5591 array[74] = vmaxf(array[70], array[74]);
5592 array[70] = tmp;
5593 tmp = vminf(array[71], array[75]);
5594 array[75] = vmaxf(array[71], array[75]);
5595 array[71] = tmp;
5596 tmp = vminf(array[76], array[80]);
5597 array[80] = vmaxf(array[76], array[80]);
5598 array[76] = tmp;
5599 tmp = vminf(array[0], array[2]);
5600 array[2] = vmaxf(array[0], array[2]);
5601 array[0] = tmp;
5602 tmp = vminf(array[1], array[3]);
5603 array[3] = vmaxf(array[1], array[3]);
5604 array[1] = tmp;
5605 tmp = vminf(array[4], array[6]);
5606 array[6] = vmaxf(array[4], array[6]);
5607 array[4] = tmp;
5608 tmp = vminf(array[5], array[7]);
5609 array[7] = vmaxf(array[5], array[7]);
5610 array[5] = tmp;
5611 tmp = vminf(array[8], array[10]);
5612 array[10] = vmaxf(array[8], array[10]);
5613 array[8] = tmp;
5614 tmp = vminf(array[9], array[11]);
5615 array[11] = vmaxf(array[9], array[11]);
5616 array[9] = tmp;
5617 tmp = vminf(array[12], array[14]);
5618 array[14] = vmaxf(array[12], array[14]);
5619 array[12] = tmp;
5620 tmp = vminf(array[13], array[15]);
5621 array[15] = vmaxf(array[13], array[15]);
5622 array[13] = tmp;
5623 tmp = vminf(array[16], array[18]);
5624 array[18] = vmaxf(array[16], array[18]);
5625 array[16] = tmp;
5626 tmp = vminf(array[17], array[19]);
5627 array[19] = vmaxf(array[17], array[19]);
5628 array[17] = tmp;
5629 tmp = vminf(array[20], array[22]);
5630 array[22] = vmaxf(array[20], array[22]);
5631 array[20] = tmp;
5632 tmp = vminf(array[21], array[23]);
5633 array[23] = vmaxf(array[21], array[23]);
5634 array[21] = tmp;
5635 tmp = vminf(array[24], array[26]);
5636 array[26] = vmaxf(array[24], array[26]);
5637 array[24] = tmp;
5638 tmp = vminf(array[25], array[27]);
5639 array[27] = vmaxf(array[25], array[27]);
5640 array[25] = tmp;
5641 tmp = vminf(array[28], array[30]);
5642 array[30] = vmaxf(array[28], array[30]);
5643 array[28] = tmp;
5644 tmp = vminf(array[29], array[31]);
5645 array[31] = vmaxf(array[29], array[31]);
5646 array[29] = tmp;
5647 tmp = vminf(array[32], array[34]);
5648 array[34] = vmaxf(array[32], array[34]);
5649 array[32] = tmp;
5650 tmp = vminf(array[33], array[35]);
5651 array[35] = vmaxf(array[33], array[35]);
5652 array[33] = tmp;
5653 tmp = vminf(array[36], array[38]);
5654 array[38] = vmaxf(array[36], array[38]);
5655 array[36] = tmp;
5656 tmp = vminf(array[37], array[39]);
5657 array[39] = vmaxf(array[37], array[39]);
5658 array[37] = tmp;
5659 tmp = vminf(array[40], array[42]);
5660 array[42] = vmaxf(array[40], array[42]);
5661 array[40] = tmp;
5662 tmp = vminf(array[41], array[43]);
5663 array[43] = vmaxf(array[41], array[43]);
5664 array[41] = tmp;
5665 tmp = vminf(array[44], array[46]);
5666 array[46] = vmaxf(array[44], array[46]);
5667 array[44] = tmp;
5668 tmp = vminf(array[45], array[47]);
5669 array[47] = vmaxf(array[45], array[47]);
5670 array[45] = tmp;
5671 tmp = vminf(array[48], array[50]);
5672 array[50] = vmaxf(array[48], array[50]);
5673 array[48] = tmp;
5674 tmp = vminf(array[49], array[51]);
5675 array[51] = vmaxf(array[49], array[51]);
5676 array[49] = tmp;
5677 tmp = vminf(array[52], array[54]);
5678 array[54] = vmaxf(array[52], array[54]);
5679 array[52] = tmp;
5680 tmp = vminf(array[53], array[55]);
5681 array[55] = vmaxf(array[53], array[55]);
5682 array[53] = tmp;
5683 tmp = vminf(array[56], array[58]);
5684 array[58] = vmaxf(array[56], array[58]);
5685 array[56] = tmp;
5686 tmp = vminf(array[57], array[59]);
5687 array[59] = vmaxf(array[57], array[59]);
5688 array[57] = tmp;
5689 tmp = vminf(array[60], array[62]);
5690 array[62] = vmaxf(array[60], array[62]);
5691 array[60] = tmp;
5692 tmp = vminf(array[61], array[63]);
5693 array[63] = vmaxf(array[61], array[63]);
5694 array[61] = tmp;
5695 tmp = vminf(array[64], array[66]);
5696 array[66] = vmaxf(array[64], array[66]);
5697 array[64] = tmp;
5698 tmp = vminf(array[65], array[67]);
5699 array[67] = vmaxf(array[65], array[67]);
5700 array[65] = tmp;
5701 tmp = vminf(array[68], array[70]);
5702 array[70] = vmaxf(array[68], array[70]);
5703 array[68] = tmp;
5704 tmp = vminf(array[69], array[71]);
5705 array[71] = vmaxf(array[69], array[71]);
5706 array[69] = tmp;
5707 tmp = vminf(array[72], array[74]);
5708 array[74] = vmaxf(array[72], array[74]);
5709 array[72] = tmp;
5710 tmp = vminf(array[73], array[75]);
5711 array[75] = vmaxf(array[73], array[75]);
5712 array[73] = tmp;
5713 tmp = vminf(array[76], array[78]);
5714 array[78] = vmaxf(array[76], array[78]);
5715 array[76] = tmp;
5716 tmp = vminf(array[77], array[79]);
5717 array[79] = vmaxf(array[77], array[79]);
5718 array[77] = tmp;
5719 tmp = vminf(array[2], array[64]);
5720 array[64] = vmaxf(array[2], array[64]);
5721 array[2] = tmp;
5722 tmp = vminf(array[3], array[65]);
5723 array[65] = vmaxf(array[3], array[65]);
5724 array[3] = tmp;
5725 tmp = vminf(array[6], array[68]);
5726 array[68] = vmaxf(array[6], array[68]);
5727 array[6] = tmp;
5728 tmp = vminf(array[7], array[69]);
5729 array[69] = vmaxf(array[7], array[69]);
5730 array[7] = tmp;
5731 tmp = vminf(array[10], array[72]);
5732 array[72] = vmaxf(array[10], array[72]);
5733 array[10] = tmp;
5734 tmp = vminf(array[11], array[73]);
5735 array[73] = vmaxf(array[11], array[73]);
5736 array[11] = tmp;
5737 tmp = vminf(array[14], array[76]);
5738 array[76] = vmaxf(array[14], array[76]);
5739 array[14] = tmp;
5740 tmp = vminf(array[15], array[77]);
5741 array[77] = vmaxf(array[15], array[77]);
5742 array[15] = tmp;
5743 tmp = vminf(array[18], array[80]);
5744 array[80] = vmaxf(array[18], array[80]);
5745 array[18] = tmp;
5746 tmp = vminf(array[2], array[32]);
5747 array[32] = vmaxf(array[2], array[32]);
5748 array[2] = tmp;
5749 tmp = vminf(array[3], array[33]);
5750 array[33] = vmaxf(array[3], array[33]);
5751 array[3] = tmp;
5752 tmp = vminf(array[6], array[36]);
5753 array[36] = vmaxf(array[6], array[36]);
5754 array[6] = tmp;
5755 tmp = vminf(array[7], array[37]);
5756 array[37] = vmaxf(array[7], array[37]);
5757 array[7] = tmp;
5758 tmp = vminf(array[10], array[40]);
5759 array[40] = vmaxf(array[10], array[40]);
5760 array[10] = tmp;
5761 tmp = vminf(array[11], array[41]);
5762 array[41] = vmaxf(array[11], array[41]);
5763 array[11] = tmp;
5764 tmp = vminf(array[14], array[44]);
5765 array[44] = vmaxf(array[14], array[44]);
5766 array[14] = tmp;
5767 tmp = vminf(array[15], array[45]);
5768 array[45] = vmaxf(array[15], array[45]);
5769 array[15] = tmp;
5770 tmp = vminf(array[18], array[48]);
5771 array[48] = vmaxf(array[18], array[48]);
5772 array[18] = tmp;
5773 tmp = vminf(array[19], array[49]);
5774 array[49] = vmaxf(array[19], array[49]);
5775 array[19] = tmp;
5776 tmp = vminf(array[22], array[52]);
5777 array[52] = vmaxf(array[22], array[52]);
5778 array[22] = tmp;
5779 tmp = vminf(array[23], array[53]);
5780 array[53] = vmaxf(array[23], array[53]);
5781 array[23] = tmp;
5782 tmp = vminf(array[26], array[56]);
5783 array[56] = vmaxf(array[26], array[56]);
5784 array[26] = tmp;
5785 tmp = vminf(array[27], array[57]);
5786 array[57] = vmaxf(array[27], array[57]);
5787 array[27] = tmp;
5788 tmp = vminf(array[30], array[60]);
5789 array[60] = vmaxf(array[30], array[60]);
5790 array[30] = tmp;
5791 tmp = vminf(array[31], array[61]);
5792 array[61] = vmaxf(array[31], array[61]);
5793 array[31] = tmp;
5794 tmp = vminf(array[34], array[64]);
5795 array[64] = vmaxf(array[34], array[64]);
5796 array[34] = tmp;
5797 tmp = vminf(array[35], array[65]);
5798 array[65] = vmaxf(array[35], array[65]);
5799 array[35] = tmp;
5800 tmp = vminf(array[38], array[68]);
5801 array[68] = vmaxf(array[38], array[68]);
5802 array[38] = tmp;
5803 tmp = vminf(array[39], array[69]);
5804 array[69] = vmaxf(array[39], array[69]);
5805 array[39] = tmp;
5806 tmp = vminf(array[42], array[72]);
5807 array[72] = vmaxf(array[42], array[72]);
5808 array[42] = tmp;
5809 tmp = vminf(array[43], array[73]);
5810 array[73] = vmaxf(array[43], array[73]);
5811 array[43] = tmp;
5812 tmp = vminf(array[46], array[76]);
5813 array[76] = vmaxf(array[46], array[76]);
5814 array[46] = tmp;
5815 tmp = vminf(array[47], array[77]);
5816 array[77] = vmaxf(array[47], array[77]);
5817 array[47] = tmp;
5818 tmp = vminf(array[50], array[80]);
5819 array[80] = vmaxf(array[50], array[80]);
5820 array[50] = tmp;
5821 tmp = vminf(array[2], array[16]);
5822 array[16] = vmaxf(array[2], array[16]);
5823 array[2] = tmp;
5824 tmp = vminf(array[3], array[17]);
5825 array[17] = vmaxf(array[3], array[17]);
5826 array[3] = tmp;
5827 tmp = vminf(array[6], array[20]);
5828 array[20] = vmaxf(array[6], array[20]);
5829 array[6] = tmp;
5830 tmp = vminf(array[7], array[21]);
5831 array[21] = vmaxf(array[7], array[21]);
5832 array[7] = tmp;
5833 tmp = vminf(array[10], array[24]);
5834 array[24] = vmaxf(array[10], array[24]);
5835 array[10] = tmp;
5836 tmp = vminf(array[11], array[25]);
5837 array[25] = vmaxf(array[11], array[25]);
5838 array[11] = tmp;
5839 tmp = vminf(array[14], array[28]);
5840 array[28] = vmaxf(array[14], array[28]);
5841 array[14] = tmp;
5842 tmp = vminf(array[15], array[29]);
5843 array[29] = vmaxf(array[15], array[29]);
5844 array[15] = tmp;
5845 tmp = vminf(array[18], array[32]);
5846 array[32] = vmaxf(array[18], array[32]);
5847 array[18] = tmp;
5848 tmp = vminf(array[19], array[33]);
5849 array[33] = vmaxf(array[19], array[33]);
5850 array[19] = tmp;
5851 tmp = vminf(array[22], array[36]);
5852 array[36] = vmaxf(array[22], array[36]);
5853 array[22] = tmp;
5854 tmp = vminf(array[23], array[37]);
5855 array[37] = vmaxf(array[23], array[37]);
5856 array[23] = tmp;
5857 tmp = vminf(array[26], array[40]);
5858 array[40] = vmaxf(array[26], array[40]);
5859 array[26] = tmp;
5860 tmp = vminf(array[27], array[41]);
5861 array[41] = vmaxf(array[27], array[41]);
5862 array[27] = tmp;
5863 tmp = vminf(array[30], array[44]);
5864 array[44] = vmaxf(array[30], array[44]);
5865 array[30] = tmp;
5866 tmp = vminf(array[31], array[45]);
5867 array[45] = vmaxf(array[31], array[45]);
5868 array[31] = tmp;
5869 tmp = vminf(array[34], array[48]);
5870 array[48] = vmaxf(array[34], array[48]);
5871 array[34] = tmp;
5872 tmp = vminf(array[35], array[49]);
5873 array[49] = vmaxf(array[35], array[49]);
5874 array[35] = tmp;
5875 tmp = vminf(array[38], array[52]);
5876 array[52] = vmaxf(array[38], array[52]);
5877 array[38] = tmp;
5878 tmp = vminf(array[39], array[53]);
5879 array[53] = vmaxf(array[39], array[53]);
5880 array[39] = tmp;
5881 tmp = vminf(array[42], array[56]);
5882 array[56] = vmaxf(array[42], array[56]);
5883 array[42] = tmp;
5884 tmp = vminf(array[43], array[57]);
5885 array[57] = vmaxf(array[43], array[57]);
5886 array[43] = tmp;
5887 tmp = vminf(array[46], array[60]);
5888 array[60] = vmaxf(array[46], array[60]);
5889 array[46] = tmp;
5890 tmp = vminf(array[47], array[61]);
5891 array[61] = vmaxf(array[47], array[61]);
5892 array[47] = tmp;
5893 tmp = vminf(array[50], array[64]);
5894 array[64] = vmaxf(array[50], array[64]);
5895 array[50] = tmp;
5896 tmp = vminf(array[51], array[65]);
5897 array[65] = vmaxf(array[51], array[65]);
5898 array[51] = tmp;
5899 tmp = vminf(array[54], array[68]);
5900 array[68] = vmaxf(array[54], array[68]);
5901 array[54] = tmp;
5902 tmp = vminf(array[55], array[69]);
5903 array[69] = vmaxf(array[55], array[69]);
5904 array[55] = tmp;
5905 tmp = vminf(array[58], array[72]);
5906 array[72] = vmaxf(array[58], array[72]);
5907 array[58] = tmp;
5908 tmp = vminf(array[59], array[73]);
5909 array[73] = vmaxf(array[59], array[73]);
5910 array[59] = tmp;
5911 tmp = vminf(array[62], array[76]);
5912 array[76] = vmaxf(array[62], array[76]);
5913 array[62] = tmp;
5914 tmp = vminf(array[63], array[77]);
5915 array[77] = vmaxf(array[63], array[77]);
5916 array[63] = tmp;
5917 tmp = vminf(array[66], array[80]);
5918 array[80] = vmaxf(array[66], array[80]);
5919 array[66] = tmp;
5920 tmp = vminf(array[2], array[8]);
5921 array[8] = vmaxf(array[2], array[8]);
5922 array[2] = tmp;
5923 tmp = vminf(array[3], array[9]);
5924 array[9] = vmaxf(array[3], array[9]);
5925 array[3] = tmp;
5926 tmp = vminf(array[6], array[12]);
5927 array[12] = vmaxf(array[6], array[12]);
5928 array[6] = tmp;
5929 tmp = vminf(array[7], array[13]);
5930 array[13] = vmaxf(array[7], array[13]);
5931 array[7] = tmp;
5932 tmp = vminf(array[10], array[16]);
5933 array[16] = vmaxf(array[10], array[16]);
5934 array[10] = tmp;
5935 tmp = vminf(array[11], array[17]);
5936 array[17] = vmaxf(array[11], array[17]);
5937 array[11] = tmp;
5938 tmp = vminf(array[14], array[20]);
5939 array[20] = vmaxf(array[14], array[20]);
5940 array[14] = tmp;
5941 tmp = vminf(array[15], array[21]);
5942 array[21] = vmaxf(array[15], array[21]);
5943 array[15] = tmp;
5944 tmp = vminf(array[18], array[24]);
5945 array[24] = vmaxf(array[18], array[24]);
5946 array[18] = tmp;
5947 tmp = vminf(array[19], array[25]);
5948 array[25] = vmaxf(array[19], array[25]);
5949 array[19] = tmp;
5950 tmp = vminf(array[22], array[28]);
5951 array[28] = vmaxf(array[22], array[28]);
5952 array[22] = tmp;
5953 tmp = vminf(array[23], array[29]);
5954 array[29] = vmaxf(array[23], array[29]);
5955 array[23] = tmp;
5956 tmp = vminf(array[26], array[32]);
5957 array[32] = vmaxf(array[26], array[32]);
5958 array[26] = tmp;
5959 tmp = vminf(array[27], array[33]);
5960 array[33] = vmaxf(array[27], array[33]);
5961 array[27] = tmp;
5962 tmp = vminf(array[30], array[36]);
5963 array[36] = vmaxf(array[30], array[36]);
5964 array[30] = tmp;
5965 tmp = vminf(array[31], array[37]);
5966 array[37] = vmaxf(array[31], array[37]);
5967 array[31] = tmp;
5968 tmp = vminf(array[34], array[40]);
5969 array[40] = vmaxf(array[34], array[40]);
5970 array[34] = tmp;
5971 tmp = vminf(array[35], array[41]);
5972 array[41] = vmaxf(array[35], array[41]);
5973 array[35] = tmp;
5974 tmp = vminf(array[38], array[44]);
5975 array[44] = vmaxf(array[38], array[44]);
5976 array[38] = tmp;
5977 tmp = vminf(array[39], array[45]);
5978 array[45] = vmaxf(array[39], array[45]);
5979 array[39] = tmp;
5980 tmp = vminf(array[42], array[48]);
5981 array[48] = vmaxf(array[42], array[48]);
5982 array[42] = tmp;
5983 tmp = vminf(array[43], array[49]);
5984 array[49] = vmaxf(array[43], array[49]);
5985 array[43] = tmp;
5986 tmp = vminf(array[46], array[52]);
5987 array[52] = vmaxf(array[46], array[52]);
5988 array[46] = tmp;
5989 tmp = vminf(array[47], array[53]);
5990 array[53] = vmaxf(array[47], array[53]);
5991 array[47] = tmp;
5992 tmp = vminf(array[50], array[56]);
5993 array[56] = vmaxf(array[50], array[56]);
5994 array[50] = tmp;
5995 tmp = vminf(array[51], array[57]);
5996 array[57] = vmaxf(array[51], array[57]);
5997 array[51] = tmp;
5998 tmp = vminf(array[54], array[60]);
5999 array[60] = vmaxf(array[54], array[60]);
6000 array[54] = tmp;
6001 tmp = vminf(array[55], array[61]);
6002 array[61] = vmaxf(array[55], array[61]);
6003 array[55] = tmp;
6004 tmp = vminf(array[58], array[64]);
6005 array[64] = vmaxf(array[58], array[64]);
6006 array[58] = tmp;
6007 tmp = vminf(array[59], array[65]);
6008 array[65] = vmaxf(array[59], array[65]);
6009 array[59] = tmp;
6010 tmp = vminf(array[62], array[68]);
6011 array[68] = vmaxf(array[62], array[68]);
6012 array[62] = tmp;
6013 tmp = vminf(array[63], array[69]);
6014 array[69] = vmaxf(array[63], array[69]);
6015 array[63] = tmp;
6016 tmp = vminf(array[66], array[72]);
6017 array[72] = vmaxf(array[66], array[72]);
6018 array[66] = tmp;
6019 tmp = vminf(array[67], array[73]);
6020 array[73] = vmaxf(array[67], array[73]);
6021 array[67] = tmp;
6022 tmp = vminf(array[70], array[76]);
6023 array[76] = vmaxf(array[70], array[76]);
6024 array[70] = tmp;
6025 tmp = vminf(array[71], array[77]);
6026 array[77] = vmaxf(array[71], array[77]);
6027 array[71] = tmp;
6028 tmp = vminf(array[74], array[80]);
6029 array[80] = vmaxf(array[74], array[80]);
6030 array[74] = tmp;
6031 tmp = vminf(array[2], array[4]);
6032 array[4] = vmaxf(array[2], array[4]);
6033 array[2] = tmp;
6034 tmp = vminf(array[3], array[5]);
6035 array[5] = vmaxf(array[3], array[5]);
6036 array[3] = tmp;
6037 tmp = vminf(array[6], array[8]);
6038 array[8] = vmaxf(array[6], array[8]);
6039 array[6] = tmp;
6040 tmp = vminf(array[7], array[9]);
6041 array[9] = vmaxf(array[7], array[9]);
6042 array[7] = tmp;
6043 tmp = vminf(array[10], array[12]);
6044 array[12] = vmaxf(array[10], array[12]);
6045 array[10] = tmp;
6046 tmp = vminf(array[11], array[13]);
6047 array[13] = vmaxf(array[11], array[13]);
6048 array[11] = tmp;
6049 tmp = vminf(array[14], array[16]);
6050 array[16] = vmaxf(array[14], array[16]);
6051 array[14] = tmp;
6052 tmp = vminf(array[15], array[17]);
6053 array[17] = vmaxf(array[15], array[17]);
6054 array[15] = tmp;
6055 tmp = vminf(array[18], array[20]);
6056 array[20] = vmaxf(array[18], array[20]);
6057 array[18] = tmp;
6058 tmp = vminf(array[19], array[21]);
6059 array[21] = vmaxf(array[19], array[21]);
6060 array[19] = tmp;
6061 tmp = vminf(array[22], array[24]);
6062 array[24] = vmaxf(array[22], array[24]);
6063 array[22] = tmp;
6064 tmp = vminf(array[23], array[25]);
6065 array[25] = vmaxf(array[23], array[25]);
6066 array[23] = tmp;
6067 tmp = vminf(array[26], array[28]);
6068 array[28] = vmaxf(array[26], array[28]);
6069 array[26] = tmp;
6070 tmp = vminf(array[27], array[29]);
6071 array[29] = vmaxf(array[27], array[29]);
6072 array[27] = tmp;
6073 tmp = vminf(array[30], array[32]);
6074 array[32] = vmaxf(array[30], array[32]);
6075 array[30] = tmp;
6076 tmp = vminf(array[31], array[33]);
6077 array[33] = vmaxf(array[31], array[33]);
6078 array[31] = tmp;
6079 tmp = vminf(array[34], array[36]);
6080 array[36] = vmaxf(array[34], array[36]);
6081 array[34] = tmp;
6082 tmp = vminf(array[35], array[37]);
6083 array[37] = vmaxf(array[35], array[37]);
6084 array[35] = tmp;
6085 tmp = vminf(array[38], array[40]);
6086 array[40] = vmaxf(array[38], array[40]);
6087 array[38] = tmp;
6088 tmp = vminf(array[39], array[41]);
6089 array[41] = vmaxf(array[39], array[41]);
6090 array[39] = tmp;
6091 tmp = vminf(array[42], array[44]);
6092 array[44] = vmaxf(array[42], array[44]);
6093 array[42] = tmp;
6094 tmp = vminf(array[43], array[45]);
6095 array[45] = vmaxf(array[43], array[45]);
6096 array[43] = tmp;
6097 tmp = vminf(array[46], array[48]);
6098 array[48] = vmaxf(array[46], array[48]);
6099 array[46] = tmp;
6100 tmp = vminf(array[47], array[49]);
6101 array[49] = vmaxf(array[47], array[49]);
6102 array[47] = tmp;
6103 tmp = vminf(array[50], array[52]);
6104 array[52] = vmaxf(array[50], array[52]);
6105 array[50] = tmp;
6106 tmp = vminf(array[51], array[53]);
6107 array[53] = vmaxf(array[51], array[53]);
6108 array[51] = tmp;
6109 tmp = vminf(array[54], array[56]);
6110 array[56] = vmaxf(array[54], array[56]);
6111 array[54] = tmp;
6112 tmp = vminf(array[55], array[57]);
6113 array[57] = vmaxf(array[55], array[57]);
6114 array[55] = tmp;
6115 tmp = vminf(array[58], array[60]);
6116 array[60] = vmaxf(array[58], array[60]);
6117 array[58] = tmp;
6118 tmp = vminf(array[59], array[61]);
6119 array[61] = vmaxf(array[59], array[61]);
6120 array[59] = tmp;
6121 tmp = vminf(array[62], array[64]);
6122 array[64] = vmaxf(array[62], array[64]);
6123 array[62] = tmp;
6124 tmp = vminf(array[63], array[65]);
6125 array[65] = vmaxf(array[63], array[65]);
6126 array[63] = tmp;
6127 tmp = vminf(array[66], array[68]);
6128 array[68] = vmaxf(array[66], array[68]);
6129 array[66] = tmp;
6130 tmp = vminf(array[67], array[69]);
6131 array[69] = vmaxf(array[67], array[69]);
6132 array[67] = tmp;
6133 tmp = vminf(array[70], array[72]);
6134 array[72] = vmaxf(array[70], array[72]);
6135 array[70] = tmp;
6136 tmp = vminf(array[71], array[73]);
6137 array[73] = vmaxf(array[71], array[73]);
6138 array[71] = tmp;
6139 tmp = vminf(array[74], array[76]);
6140 array[76] = vmaxf(array[74], array[76]);
6141 array[74] = tmp;
6142 tmp = vminf(array[75], array[77]);
6143 array[77] = vmaxf(array[75], array[77]);
6144 array[75] = tmp;
6145 tmp = vminf(array[78], array[80]);
6146 array[80] = vmaxf(array[78], array[80]);
6147 array[78] = tmp;
6148 array[1] = vmaxf(array[0], array[1]);
6149 array[3] = vmaxf(array[2], array[3]);
6150 array[5] = vmaxf(array[4], array[5]);
6151 array[7] = vmaxf(array[6], array[7]);
6152 array[9] = vmaxf(array[8], array[9]);
6153 array[11] = vmaxf(array[10], array[11]);
6154 array[13] = vmaxf(array[12], array[13]);
6155 array[15] = vmaxf(array[14], array[15]);
6156 array[17] = vmaxf(array[16], array[17]);
6157 array[19] = vmaxf(array[18], array[19]);
6158 array[21] = vmaxf(array[20], array[21]);
6159 array[23] = vmaxf(array[22], array[23]);
6160 array[25] = vmaxf(array[24], array[25]);
6161 array[27] = vmaxf(array[26], array[27]);
6162 array[29] = vmaxf(array[28], array[29]);
6163 array[31] = vmaxf(array[30], array[31]);
6164 array[33] = vmaxf(array[32], array[33]);
6165 array[35] = vmaxf(array[34], array[35]);
6166 array[37] = vmaxf(array[36], array[37]);
6167 array[39] = vmaxf(array[38], array[39]);
6168 array[40] = vminf(array[40], array[41]);
6169 array[42] = vminf(array[42], array[43]);
6170 array[44] = vminf(array[44], array[45]);
6171 array[46] = vminf(array[46], array[47]);
6172 array[48] = vminf(array[48], array[49]);
6173 array[50] = vminf(array[50], array[51]);
6174 array[52] = vminf(array[52], array[53]);
6175 array[54] = vminf(array[54], array[55]);
6176 array[56] = vminf(array[56], array[57]);
6177 array[58] = vminf(array[58], array[59]);
6178 array[60] = vminf(array[60], array[61]);
6179 array[62] = vminf(array[62], array[63]);
6180 array[64] = vminf(array[64], array[65]);
6181 array[66] = vminf(array[66], array[67]);
6182 array[68] = vminf(array[68], array[69]);
6183 array[70] = vminf(array[70], array[71]);
6184 array[72] = vminf(array[72], array[73]);
6185 array[74] = vminf(array[74], array[75]);
6186 array[76] = vminf(array[76], array[77]);
6187 array[78] = vminf(array[78], array[79]);
6188 array[64] = vmaxf(array[1], array[64]);
6189 array[66] = vmaxf(array[3], array[66]);
6190 array[68] = vmaxf(array[5], array[68]);
6191 array[70] = vmaxf(array[7], array[70]);
6192 array[9] = vminf(array[9], array[72]);
6193 array[11] = vminf(array[11], array[74]);
6194 array[13] = vminf(array[13], array[76]);
6195 array[15] = vminf(array[15], array[78]);
6196 array[17] = vminf(array[17], array[80]);
6197 array[40] = vmaxf(array[9], array[40]);
6198 array[42] = vmaxf(array[11], array[42]);
6199 array[44] = vmaxf(array[13], array[44]);
6200 array[46] = vmaxf(array[15], array[46]);
6201 array[48] = vmaxf(array[17], array[48]);
6202 array[50] = vmaxf(array[19], array[50]);
6203 array[52] = vmaxf(array[21], array[52]);
6204 array[54] = vmaxf(array[23], array[54]);
6205 array[25] = vminf(array[25], array[56]);
6206 array[27] = vminf(array[27], array[58]);
6207 array[29] = vminf(array[29], array[60]);
6208 array[31] = vminf(array[31], array[62]);
6209 array[33] = vminf(array[33], array[64]);
6210 array[35] = vminf(array[35], array[66]);
6211 array[37] = vminf(array[37], array[68]);
6212 array[39] = vminf(array[39], array[70]);
6213 array[40] = vmaxf(array[25], array[40]);
6214 array[42] = vmaxf(array[27], array[42]);
6215 array[44] = vmaxf(array[29], array[44]);
6216 array[46] = vmaxf(array[31], array[46]);
6217 array[33] = vminf(array[33], array[48]);
6218 array[35] = vminf(array[35], array[50]);
6219 array[37] = vminf(array[37], array[52]);
6220 array[39] = vminf(array[39], array[54]);
6221 array[40] = vmaxf(array[33], array[40]);
6222 array[42] = vmaxf(array[35], array[42]);
6223 array[37] = vminf(array[37], array[44]);
6224 array[39] = vminf(array[39], array[46]);
6225 array[40] = vmaxf(array[37], array[40]);
6226 array[39] = vminf(array[39], array[42]);
6227 return vmaxf(array[39], array[40]);
6228 }
6229 #endif
6230
6231 template<typename T, typename... ARGS>
median(T arg,ARGS...args)6232 inline T median(T arg, ARGS... args)
6233 {
6234 return median(std::array<T, sizeof...(args) + 1>{std::move(arg), std::move(args)...});
6235 }
6236
6237 template<typename T>
middle4of6(const std::array<T,6> & array)6238 inline std::array<T, 4> middle4of6(const std::array<T, 6>& array)
6239 {
6240 std::array<T, 4> res;
6241
6242 res[0] = std::min(array[1], array[2]);
6243 res[1] = std::max(array[1], array[2]);
6244 T left = std::min(array[0], res[1]);
6245 res[1] = std::max(array[0], res[1]);
6246 T tmp = std::min(left, res[0]);
6247 res[0] = std::max(left, res[0]);
6248 left = tmp;
6249 res[3] = std::min(array[4], array[5]);
6250 T right = std::max(array[4], array[5]);
6251 res[2] = std::min(array[3], right);
6252 right = std::max(array[3], right);
6253 tmp = std::min(res[2], res[3]);
6254 res[3] = std::max(res[2], res[3]);
6255 res[2] = std::max(left, tmp);
6256 res[1] = std::min(res[1], right);
6257
6258 return res;
6259 }
6260
6261 #ifdef __SSE2__
6262 template<>
middle4of6(const std::array<vfloat,6> & array)6263 inline std::array<vfloat, 4> middle4of6(const std::array<vfloat, 6>& array)
6264 {
6265 std::array<vfloat, 4> res;
6266
6267 res[0] = vminf(array[1], array[2]);
6268 res[1] = vmaxf(array[1], array[2]);
6269 vfloat left = vminf(array[0], res[1]);
6270 res[1] = vmaxf(array[0], res[1]);
6271 vfloat tmp = vminf(left, res[0]);
6272 res[0] = vmaxf(left, res[0]);
6273 left = tmp;
6274 res[3] = vminf(array[4], array[5]);
6275 vfloat right = vmaxf(array[4], array[5]);
6276 res[2] = vminf(array[3], right);
6277 right = vmaxf(array[3], right);
6278 tmp = vminf(res[2], res[3]);
6279 res[3] = vmaxf(res[2], res[3]);
6280 res[2] = vmaxf(left, tmp);
6281 res[1] = vminf(res[1], right);
6282
6283 return res;
6284 }
6285 #endif
6286
6287 template<typename T>
middle4of6(T arg0,T arg1,T arg2,T arg3,T arg4,T arg5)6288 inline std::array<T, 4> middle4of6(T arg0, T arg1, T arg2, T arg3, T arg4, T arg5)
6289 {
6290 return middle4of6(std::array<T, 6>{std::move(arg0), std::move(arg1), std::move(arg2), std::move(arg3), std::move(arg4), std::move(arg5)});
6291 }
6292