xref: /aosp_15_r20/external/libopenapv/src/oapv_tbl.c (revision abb65b4b03b69e1d508d4d9a44dcf199df16e7c3)
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  * All Rights Reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * - Redistributions of source code must retain the above copyright notice,
9  *   this list of conditions and the following disclaimer.
10  *
11  * - Redistributions in binary form must reproduce the above copyright notice,
12  *   this list of conditions and the following disclaimer in the documentation
13  *   and/or other materials provided with the distribution.
14  *
15  * - Neither the name of the copyright owner, nor the names of its contributors
16  *   may be used to endorse or promote products derived from this software
17  *   without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #include "oapv_def.h"
33 
34 #define NA 255 //never split
35 #define NB 14  //not reach in current setting of max AR 1:4
36 #define NC 15  //not reach in current setting of max AR 1:4
37 
38 // clang-format off
39 const u8 oapv_tbl_log2[257] = {
40     /* 0, 1 */
41     0, 0,
42     /* 2, 3 */
43     1, 1,
44     /* 4 ~ 7 */
45     2, 2, 2, 2,
46     /* 8 ~ 15 */
47     3, 3, 3, 3, 3, 3, 3, 3,
48     /* 16 ~ 31 */
49     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
50     /* 31 ~ 63 */
51     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
52     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
53     /* 64 ~ 127 */
54     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
55     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
56     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
57     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
58     /* 128 ~ 255 */
59     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
60     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
61     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
62     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
63     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
64     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
65     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
66     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
67     /* 256 */
68     8
69 };
70 
71 const s8 oapv_tbl_tm8[8][8] = {
72     { 64, 64, 64, 64, 64, 64, 64, 64},
73     { 89, 75, 50, 18,-18,-50,-75,-89},
74     { 84, 35,-35,-84,-84,-35, 35, 84},
75     { 75,-18,-89,-50, 50, 89, 18,-75},
76     { 64,-64,-64, 64, 64,-64,-64, 64},
77     { 50,-89, 18, 75,-75,-18, 89,-50},
78     { 35,-84, 84,-35,-35, 84,-84, 35},
79     { 18,-50, 75,-89, 89,-75, 50,-18}
80 };
81 
82 const int oapv_tbl_dq_scale[6] = {40, 45, 51, 57, 64, 71};
83 
84 const u16 oapv_tbl_scan[OAPV_BLK_D] = {
85     0,    1,    8,    16,   9,    2,    3,   10,
86     17,   24,   32,   25,   18,   11,   4,    5,
87     12,   19,   26,   33,   40,   48,   41,   34,
88     27,   20,   13,   6,    7,    14,   21,   28,
89     35,   42,   49,   56,   57,   50,   43,   36,
90     29,   22,   15,   23,   30,   37,   44,   51,
91     58,   59,   52,   45,   38,   31,   39,   46,
92     53,   60,   61,   54,   47,   55,   62,   63
93 };
94 
95 const u32 CODE_LUT_100[100][5][2] = {
96     {{ 2147483648,  1}, { 2147483648,  2}, { 2147483648,  3}, { 2147483648,  4}, { 2147483648,  5}},
97     {{          0,  2}, { 3221225472,  2}, { 2684354560,  3}, { 2415919104,  4}, { 2281701376,  5}},
98     {{ 1610612736,  3}, {          0,  3}, { 3221225472,  3}, { 2684354560,  4}, { 2415919104,  5}},
99     {{ 1342177280,  5}, {  536870912,  3}, { 3758096384,  3}, { 2952790016,  4}, { 2550136832,  5}},
100     {{ 1476395008,  5}, { 1610612736,  4}, {          0,  4}, { 3221225472,  4}, { 2684354560,  5}},
101     {{ 1207959552,  7}, { 1879048192,  4}, {  268435456,  4}, { 3489660928,  4}, { 2818572288,  5}},
102     {{ 1241513984,  7}, { 1342177280,  6}, {  536870912,  4}, { 3758096384,  4}, { 2952790016,  5}},
103     {{ 1275068416,  7}, { 1409286144,  6}, {  805306368,  4}, { 4026531840,  4}, { 3087007744,  5}},
104     {{ 1308622848,  7}, { 1476395008,  6}, { 1610612736,  5}, {          0,  5}, { 3221225472,  5}},
105     {{ 1140850688,  9}, { 1543503872,  6}, { 1744830464,  5}, {  134217728,  5}, { 3355443200,  5}},
106     {{ 1149239296,  9}, { 1207959552,  8}, { 1879048192,  5}, {  268435456,  5}, { 3489660928,  5}},
107     {{ 1157627904,  9}, { 1224736768,  8}, { 2013265920,  5}, {  402653184,  5}, { 3623878656,  5}},
108     {{ 1166016512,  9}, { 1241513984,  8}, { 1342177280,  7}, {  536870912,  5}, { 3758096384,  5}},
109     {{ 1174405120,  9}, { 1258291200,  8}, { 1375731712,  7}, {  671088640,  5}, { 3892314112,  5}},
110     {{ 1182793728,  9}, { 1275068416,  8}, { 1409286144,  7}, {  805306368,  5}, { 4026531840,  5}},
111     {{ 1191182336,  9}, { 1291845632,  8}, { 1442840576,  7}, {  939524096,  5}, { 4160749568,  5}},
112     {{ 1199570944,  9}, { 1308622848,  8}, { 1476395008,  7}, { 1610612736,  6}, {          0,  6}},
113     {{ 1107296256, 11}, { 1325400064,  8}, { 1509949440,  7}, { 1677721600,  6}, {   67108864,  6}},
114     {{ 1109393408, 11}, { 1140850688, 10}, { 1543503872,  7}, { 1744830464,  6}, {  134217728,  6}},
115     {{ 1111490560, 11}, { 1145044992, 10}, { 1577058304,  7}, { 1811939328,  6}, {  201326592,  6}},
116     {{ 1113587712, 11}, { 1149239296, 10}, { 1207959552,  9}, { 1879048192,  6}, {  268435456,  6}},
117     {{ 1115684864, 11}, { 1153433600, 10}, { 1216348160,  9}, { 1946157056,  6}, {  335544320,  6}},
118     {{ 1117782016, 11}, { 1157627904, 10}, { 1224736768,  9}, { 2013265920,  6}, {  402653184,  6}},
119     {{ 1119879168, 11}, { 1161822208, 10}, { 1233125376,  9}, { 2080374784,  6}, {  469762048,  6}},
120     {{ 1121976320, 11}, { 1166016512, 10}, { 1241513984,  9}, { 1342177280,  8}, {  536870912,  6}},
121     {{ 1124073472, 11}, { 1170210816, 10}, { 1249902592,  9}, { 1358954496,  8}, {  603979776,  6}},
122     {{ 1126170624, 11}, { 1174405120, 10}, { 1258291200,  9}, { 1375731712,  8}, {  671088640,  6}},
123     {{ 1128267776, 11}, { 1178599424, 10}, { 1266679808,  9}, { 1392508928,  8}, {  738197504,  6}},
124     {{ 1130364928, 11}, { 1182793728, 10}, { 1275068416,  9}, { 1409286144,  8}, {  805306368,  6}},
125     {{ 1132462080, 11}, { 1186988032, 10}, { 1283457024,  9}, { 1426063360,  8}, {  872415232,  6}},
126     {{ 1134559232, 11}, { 1191182336, 10}, { 1291845632,  9}, { 1442840576,  8}, {  939524096,  6}},
127     {{ 1136656384, 11}, { 1195376640, 10}, { 1300234240,  9}, { 1459617792,  8}, { 1006632960,  6}},
128     {{ 1138753536, 11}, { 1199570944, 10}, { 1308622848,  9}, { 1476395008,  8}, { 1610612736,  7}},
129     {{ 1090519040, 13}, { 1203765248, 10}, { 1317011456,  9}, { 1493172224,  8}, { 1644167168,  7}},
130     {{ 1091043328, 13}, { 1107296256, 12}, { 1325400064,  9}, { 1509949440,  8}, { 1677721600,  7}},
131     {{ 1091567616, 13}, { 1108344832, 12}, { 1333788672,  9}, { 1526726656,  8}, { 1711276032,  7}},
132     {{ 1092091904, 13}, { 1109393408, 12}, { 1140850688, 11}, { 1543503872,  8}, { 1744830464,  7}},
133     {{ 1092616192, 13}, { 1110441984, 12}, { 1142947840, 11}, { 1560281088,  8}, { 1778384896,  7}},
134     {{ 1093140480, 13}, { 1111490560, 12}, { 1145044992, 11}, { 1577058304,  8}, { 1811939328,  7}},
135     {{ 1093664768, 13}, { 1112539136, 12}, { 1147142144, 11}, { 1593835520,  8}, { 1845493760,  7}},
136     {{ 1094189056, 13}, { 1113587712, 12}, { 1149239296, 11}, { 1207959552, 10}, { 1879048192,  7}},
137     {{ 1094713344, 13}, { 1114636288, 12}, { 1151336448, 11}, { 1212153856, 10}, { 1912602624,  7}},
138     {{ 1095237632, 13}, { 1115684864, 12}, { 1153433600, 11}, { 1216348160, 10}, { 1946157056,  7}},
139     {{ 1095761920, 13}, { 1116733440, 12}, { 1155530752, 11}, { 1220542464, 10}, { 1979711488,  7}},
140     {{ 1096286208, 13}, { 1117782016, 12}, { 1157627904, 11}, { 1224736768, 10}, { 2013265920,  7}},
141     {{ 1096810496, 13}, { 1118830592, 12}, { 1159725056, 11}, { 1228931072, 10}, { 2046820352,  7}},
142     {{ 1097334784, 13}, { 1119879168, 12}, { 1161822208, 11}, { 1233125376, 10}, { 2080374784,  7}},
143     {{ 1097859072, 13}, { 1120927744, 12}, { 1163919360, 11}, { 1237319680, 10}, { 2113929216,  7}},
144     {{ 1098383360, 13}, { 1121976320, 12}, { 1166016512, 11}, { 1241513984, 10}, { 1342177280,  9}},
145     {{ 1098907648, 13}, { 1123024896, 12}, { 1168113664, 11}, { 1245708288, 10}, { 1350565888,  9}},
146     {{ 1099431936, 13}, { 1124073472, 12}, { 1170210816, 11}, { 1249902592, 10}, { 1358954496,  9}},
147     {{ 1099956224, 13}, { 1125122048, 12}, { 1172307968, 11}, { 1254096896, 10}, { 1367343104,  9}},
148     {{ 1100480512, 13}, { 1126170624, 12}, { 1174405120, 11}, { 1258291200, 10}, { 1375731712,  9}},
149     {{ 1101004800, 13}, { 1127219200, 12}, { 1176502272, 11}, { 1262485504, 10}, { 1384120320,  9}},
150     {{ 1101529088, 13}, { 1128267776, 12}, { 1178599424, 11}, { 1266679808, 10}, { 1392508928,  9}},
151     {{ 1102053376, 13}, { 1129316352, 12}, { 1180696576, 11}, { 1270874112, 10}, { 1400897536,  9}},
152     {{ 1102577664, 13}, { 1130364928, 12}, { 1182793728, 11}, { 1275068416, 10}, { 1409286144,  9}},
153     {{ 1103101952, 13}, { 1131413504, 12}, { 1184890880, 11}, { 1279262720, 10}, { 1417674752,  9}},
154     {{ 1103626240, 13}, { 1132462080, 12}, { 1186988032, 11}, { 1283457024, 10}, { 1426063360,  9}},
155     {{ 1104150528, 13}, { 1133510656, 12}, { 1189085184, 11}, { 1287651328, 10}, { 1434451968,  9}},
156     {{ 1104674816, 13}, { 1134559232, 12}, { 1191182336, 11}, { 1291845632, 10}, { 1442840576,  9}},
157     {{ 1105199104, 13}, { 1135607808, 12}, { 1193279488, 11}, { 1296039936, 10}, { 1451229184,  9}},
158     {{ 1105723392, 13}, { 1136656384, 12}, { 1195376640, 11}, { 1300234240, 10}, { 1459617792,  9}},
159     {{ 1106247680, 13}, { 1137704960, 12}, { 1197473792, 11}, { 1304428544, 10}, { 1468006400,  9}},
160     {{ 1106771968, 13}, { 1138753536, 12}, { 1199570944, 11}, { 1308622848, 10}, { 1476395008,  9}},
161     {{ 1082130432, 15}, { 1139802112, 12}, { 1201668096, 11}, { 1312817152, 10}, { 1484783616,  9}},
162     {{ 1082261504, 15}, { 1090519040, 14}, { 1203765248, 11}, { 1317011456, 10}, { 1493172224,  9}},
163     {{ 1082392576, 15}, { 1090781184, 14}, { 1205862400, 11}, { 1321205760, 10}, { 1501560832,  9}},
164     {{ 1082523648, 15}, { 1091043328, 14}, { 1107296256, 13}, { 1325400064, 10}, { 1509949440,  9}},
165     {{ 1082654720, 15}, { 1091305472, 14}, { 1107820544, 13}, { 1329594368, 10}, { 1518338048,  9}},
166     {{ 1082785792, 15}, { 1091567616, 14}, { 1108344832, 13}, { 1333788672, 10}, { 1526726656,  9}},
167     {{ 1082916864, 15}, { 1091829760, 14}, { 1108869120, 13}, { 1337982976, 10}, { 1535115264,  9}},
168     {{ 1083047936, 15}, { 1092091904, 14}, { 1109393408, 13}, { 1140850688, 12}, { 1543503872,  9}},
169     {{ 1083179008, 15}, { 1092354048, 14}, { 1109917696, 13}, { 1141899264, 12}, { 1551892480,  9}},
170     {{ 1083310080, 15}, { 1092616192, 14}, { 1110441984, 13}, { 1142947840, 12}, { 1560281088,  9}},
171     {{ 1083441152, 15}, { 1092878336, 14}, { 1110966272, 13}, { 1143996416, 12}, { 1568669696,  9}},
172     {{ 1083572224, 15}, { 1093140480, 14}, { 1111490560, 13}, { 1145044992, 12}, { 1577058304,  9}},
173     {{ 1083703296, 15}, { 1093402624, 14}, { 1112014848, 13}, { 1146093568, 12}, { 1585446912,  9}},
174     {{ 1083834368, 15}, { 1093664768, 14}, { 1112539136, 13}, { 1147142144, 12}, { 1593835520,  9}},
175     {{ 1083965440, 15}, { 1093926912, 14}, { 1113063424, 13}, { 1148190720, 12}, { 1602224128,  9}},
176     {{ 1084096512, 15}, { 1094189056, 14}, { 1113587712, 13}, { 1149239296, 12}, { 1207959552, 11}},
177     {{ 1084227584, 15}, { 1094451200, 14}, { 1114112000, 13}, { 1150287872, 12}, { 1210056704, 11}},
178     {{ 1084358656, 15}, { 1094713344, 14}, { 1114636288, 13}, { 1151336448, 12}, { 1212153856, 11}},
179     {{ 1084489728, 15}, { 1094975488, 14}, { 1115160576, 13}, { 1152385024, 12}, { 1214251008, 11}},
180     {{ 1084620800, 15}, { 1095237632, 14}, { 1115684864, 13}, { 1153433600, 12}, { 1216348160, 11}},
181     {{ 1084751872, 15}, { 1095499776, 14}, { 1116209152, 13}, { 1154482176, 12}, { 1218445312, 11}},
182     {{ 1084882944, 15}, { 1095761920, 14}, { 1116733440, 13}, { 1155530752, 12}, { 1220542464, 11}},
183     {{ 1085014016, 15}, { 1096024064, 14}, { 1117257728, 13}, { 1156579328, 12}, { 1222639616, 11}},
184     {{ 1085145088, 15}, { 1096286208, 14}, { 1117782016, 13}, { 1157627904, 12}, { 1224736768, 11}},
185     {{ 1085276160, 15}, { 1096548352, 14}, { 1118306304, 13}, { 1158676480, 12}, { 1226833920, 11}},
186     {{ 1085407232, 15}, { 1096810496, 14}, { 1118830592, 13}, { 1159725056, 12}, { 1228931072, 11}},
187     {{ 1085538304, 15}, { 1097072640, 14}, { 1119354880, 13}, { 1160773632, 12}, { 1231028224, 11}},
188     {{ 1085669376, 15}, { 1097334784, 14}, { 1119879168, 13}, { 1161822208, 12}, { 1233125376, 11}},
189     {{ 1085800448, 15}, { 1097596928, 14}, { 1120403456, 13}, { 1162870784, 12}, { 1235222528, 11}},
190     {{ 1085931520, 15}, { 1097859072, 14}, { 1120927744, 13}, { 1163919360, 12}, { 1237319680, 11}},
191     {{ 1086062592, 15}, { 1098121216, 14}, { 1121452032, 13}, { 1164967936, 12}, { 1239416832, 11}},
192     {{ 1086193664, 15}, { 1098383360, 14}, { 1121976320, 13}, { 1166016512, 12}, { 1241513984, 11}},
193     {{ 1086324736, 15}, { 1098645504, 14}, { 1122500608, 13}, { 1167065088, 12}, { 1243611136, 11}},
194     {{ 1086455808, 15}, { 1098907648, 14}, { 1123024896, 13}, { 1168113664, 12}, { 1245708288, 11}},
195     {{ 1086586880, 15}, { 1099169792, 14}, { 1123549184, 13}, { 1169162240, 12}, { 1247805440, 11}}
196 };
197 
198 int oapv_itrans_diff[64][64] = {
199     {
200          16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
201          16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
202          16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
203          16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
204          16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
205          16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
206          16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
207          16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748
208     },
209     {
210          23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
211          22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
212          23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
213          23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
214          22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
215          22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
216          22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
217          22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277
218     },
219     {
220          22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
221          19660,   19660,   19660,   19660,   19660,   19660,   19660,   19660,
222          13107,   13107,   13107,   13107,   13107,   13107,   13107,   13107,
223          5097,    5097,    5097,    5097,    5097,    5097,    5097,    5097,
224          -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,
225          -13107,  -13107,  -13107,  -13107,  -13107,  -13107,  -13107,  -13107,
226          -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,
227          -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573
228     },
229     {
230          21117,   21117,   21117,   21117,   21117,   21117,   21117,   21117,
231          9466,    9466,    9466,    9466,    9466,    9466,    9466,    9466,
232          -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,
233          -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,
234          -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,
235          -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,
236          8738,    8738,    8738,    8738,    8738,    8738,    8738,    8738,
237          21845,   21845,   21845,   21845,   21845,   21845,   21845,   21845
238     },
239     {
240          32403,   27306,   18204,    6553,   -6553,  -18204,  -27306,  -32403,
241          26328,   22186,   14791,    5324,   -5324,  -14791,  -22186,  -26328,
242          18227,   15360,   10240,    3686,   -3686,  -10240,  -15360,  -18227,
243          6075,    5120,    3413,    1228,   -1228,   -3413,   -5120,   -6075,
244          -6075,   -5120,   -3413,   -1228,    1228,    3413,    5120,    6075,
245          -18227,  -15360,  -10240,   -3686,    3686,   10240,   15360,   18227,
246          -26328,  -22186,  -14791,   -5324,    5324,   14791,   22186,   26328,
247          -32403,  -27306,  -18204,   -6553,    6553,   18204,   27306,   32403
248     },
249     {
250          21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
251          21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
252          21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
253          21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
254          21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
255          21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
256          21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
257          21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981
258     },
259     {
260          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
261          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
262          19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626,
263          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
264          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
265          19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626,
266          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
267          19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626
268     },
269     {
270          30583,   12743,  -12743,  -30583,  -30583,  -12743,   12743,   30583,
271          24849,   10353,  -10353,  -24849,  -24849,  -10353,   10353,   24849,
272          16247,    6769,   -6769,  -16247,  -16247,   -6769,    6769,   16247,
273          5734,    2389,   -2389,   -5734,   -5734,   -2389,    2389,    5734,
274          -6690,   -2787,    2787,    6690,    6690,    2787,   -2787,   -6690,
275          -16247,   -6769,    6769,   16247,   16247,    6769,   -6769,  -16247,
276          -24849,  -10353,   10353,   24849,   24849,   10353,  -10353,  -24849,
277          -29627,  -12344,   12344,   29627,   29627,   12344,  -12344,  -29627
278     },
279     {
280          30378,   25600,   17066,    6144,   -6144,  -17066,  -25600,  -30378,
281          12151,   10240,    6826,    2457,   -2457,   -6826,  -10240,  -12151,
282          -12151,  -10240,   -6826,   -2457,    2457,    6826,   10240,   12151,
283          -29366,  -24746,  -16497,   -5939,    5939,   16497,   24746,   29366,
284          -30378,  -25600,  -17066,   -6144,    6144,   17066,   25600,   30378,
285          -13164,  -11093,   -7395,   -2662,    2662,    7395,   11093,   13164,
286          12151,   10240,    6826,    2457,   -2457,   -6826,  -10240,  -12151,
287          29366,   24746,   16497,    5939,   -5939,  -16497,  -24746,  -29366
288     },
289     {
290          18932,   18932,   18932,   18932,   18932,   18932,   18932,   18932,
291          -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369,
292          -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,
293          -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,
294          12379,   12379,   12379,   12379,   12379,   12379,   12379,   12379,
295          22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
296          4369,    4369,    4369,    4369,    4369,    4369,    4369,    4369,
297          -18932,  -18932,  -18932,  -18932,  -18932,  -18932,  -18932,  -18932
298     },
299     {
300          16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
301          -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,
302          -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,  -16019,
303          16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748,
304          16019,   16019,   16019,   16019,   16019,   16019,   16019,   16019,
305          -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,
306          -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,  -16748,
307          16748,   16748,   16748,   16748,   16748,   16748,   16748,   16748
308     },
309     {
310          27340,   23040,   15360,    5529,   -5529,  -15360,  -23040,  -27340,
311          -6075,   -5120,   -3413,   -1228,    1228,    3413,    5120,    6075,
312          -31391,  -26453,  -17635,   -6348,    6348,   17635,   26453,   31391,
313          -17214,  -14506,   -9671,   -3481,    3481,    9671,   14506,   17214,
314          17214,   14506,    9671,    3481,   -3481,   -9671,  -14506,  -17214,
315          31391,   26453,   17635,    6348,   -6348,  -17635,  -26453,  -31391,
316          6075,    5120,    3413,    1228,   -1228,   -3413,   -5120,   -6075,
317          -27340,  -23040,  -15360,   -5529,    5529,   15360,   23040,   27340
318     },
319     {
320          28672,   11946,  -11946,  -28672,  -28672,  -11946,   11946,   28672,
321          11468,    4778,   -4778,  -11468,  -11468,   -4778,    4778,   11468,
322          -12424,   -5176,    5176,   12424,   12424,    5176,   -5176,  -12424,
323          -28672,  -11946,   11946,   28672,   28672,   11946,  -11946,  -28672,
324          -28672,  -11946,   11946,   28672,   28672,   11946,  -11946,  -28672,
325          -11468,   -4778,    4778,   11468,   11468,    4778,   -4778,  -11468,
326          12424,    5176,   -5176,  -12424,  -12424,   -5176,    5176,   12424,
327          28672,   11946,  -11946,  -28672,  -28672,  -11946,   11946,   28672
328     },
329     {
330          26453,   -6348,  -31391,  -17635,   17635,   31391,    6348,  -26453,
331          22186,   -5324,  -26328,  -14791,   14791,   26328,    5324,  -22186,
332          15360,   -3686,  -18227,  -10240,   10240,   18227,    3686,  -15360,
333          5120,   -1228,   -6075,   -3413,    3413,    6075,    1228,   -5120,
334          -5973,    1433,    7088,    3982,   -3982,   -7088,   -1433,    5973,
335          -14506,    3481,   17214,    9671,   -9671,  -17214,   -3481,   14506,
336          -23040,    5529,   27340,   15360,  -15360,  -27340,   -5529,   23040,
337          -26453,    6348,   31391,   17635,  -17635,  -31391,   -6348,   26453
338     },
339     {
340          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
341          16019,  -16019,  -16019,   16019,   16019,  -16019,  -16019,   16019,
342          16019,  -16019,  -16019,   16019,   16019,  -16019,  -16019,   16019,
343          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
344          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
345          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
346          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
347          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748
348     },
349     {
350          12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
351          13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
352          13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
353          12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
354          13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
355          12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
356          12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
357          13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084
358     },
359     {
360          23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
361          18932,  -18932,  -18932,   18932,   18932,  -18932,  -18932,   18932,
362          12379,  -12379,  -12379,   12379,   12379,  -12379,  -12379,   12379,
363          4369,   -4369,   -4369,    4369,    4369,   -4369,   -4369,    4369,
364          -4369,    4369,    4369,   -4369,   -4369,    4369,    4369,   -4369,
365          -12379,   12379,   12379,  -12379,  -12379,   12379,   12379,  -12379,
366          -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932,
367          -22573,   22573,   22573,  -22573,  -22573,   22573,   22573,  -22573
368     },
369     {
370          24746,   -5939,  -29366,  -16497,   16497,   29366,    5939,  -24746,
371          10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240,
372          -10240,    2457,   12151,    6826,   -6826,  -12151,   -2457,   10240,
373          -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
374          -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
375          -10240,    2457,   12151,    6826,   -6826,  -12151,   -2457,   10240,
376          10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240,
377          25600,   -6144,  -30378,  -17066,   17066,   30378,    6144,  -25600
378     },
379     {
380          25804,   10752,  -10752,  -25804,  -25804,  -10752,   10752,   25804,
381          -5734,   -2389,    2389,    5734,    5734,    2389,   -2389,   -5734,
382          -30583,  -12743,   12743,   30583,   30583,   12743,  -12743,  -30583,
383          -17203,   -7168,    7168,   17203,   17203,    7168,   -7168,  -17203,
384          16247,    6769,   -6769,  -16247,  -16247,   -6769,    6769,   16247,
385          29627,   12344,  -12344,  -29627,  -29627,  -12344,   12344,   29627,
386          6690,    2787,   -2787,   -6690,   -6690,   -2787,    2787,    6690,
387          -24849,  -10353,   10353,   24849,   24849,   10353,  -10353,  -24849
388     },
389     {
390          23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
391          -23290,  -19626,  -13084,   -4710,    4710,   13084,   19626,   23290,
392          -22277,  -18773,  -12515,   -4505,    4505,   12515,   18773,   22277,
393          23290,   19626,   13084,    4710,   -4710,  -13084,  -19626,  -23290,
394          22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277,
395          -23290,  -19626,  -13084,   -4710,    4710,   13084,   19626,   23290,
396          -23290,  -19626,  -13084,   -4710,    4710,   13084,   19626,   23290,
397          22277,   18773,   12515,    4505,   -4505,  -12515,  -18773,  -22277
398     },
399     {
400          12379,   12379,   12379,   12379,   12379,   12379,   12379,   12379,
401          -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,
402          5097,    5097,    5097,    5097,    5097,    5097,    5097,    5097,
403          19660,   19660,   19660,   19660,   19660,   19660,   19660,   19660,
404          -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,
405          -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,   -5097,
406          22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
407          -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379
408     },
409     {
410          8738,    8738,    8738,    8738,    8738,    8738,    8738,    8738,
411          -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,  -21117,
412          21845,   21845,   21845,   21845,   21845,   21845,   21845,   21845,
413          -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,   -8738,
414          -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,   -9466,
415          21117,   21117,   21117,   21117,   21117,   21117,   21117,   21117,
416          -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,  -21845,
417          9466,    9466,    9466,    9466,    9466,    9466,    9466,    9466
418     },
419     {
420          18227,   15360,   10240,    3686,   -3686,  -10240,  -15360,  -18227,
421          -31391,  -26453,  -17635,   -6348,    6348,   17635,   26453,   31391,
422          7088,    5973,    3982,    1433,   -1433,   -3982,   -5973,   -7088,
423          26328,   22186,   14791,    5324,   -5324,  -14791,  -22186,  -26328,
424          -26328,  -22186,  -14791,   -5324,    5324,   14791,   22186,   26328,
425          -7088,   -5973,   -3982,   -1433,    1433,    3982,    5973,    7088,
426          31391,   26453,   17635,    6348,   -6348,  -17635,  -26453,  -31391,
427          -18227,  -15360,  -10240,   -3686,    3686,   10240,   15360,   18227
428     },
429     {
430          21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981,
431          -21981,   -9159,    9159,   21981,   21981,    9159,   -9159,  -21981,
432          -21981,   -9159,    9159,   21981,   21981,    9159,   -9159,  -21981,
433          21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
434          21026,    8760,   -8760,  -21026,  -21026,   -8760,    8760,   21026,
435          -21026,   -8760,    8760,   21026,   21026,    8760,   -8760,  -21026,
436          -21026,   -8760,    8760,   21026,   21026,    8760,   -8760,  -21026,
437          21981,    9159,   -9159,  -21981,  -21981,   -9159,    9159,   21981
438     },
439     {
440          22186,   -5324,  -26328,  -14791,   14791,   26328,    5324,  -22186,
441          -5120,    1228,    6075,    3413,   -3413,   -6075,   -1228,    5120,
442          -26453,    6348,   31391,   17635,  -17635,  -31391,   -6348,   26453,
443          -15360,    3686,   18227,   10240,  -10240,  -18227,   -3686,   15360,
444          14506,   -3481,  -17214,   -9671,    9671,   17214,    3481,  -14506,
445          27306,   -6553,  -32403,  -18204,   18204,   32403,    6553,  -27306,
446          5120,   -1228,   -6075,   -3413,    3413,    6075,    1228,   -5120,
447          -22186,    5324,   26328,   14791,  -14791,  -26328,   -5324,   22186
448     },
449     {
450          21845,  -21845,  -21845,   21845,   21845,  -21845,  -21845,   21845,
451          8738,   -8738,   -8738,    8738,    8738,   -8738,   -8738,    8738,
452          -9466,    9466,    9466,   -9466,   -9466,    9466,    9466,   -9466,
453          -21117,   21117,   21117,  -21117,  -21117,   21117,   21117,  -21117,
454          -21117,   21117,   21117,  -21117,  -21117,   21117,   21117,  -21117,
455          -8738,    8738,    8738,   -8738,   -8738,    8738,    8738,   -8738,
456          9466,   -9466,   -9466,    9466,    9466,   -9466,   -9466,    9466,
457          21845,  -21845,  -21845,   21845,   21845,  -21845,  -21845,   21845
458     },
459     {
460          17635,  -31391,    6348,   26453,  -26453,   -6348,   31391,  -17635,
461          15360,  -27340,    5529,   23040,  -23040,   -5529,   27340,  -15360,
462          10240,  -18227,    3686,   15360,  -15360,   -3686,   18227,  -10240,
463          3413,   -6075,    1228,    5120,   -5120,   -1228,    6075,   -3413,
464          -3413,    6075,   -1228,   -5120,    5120,    1228,   -6075,    3413,
465          -10240,   18227,   -3686,  -15360,   15360,    3686,  -18227,   10240,
466          -15360,   27340,   -5529,  -23040,   23040,    5529,  -27340,   15360,
467          -17635,   31391,   -6348,  -26453,   26453,    6348,  -31391,   17635
468     },
469     {
470          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
471          9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159,
472          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
473          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
474          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
475          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
476          9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159,
477          9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159
478     },
479     {
480          4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
481          4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
482          4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
483          4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
484          4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
485          4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
486          4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
487          4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710
488     },
489     {
490          12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
491          10752,  -25804,   25804,  -10752,  -10752,   25804,  -25804,   10752,
492          6769,  -16247,   16247,   -6769,   -6769,   16247,  -16247,    6769,
493          2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
494          -2389,    5734,   -5734,    2389,    2389,   -5734,    5734,   -2389,
495          -7168,   17203,  -17203,    7168,    7168,  -17203,   17203,   -7168,
496          -10353,   24849,  -24849,   10353,   10353,  -24849,   24849,  -10353,
497          -12344,   29627,  -29627,   12344,   12344,  -29627,   29627,  -12344
498     },
499     {
500          16497,  -29366,    5939,   24746,  -24746,   -5939,   29366,  -16497,
501          7395,  -13164,    2662,   11093,  -11093,   -2662,   13164,   -7395,
502          -6826,   12151,   -2457,  -10240,   10240,    2457,  -12151,    6826,
503          -17066,   30378,   -6144,  -25600,   25600,    6144,  -30378,   17066,
504          -16497,   29366,   -5939,  -24746,   24746,    5939,  -29366,   16497,
505          -7395,   13164,   -2662,  -11093,   11093,    2662,  -13164,    7395,
506          6826,  -12151,    2457,   10240,  -10240,   -2457,   12151,   -6826,
507          17066,  -30378,    6144,   25600,  -25600,   -6144,   30378,  -17066
508     },
509     {
510          19660,  -19660,  -19660,   19660,   19660,  -19660,  -19660,   19660,
511          -5097,    5097,    5097,   -5097,   -5097,    5097,    5097,   -5097,
512          -23301,   23301,   23301,  -23301,  -23301,   23301,   23301,  -23301,
513          -12379,   12379,   12379,  -12379,  -12379,   12379,   12379,  -12379,
514          13107,  -13107,  -13107,   13107,   13107,  -13107,  -13107,   13107,
515          23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
516          5097,   -5097,   -5097,    5097,    5097,   -5097,   -5097,    5097,
517          -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932
518     },
519     {
520          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
521          -19626,    4710,   23290,   13084,  -13084,  -23290,   -4710,   19626,
522          -18773,    4505,   22277,   12515,  -12515,  -22277,   -4505,   18773,
523          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
524          18773,   -4505,  -22277,  -12515,   12515,   22277,    4505,  -18773,
525          -18773,    4505,   22277,   12515,  -12515,  -22277,   -4505,   18773,
526          -19626,    4710,   23290,   13084,  -13084,  -23290,   -4710,   19626,
527          19626,   -4710,  -23290,  -13084,   13084,   23290,    4710,  -19626
528     },
529     {
530          17203,    7168,   -7168,  -17203,  -17203,   -7168,    7168,   17203,
531          -29627,  -12344,   12344,   29627,   29627,   12344,  -12344,  -29627,
532          5734,    2389,   -2389,   -5734,   -5734,   -2389,    2389,    5734,
533          24849,   10353,  -10353,  -24849,  -24849,  -10353,   10353,   24849,
534          -25804,  -10752,   10752,   25804,   25804,   10752,  -10752,  -25804,
535          -5734,   -2389,    2389,    5734,    5734,    2389,   -2389,   -5734,
536          29627,   12344,  -12344,  -29627,  -29627,  -12344,   12344,   29627,
537          -17203,   -7168,    7168,   17203,   17203,    7168,   -7168,  -17203
538     },
539     {
540          13164,   11093,    7395,    2662,   -2662,   -7395,  -11093,  -13164,
541          -30378,  -25600,  -17066,   -6144,    6144,   17066,   25600,   30378,
542          30378,   25600,   17066,    6144,   -6144,  -17066,  -25600,  -30378,
543          -12151,  -10240,   -6826,   -2457,    2457,    6826,   10240,   12151,
544          -12151,  -10240,   -6826,   -2457,    2457,    6826,   10240,   12151,
545          29366,   24746,   16497,    5939,   -5939,  -16497,  -24746,  -29366,
546          -30378,  -25600,  -17066,   -6144,    6144,   17066,   25600,   30378,
547          12151,   10240,    6826,    2457,   -2457,   -6826,  -10240,  -12151
548     },
549     {
550          4369,    4369,    4369,    4369,    4369,    4369,    4369,    4369,
551          -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,  -12379,
552          19660,   19660,   19660,   19660,   19660,   19660,   19660,   19660,
553          -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,  -22573,
554          22573,   22573,   22573,   22573,   22573,   22573,   22573,   22573,
555          -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,  -19660,
556          12379,   12379,   12379,   12379,   12379,   12379,   12379,   12379,
557          -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369,   -4369
558     },
559     {
560          7088,    5973,    3982,    1433,   -1433,   -3982,   -5973,   -7088,
561          -18227,  -15360,  -10240,   -3686,    3686,   10240,   15360,   18227,
562          27340,   23040,   15360,    5529,   -5529,  -15360,  -23040,  -27340,
563          -31391,  -26453,  -17635,   -6348,    6348,   17635,   26453,   31391,
564          31391,   26453,   17635,    6348,   -6348,  -17635,  -26453,  -31391,
565          -27340,  -23040,  -15360,   -5529,    5529,   15360,   23040,   27340,
566          18227,   15360,   10240,    3686,   -3686,  -10240,  -15360,  -18227,
567          -7088,   -5973,   -3982,   -1433,    1433,    3982,    5973,    7088
568     },
569     {
570          12424,    5176,   -5176,  -12424,  -12424,   -5176,    5176,   12424,
571          -28672,  -11946,   11946,   28672,   28672,   11946,  -11946,  -28672,
572          27716,   11548,  -11548,  -27716,  -27716,  -11548,   11548,   27716,
573          -11468,   -4778,    4778,   11468,   11468,    4778,   -4778,  -11468,
574          -12424,   -5176,    5176,   12424,   12424,    5176,   -5176,  -12424,
575          28672,   11946,  -11946,  -28672,  -28672,  -11946,   11946,   28672,
576          -27716,  -11548,   11548,   27716,   27716,   11548,  -11548,  -27716,
577          11468,    4778,   -4778,  -11468,  -11468,   -4778,    4778,   11468
578     },
579     {
580          14506,   -3481,  -17214,   -9671,    9671,   17214,    3481,  -14506,
581          -26453,    6348,   31391,   17635,  -17635,  -31391,   -6348,   26453,
582          5973,   -1433,   -7088,   -3982,    3982,    7088,    1433,   -5973,
583          22186,   -5324,  -26328,  -14791,   14791,   26328,    5324,  -22186,
584          -23040,    5529,   27340,   15360,  -15360,  -27340,   -5529,   23040,
585          -5120,    1228,    6075,    3413,   -3413,   -6075,   -1228,    5120,
586          26453,   -6348,  -31391,  -17635,   17635,   31391,    6348,  -26453,
587          -14506,    3481,   17214,    9671,   -9671,  -17214,   -3481,   14506
588     },
589     {
590          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
591          -16748,   16748,   16748,  -16748,  -16748,   16748,   16748,  -16748,
592          -16748,   16748,   16748,  -16748,  -16748,   16748,   16748,  -16748,
593          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
594          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748,
595          -16019,   16019,   16019,  -16019,  -16019,   16019,   16019,  -16019,
596          -16019,   16019,   16019,  -16019,  -16019,   16019,   16019,  -16019,
597          16748,  -16748,  -16748,   16748,   16748,  -16748,  -16748,   16748
598     },
599     {
600          14791,  -26328,    5324,   22186,  -22186,   -5324,   26328,  -14791,
601          -3413,    6075,   -1228,   -5120,    5120,    1228,   -6075,    3413,
602          -17635,   31391,   -6348,  -26453,   26453,    6348,  -31391,   17635,
603          -10240,   18227,   -3686,  -15360,   15360,    3686,  -18227,   10240,
604          10240,  -18227,    3686,   15360,  -15360,   -3686,   18227,  -10240,
605          17635,  -31391,    6348,   26453,  -26453,   -6348,   31391,  -17635,
606          3413,   -6075,    1228,    5120,   -5120,   -1228,    6075,   -3413,
607          -14791,   26328,   -5324,  -22186,   22186,    5324,  -26328,   14791
608     },
609     {
610          11548,  -27716,   27716,  -11548,  -11548,   27716,  -27716,   11548,
611          5176,  -12424,   12424,   -5176,   -5176,   12424,  -12424,    5176,
612          -5176,   12424,  -12424,    5176,    5176,  -12424,   12424,   -5176,
613          -11946,   28672,  -28672,   11946,   11946,  -28672,   28672,  -11946,
614          -11946,   28672,  -28672,   11946,   11946,  -28672,   28672,  -11946,
615          -5176,   12424,  -12424,    5176,    5176,  -12424,   12424,   -5176,
616          4778,  -11468,   11468,   -4778,   -4778,   11468,  -11468,    4778,
617          11946,  -28672,   28672,  -11946,  -11946,   28672,  -28672,   11946
618     },
619     {
620          6348,  -17635,   26453,  -31391,   31391,  -26453,   17635,   -6348,
621          5529,  -15360,   23040,  -27340,   27340,  -23040,   15360,   -5529,
622          3481,   -9671,   14506,  -17214,   17214,  -14506,    9671,   -3481,
623          1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
624          -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228,
625          -3481,    9671,  -14506,   17214,  -17214,   14506,   -9671,    3481,
626          -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324,
627          -6348,   17635,  -26453,   31391,  -31391,   26453,  -17635,    6348
628     },
629     {
630          5939,  -16497,   24746,  -29366,   29366,  -24746,   16497,   -5939,
631          2662,   -7395,   11093,  -13164,   13164,  -11093,    7395,   -2662,
632          -2662,    7395,  -11093,   13164,  -13164,   11093,   -7395,    2662,
633          -6144,   17066,  -25600,   30378,  -30378,   25600,  -17066,    6144,
634          -5939,   16497,  -24746,   29366,  -29366,   24746,  -16497,    5939,
635          -2457,    6826,  -10240,   12151,  -12151,   10240,   -6826,    2457,
636          2457,   -6826,   10240,  -12151,   12151,  -10240,    6826,   -2457,
637          6144,  -17066,   25600,  -30378,   30378,  -25600,   17066,   -6144
638     },
639     {
640          10353,  -24849,   24849,  -10353,  -10353,   24849,  -24849,   10353,
641          -2389,    5734,   -5734,    2389,    2389,   -5734,    5734,   -2389,
642          -12743,   30583,  -30583,   12743,   12743,  -30583,   30583,  -12743,
643          -7168,   17203,  -17203,    7168,    7168,  -17203,   17203,   -7168,
644          7168,  -17203,   17203,   -7168,   -7168,   17203,  -17203,    7168,
645          12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
646          2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
647          -10353,   24849,  -24849,   10353,   10353,  -24849,   24849,  -10353
648     },
649     {
650          12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
651          -12515,   22277,   -4505,  -18773,   18773,    4505,  -22277,   12515,
652          -12515,   22277,   -4505,  -18773,   18773,    4505,  -22277,   12515,
653          12515,  -22277,    4505,   18773,  -18773,   -4505,   22277,  -12515,
654          13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084,
655          -13084,   23290,   -4710,  -19626,   19626,    4710,  -23290,   13084,
656          -13084,   23290,   -4710,  -19626,   19626,    4710,  -23290,   13084,
657          13084,  -23290,    4710,   19626,  -19626,   -4710,   23290,  -13084
658     },
659     {
660          13107,  -13107,  -13107,   13107,   13107,  -13107,  -13107,   13107,
661          -23301,   23301,   23301,  -23301,  -23301,   23301,   23301,  -23301,
662          4369,   -4369,   -4369,    4369,    4369,   -4369,   -4369,    4369,
663          19660,  -19660,  -19660,   19660,   19660,  -19660,  -19660,   19660,
664          -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932,
665          -4369,    4369,    4369,   -4369,   -4369,    4369,    4369,   -4369,
666          23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
667          -12379,   12379,   12379,  -12379,  -12379,   12379,   12379,  -12379
668     },
669     {
670          10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240,
671          -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
672          25600,   -6144,  -30378,  -17066,   17066,   30378,    6144,  -25600,
673          -11093,    2662,   13164,    7395,   -7395,  -13164,   -2662,   11093,
674          -11093,    2662,   13164,    7395,   -7395,  -13164,   -2662,   11093,
675          25600,   -6144,  -30378,  -17066,   17066,   30378,    6144,  -25600,
676          -25600,    6144,   30378,   17066,  -17066,  -30378,   -6144,   25600,
677          10240,   -2457,  -12151,   -6826,    6826,   12151,    2457,  -10240
678     },
679     {
680          6690,    2787,   -2787,   -6690,   -6690,   -2787,    2787,    6690,
681          -17203,   -7168,    7168,   17203,   17203,    7168,   -7168,  -17203,
682          24849,   10353,  -10353,  -24849,  -24849,  -10353,   10353,   24849,
683          -29627,  -12344,   12344,   29627,   29627,   12344,  -12344,  -29627,
684          29627,   12344,  -12344,  -29627,  -29627,  -12344,   12344,   29627,
685          -24849,  -10353,   10353,   24849,   24849,   10353,  -10353,  -24849,
686          17203,    7168,   -7168,  -17203,  -17203,   -7168,    7168,   17203,
687          -5734,   -2389,    2389,    5734,    5734,    2389,   -2389,   -5734
688     },
689     {
690          5120,   -1228,   -6075,   -3413,    3413,    6075,    1228,   -5120,
691          -15360,    3686,   18227,   10240,  -10240,  -18227,   -3686,   15360,
692          23040,   -5529,  -27340,  -15360,   15360,   27340,    5529,  -23040,
693          -27306,    6553,   32403,   18204,  -18204,  -32403,   -6553,   27306,
694          26453,   -6348,  -31391,  -17635,   17635,   31391,    6348,  -26453,
695          -22186,    5324,   26328,   14791,  -14791,  -26328,   -5324,   22186,
696          14506,   -3481,  -17214,   -9671,    9671,   17214,    3481,  -14506,
697          -5120,    1228,    6075,    3413,   -3413,   -6075,   -1228,    5120
698     },
699     {
700          9466,   -9466,   -9466,    9466,    9466,   -9466,   -9466,    9466,
701          -21845,   21845,   21845,  -21845,  -21845,   21845,   21845,  -21845,
702          21117,  -21117,  -21117,   21117,   21117,  -21117,  -21117,   21117,
703          -8738,    8738,    8738,   -8738,   -8738,    8738,    8738,   -8738,
704          -8738,    8738,    8738,   -8738,   -8738,    8738,    8738,   -8738,
705          21845,  -21845,  -21845,   21845,   21845,  -21845,  -21845,   21845,
706          -21117,   21117,   21117,  -21117,  -21117,   21117,   21117,  -21117,
707          9466,   -9466,   -9466,    9466,    9466,   -9466,   -9466,    9466
708     },
709     {
710          9671,  -17214,    3481,   14506,  -14506,   -3481,   17214,   -9671,
711          -17635,   31391,   -6348,  -26453,   26453,    6348,  -31391,   17635,
712          3982,   -7088,    1433,    5973,   -5973,   -1433,    7088,   -3982,
713          14791,  -26328,    5324,   22186,  -22186,   -5324,   26328,  -14791,
714          -14791,   26328,   -5324,  -22186,   22186,    5324,  -26328,   14791,
715          -3982,    7088,   -1433,   -5973,    5973,    1433,   -7088,    3982,
716          17635,  -31391,    6348,   26453,  -26453,   -6348,   31391,  -17635,
717          -9671,   17214,   -3481,  -14506,   14506,    3481,  -17214,    9671
718     },
719     {
720          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
721          -8760,   21026,  -21026,    8760,    8760,  -21026,   21026,   -8760,
722          -9159,   21981,  -21981,    9159,    9159,  -21981,   21981,   -9159,
723          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
724          8760,  -21026,   21026,   -8760,   -8760,   21026,  -21026,    8760,
725          -9159,   21981,  -21981,    9159,    9159,  -21981,   21981,   -9159,
726          -8760,   21026,  -21026,    8760,    8760,  -21026,   21026,   -8760,
727          9159,  -21981,   21981,   -9159,   -9159,   21981,  -21981,    9159
728     },
729     {
730          5324,  -14791,   22186,  -26328,   26328,  -22186,   14791,   -5324,
731          -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228,
732          -6553,   18204,  -27306,   32403,  -32403,   27306,  -18204,    6553,
733          -3686,   10240,  -15360,   18227,  -18227,   15360,  -10240,    3686,
734          3686,  -10240,   15360,  -18227,   18227,  -15360,   10240,   -3686,
735          6348,  -17635,   26453,  -31391,   31391,  -26453,   17635,   -6348,
736          1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
737          -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324
738     },
739     {
740          4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
741          -4505,   12515,  -18773,   22277,  -22277,   18773,  -12515,    4505,
742          -4710,   13084,  -19626,   23290,  -23290,   19626,  -13084,    4710,
743          4505,  -12515,   18773,  -22277,   22277,  -18773,   12515,   -4505,
744          4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710,
745          -4505,   12515,  -18773,   22277,  -22277,   18773,  -12515,    4505,
746          -4710,   13084,  -19626,   23290,  -23290,   19626,  -13084,    4710,
747          4710,  -13084,   19626,  -23290,   23290,  -19626,   13084,   -4710
748     },
749     {
750          6769,  -16247,   16247,   -6769,   -6769,   16247,  -16247,    6769,
751          -12344,   29627,  -29627,   12344,   12344,  -29627,   29627,  -12344,
752          2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
753          10353,  -24849,   24849,  -10353,  -10353,   24849,  -24849,   10353,
754          -10353,   24849,  -24849,   10353,   10353,  -24849,   24849,  -10353,
755          -2787,    6690,   -6690,    2787,    2787,   -6690,    6690,   -2787,
756          12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
757          -6769,   16247,  -16247,    6769,    6769,  -16247,   16247,   -6769
758     },
759     {
760          6826,  -12151,    2457,   10240,  -10240,   -2457,   12151,   -6826,
761          -16497,   29366,   -5939,  -24746,   24746,    5939,  -29366,   16497,
762          17066,  -30378,    6144,   25600,  -25600,   -6144,   30378,  -17066,
763          -7395,   13164,   -2662,  -11093,   11093,    2662,  -13164,    7395,
764          -6826,   12151,   -2457,  -10240,   10240,    2457,  -12151,    6826,
765          16497,  -29366,    5939,   24746,  -24746,   -5939,   29366,  -16497,
766          -17066,   30378,   -6144,  -25600,   25600,    6144,  -30378,   17066,
767          6826,  -12151,    2457,   10240,  -10240,   -2457,   12151,   -6826
768     },
769     {
770          5097,   -5097,   -5097,    5097,    5097,   -5097,   -5097,    5097,
771          -13107,   13107,   13107,  -13107,  -13107,   13107,   13107,  -13107,
772          18932,  -18932,  -18932,   18932,   18932,  -18932,  -18932,   18932,
773          -22573,   22573,   22573,  -22573,  -22573,   22573,   22573,  -22573,
774          23301,  -23301,  -23301,   23301,   23301,  -23301,  -23301,   23301,
775          -18932,   18932,   18932,  -18932,  -18932,   18932,   18932,  -18932,
776          13107,  -13107,  -13107,   13107,   13107,  -13107,  -13107,   13107,
777          -4369,    4369,    4369,   -4369,   -4369,    4369,    4369,   -4369
778     },
779     {
780          3413,   -6075,    1228,    5120,   -5120,   -1228,    6075,   -3413,
781          -9671,   17214,   -3481,  -14506,   14506,    3481,  -17214,    9671,
782          15360,  -27340,    5529,   23040,  -23040,   -5529,   27340,  -15360,
783          -18204,   32403,   -6553,  -27306,   27306,    6553,  -32403,   18204,
784          18204,  -32403,    6553,   27306,  -27306,   -6553,   32403,  -18204,
785          -15360,   27340,   -5529,  -23040,   23040,    5529,  -27340,   15360,
786          9671,  -17214,    3481,   14506,  -14506,   -3481,   17214,   -9671,
787          -3413,    6075,   -1228,   -5120,    5120,    1228,   -6075,    3413
788     },
789     {
790          4778,  -11468,   11468,   -4778,   -4778,   11468,  -11468,    4778,
791          -11548,   27716,  -27716,   11548,   11548,  -27716,   27716,  -11548,
792          11548,  -27716,   27716,  -11548,  -11548,   27716,  -27716,   11548,
793          -4778,   11468,  -11468,    4778,    4778,  -11468,   11468,   -4778,
794          -4778,   11468,  -11468,    4778,    4778,  -11468,   11468,   -4778,
795          11548,  -27716,   27716,  -11548,  -11548,   27716,  -27716,   11548,
796          -11548,   27716,  -27716,   11548,   11548,  -27716,   27716,  -11548,
797          5176,  -12424,   12424,   -5176,   -5176,   12424,  -12424,    5176
798     },
799     {
800          3481,   -9671,   14506,  -17214,   17214,  -14506,    9671,   -3481,
801          -6348,   17635,  -26453,   31391,  -31391,   26453,  -17635,    6348,
802          1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
803          5324,  -14791,   22186,  -26328,   26328,  -22186,   14791,   -5324,
804          -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324,
805          -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228,
806          6348,  -17635,   26453,  -31391,   31391,  -26453,   17635,   -6348,
807          -3481,    9671,  -14506,   17214,  -17214,   14506,   -9671,    3481
808     },
809     {
810          2457,   -6826,   10240,  -12151,   12151,  -10240,    6826,   -2457,
811          -5939,   16497,  -24746,   29366,  -29366,   24746,  -16497,    5939,
812          5939,  -16497,   24746,  -29366,   29366,  -24746,   16497,   -5939,
813          -2662,    7395,  -11093,   13164,  -13164,   11093,   -7395,    2662,
814          -2457,    6826,  -10240,   12151,  -12151,   10240,   -6826,    2457,
815          6144,  -17066,   25600,  -30378,   30378,  -25600,   17066,   -6144,
816          -6144,   17066,  -25600,   30378,  -30378,   25600,  -17066,    6144,
817          2662,   -7395,   11093,  -13164,   13164,  -11093,    7395,   -2662
818     },
819     {
820          2389,   -5734,    5734,   -2389,   -2389,    5734,   -5734,    2389,
821          -6769,   16247,  -16247,    6769,    6769,  -16247,   16247,   -6769,
822          10353,  -24849,   24849,  -10353,  -10353,   24849,  -24849,   10353,
823          -12344,   29627,  -29627,   12344,   12344,  -29627,   29627,  -12344,
824          12344,  -29627,   29627,  -12344,  -12344,   29627,  -29627,   12344,
825          -10752,   25804,  -25804,   10752,   10752,  -25804,   25804,  -10752,
826          7168,  -17203,   17203,   -7168,   -7168,   17203,  -17203,    7168,
827          -2389,    5734,   -5734,    2389,    2389,   -5734,    5734,   -2389
828     },
829     {
830          1228,   -3413,    5120,   -6075,    6075,   -5120,    3413,   -1228,
831          -3481,    9671,  -14506,   17214,  -17214,   14506,   -9671,    3481,
832          5324,  -14791,   22186,  -26328,   26328,  -22186,   14791,   -5324,
833          -6553,   18204,  -27306,   32403,  -32403,   27306,  -18204,    6553,
834          6553,  -18204,   27306,  -32403,   32403,  -27306,   18204,   -6553,
835          -5324,   14791,  -22186,   26328,  -26328,   22186,  -14791,    5324,
836          3481,   -9671,   14506,  -17214,   17214,  -14506,    9671,   -3481,
837          -1228,    3413,   -5120,    6075,   -6075,    5120,   -3413,    1228
838     }
839 };
840 // clang-format on