From http://www.jwz.org/xscreensaver/xscreensaver-5.18.tar.gz
[xscreensaver] / hacks / glx / chessmodels.c
1 /*
2  * models for the xss chess screensavers
3  * hacked from:
4  *
5  * glChess - A 3D chess interface
6  *
7  * Copyright (C) 2006  John-Paul Gignac <jjgignac@users.sf.net>
8  *
9  * Copyright (C) 2002  Robert  Ancell <bob27@users.sourceforge.net>
10  *                     Michael Duelli <duelli@users.sourceforge.net>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25  */
26
27 /* chessmodels.c: Contains the code for piece model creation */
28
29 #ifdef HAVE_CONFIG_H
30 # include "config.h"
31 #endif /* HAVE_CONFIG_H */
32
33 #include <math.h>
34 #include <stdlib.h>
35
36 #ifndef HAVE_COCOA
37 # include <GL/glx.h>
38 # include <GL/gl.h>
39 #endif
40
41 #ifdef HAVE_JWZGLES
42 # include "jwzgles.h"
43 #endif /* HAVE_JWZGLES */
44
45 #include "chessmodels.h"
46
47 /* End of Data */
48 #define ENDOFDATA 65535
49
50 /* Section headers */
51 #define SPIN 65534
52 #define VERTICES 65533
53 #define QUADS 65532
54 #define TRIANGLES 65531
55 #define POLARQUADSTRIP 65530
56 #define QUADSTRIP 65529
57
58 /* Special spin-related commands */
59 #define SEAM 65528
60 #define PATTERN 65527
61 #define STEPUP 65526
62 #define STEPDOWN 65525
63 #define SETBACKREF 65524
64 #define BACKREF 65523
65
66 static unsigned short classic_pawn_data[] = {
67   SPIN,16,
68   350,0,SEAM,350,200,SEAM,250,300,SEAM,250,400,SEAM,150,600,SEAM,100,880,
69   SEAM,180,880,SEAM,100,920,SEAM,200,1160,SEAM,100,1340,0,1340,
70   ENDOFDATA
71 };
72
73 static unsigned short classic_rook_data[] = {
74   SPIN,16,
75   380,0,SEAM,380,200,SEAM,260,500,SEAM,200,1020,SEAM,280,1020,SEAM,280,1360,SEAM,220,1360,SEAM,220,1300,0,1300,
76   ENDOFDATA
77 };
78
79 static unsigned short classic_knight_data[] = {
80   SPIN,16,
81   410,0,SEAM,410,200,SEAM,200,360,SEAM,200,480,260,580,
82
83   VERTICES,
84   260,580,260, -260,580,260, -260,580,-80, 260,580,-80, 80,1620,400,
85   100,1680,340, -100,1680,340, -80,1620,400, 100,1680,340, 100,1680,300,
86   -100,1680,300, -100,1680,340, 100,1680,300, 50,1680,160, -50,1680,160,
87   -100,1680,300, 50,1680,160, 100,1680,20, -100,1680,20, -50,1680,160,
88   100,1680,20, 100,1680,-20, -100,1680,-20, -100,1680,20, 100,1680,-20,
89   40,1680,-110, -40,1680,-110, -100,1680,-20, 40,1680,-110,
90   100,1680,-200, -100,1680,-200, -40,1680,-110, 100,1680,-200,
91   100,1680,-440, -100,1680,-440, -100,1680,-200, -100,1680,-440,
92   100,1680,-440, 100,1500,-440, -100,1500,-440, -100,1500,-440,
93   100,1500,-440, 55,1480,-280, -55,1480,-280, -100,1680,300, -50,1680,160,
94   -100,1400,130, -120,1380,240, -50,1680,160, -80,1680,20, -120,1380,20,
95   -100,1400,130, -83,1660,20, -80,1680,20, -100,1680,-20, -100,1660,-38,
96   -120,1380,20, -88,1620,20, -100,1620,-74, -120,1360,-20, -120,1360,-20,
97   -100,1620,-74, -100,1580,-110, -60,1400,-140, -100,1680,-200,
98   -55,1480,-280, -60,1400,-140, -100,1580,-110, -100,1680,-200,
99   -100,1680,-440, -100,1500,-440, -55,1480,-280, 100,1680,300,
100   120,1380,240, 100,1400,130, 50,1680,160, 50,1680,160, 100,1400,130,
101   120,1380,20, 80,1680,20, 83,1660,20, 100,1660,-38, 100,1680,-20,
102   80,1680,20, 120,1380,20, 120,1360,-20, 100,1620,-74, 88,1620,20,
103   120,1360,-20, 60,1400,-140, 100,1580,-110, 100,1620,-74, 100,1680,-200,
104   100,1580,-110, 60,1400,-140, 55,1480,-280, 100,1680,-200, 55,1480,-280,
105   100,1500,-440, 100,1680,-440, 88,1620,20, 100,1620,-74, 80,1640,-56,
106   61,1640,20, 61,1640,20, 80,1640,-56, 100,1660,-38, 83,1660,20,
107   -88,1620,20, -61,1640,20, -80,1640,-56, -100,1620,-74, -61,1640,20,
108   -83,1660,20, -100,1660,-38, -80,1640,-56, 35,1780,-80, 35,1780,-440,
109   -35,1780,-440, -35,1780,-80, 35,1780,-80, 35,1680,-80, 35,1680,-440,
110   35,1780,-440, -35,1780,-80, -35,1780,-440, -35,1680,-440, -35,1680,-80,
111   35,1780,-80, -35,1780,-80, -35,1680,-80, 35,1680,-80, 35,1780,-440,
112   35,1680,-440, -35,1680,-440, -35,1780,-440, -100,1400,130, -120,1380,20,
113   120,1380,20, 100,1400,130, -100,1400,130, 100,1400,130, 120,1380,240,
114   -120,1380,240, -260,580,-80, -55,1480,-280, 0,1500,-360, 0,780,-400,
115   260,580,-80, 0,780,-400, 0,1500,-360, 55,1480,-280, -50,1380,40,
116   -200,880,400, 200,880,400, 50,1380,40, -200,880,400, -260,580,260,
117   260,580,260, 200,880,400, -50,1380,40, -140,1220,-40, -260,580,260,
118   -200,880,400, -140,1220,-40, -114,1220,-222, -260,580,-80, -260,580,260,
119   -55,1480,-280, -114,1220,-222, -140,1220,-40, -60,1400,-140,
120   50,1380,40, 200,880,400, 260,580,260, 140,1220,-40, 140,1220,-40,
121   260,580,260, 260,580,-80, 114,1220,-222, 55,1480,-280, 60,1400,-140,
122   140,1220,-40, 114,1220,-222, 260,580,-80, 144,580,-260, 0,780,-400,
123   144,580,-260, -144,580,-260, 0,780,-400, -260,580,-80, 0,780,-400,
124   -144,580,-260, 0,1400,400, 80,1620,400, -80,1620,400, 0,1400,400,
125   -80,1620,400, -120,1380,240, -120,1380,240, -80,1620,400, -100,1680,340,
126   -120,1380,240, -100,1680,340, -100,1680,300, 0,1400,400, 120,1380,240,
127   80,1620,400, 120,1380,240, 100,1680,340, 80,1620,400, 120,1380,240,
128   100,1680,300, 100,1680,340, 0,1400,400, -120,1380,240, 120,1380,240,
129   -60,1400,-140, -140,1220,-40, -45,1380,-20, -45,1380,-20, -140,1220,-40,
130   -50,1380,40, 60,1400,-140, 45,1380,-20, 140,1220,-40, 45,1380,-20,
131   50,1380,40, 140,1220,-40, 60,1400,-140, 120,1360,-20, 45,1380,-20,
132   50,1380,40, 45,1380,-20, 120,1360,-20, 50,1380,40, 120,1360,-20,
133   120,1380,20, -60,1400,-140, -45,1380,-20, -120,1360,-20, -50,1380,40,
134   -120,1360,-20, -45,1380,-20, -50,1380,40, -120,1380,20, -120,1360,-20,
135   88,1620,20, 61,1640,20, 83,1660,20, 100,1620,-74, 100,1660,-38,
136   80,1640,-56, -88,1620,20, -83,1660,20, -61,1640,20, -100,1620,-74,
137   -80,1640,-56, -100,1660,-38, -40,1680,-110, -100,1680,-200,
138   -100,1580,-110, -100,1680,-20, -40,1680,-110, -100,1580,-110,
139   40,1680,-110, 100,1580,-110, 100,1680,-200, 100,1680,-20, 100,1580,-110,
140   40,1680,-110,
141
142   QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
143   20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
144   40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
145   60,61,62,63, 64,65,66,67, 68,69,70,71, 72,73,74,75, 76,77,78,79,
146   80,81,82,83, 84,85,86,87, 88,89,90,91, 92,93,94,95, 96,97,98,99,
147   100,101,102,103, 104,105,106,107, 108,109,110,111, 112,113,114,115,
148   116,117,118,119, 120,121,122,123, 124,125,126,127, 128,129,130,131,
149   132,133,134,135, 136,137,138,139, 140,141,142,143, 144,145,146,147,
150   148,149,150,151, 152,153,154,155, 156,157,158,159, 160,161,162,163,
151   164,165,166,167, 168,169,170,171, 172,173,174,175, 176,177,178,179,
152   180,181,182,183,
153
154   TRIANGLES, 184,185,186, 187,188,189, 190,191,192, 193,194,195,
155   196,197,198, 199,200,201, 202,203,204, 205,206,207, 208,209,210,
156   211,212,213, 214,215,216, 217,218,219, 220,221,222, 223,224,225,
157   226,227,228, 229,230,231, 232,233,234, 235,236,237, 238,239,240,
158   241,242,243, 244,245,246, 247,248,249, 250,251,252, 253,254,255,
159   256,257,258, 259,260,261, 262,263,264, 265,266,267, 268,269,270,
160
161   ENDOFDATA
162 };
163
164 static unsigned short classic_bishop_data[] = {
165   SPIN,16,
166   400,0,SEAM,400,200,SEAM,250,300,SEAM,250,400,SEAM,150,700,SEAM,120,940,
167   SEAM,250,940,SEAM,170,1100,SEAM,170,1220,SEAM,220,1320,SEAM,220,1480,
168   SEAM,100,1600,SEAM,80,1700,SEAM,120,1770,SEAM,80,1840,0,1840,
169   ENDOFDATA
170 };
171
172 static unsigned short classic_queen_data[] = {
173   SPIN,16,
174   480,0,SEAM,480,220,SEAM,340,400,SEAM,340,500,SEAM,180,800,SEAM,140,1180,
175   SEAM,290,1180,SEAM,180,1360,SEAM,180,1520,SEAM,200,1780,SEAM,270,1920,
176   SEAM,240,2000,SEAM,170,2000,SEAM,95,2080,SEAM,70,2080,SEAM,90,2140,
177   SEAM,70,2200,0,2200,
178   ENDOFDATA
179 };
180
181 static unsigned short classic_king_data[] = {
182   SPIN,16,
183   500,0,SEAM,500,200,SEAM,350,300,SEAM,350,460,SEAM,200,760,SEAM,140,1260,
184   SEAM,300,1260,SEAM,200,1460,SEAM,200,1560,SEAM,280,1910,SEAM,160,1970,
185   SEAM,160,2010,0,2010,
186
187   VERTICES, 
188   -30,2010,35, 30,2010,35, 30,2310,35, -30,2310,35, -90,2110,35,
189   -30,2110,35, -30,2210,35, -90,2210,35, 90,2110,35, 90,2210,35,
190   30,2210,35, 30,2110,35, 30,2010,-35, -30,2010,-35, -30,2310,-35,
191   30,2310,-35, -30,2110,-35, -90,2110,-35, -90,2210,-35, -30,2210,-35,
192   30,2110,-35, 30,2210,-35, 90,2210,-35, 90,2110,-35, -90,2110,35,
193   -90,2210,35, -90,2210,-35, -90,2110,-35, -30,2010,35, -30,2110,35,
194   -30,2110,-35, -30,2010,-35, -30,2210,30, -30,2310,30, -30,2310,-30,
195   -30,2210,-30, 90,2110,-35, 90,2210,-35, 90,2210,35, 90,2110,35,
196   30,2010,-35, 30,2110,-35, 30,2110,35, 30,2010,35, 30,2210,-35,
197   30,2310,-35, 30,2310,35, 30,2210,35, -90,2210,-35, -90,2210,35,
198   -30,2210,35, -30,2210,-35, 30,2210,-35, 30,2210,35, 90,2210,35,
199   90,2210,-35, -30,2310,-35, -30,2310,35, 30,2310,35, 30,2310,-35,
200
201   QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
202   20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
203   40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
204
205   ENDOFDATA
206 };
207
208 static unsigned short knight_data[] = {
209   VERTICES, SETBACKREF,0, 7910,8863,0, 7790,8863,1326, 7433,8863,2611,
210   6850,8863,3817, 6059,8863,4907, 5084,8863,5847, 3955,8863,6611,
211   2705,8863,7173, 1373,8863,7517, 0,8863,7633, -1373,8863,7517,
212   -2705,8863,7173, -3955,8863,6611, -5084,8863,5847, -6059,8863,4907,
213   -6850,8863,3817, -7433,8863,2611, -7790,8863,1326, -7910,8863,0,
214   -7790,8863,-1326, -7433,8863,-2611, -6850,8863,-3817,
215   -6059,8863,-4907, -5066,8863,-5896, -3955,8863,-6611,
216   -2705,8863,-7173, -1373,8863,-7517, 0,8863,-7633, 1373,8863,-7517,
217   2705,8863,-7173, 3955,8863,-6611, 5066,8863,-5896, 6059,8863,-4907,
218   6850,8863,-3817, 7433,8863,-2611, 7790,8863,-1326, -1183,11744,7939,
219   -1183,12003,7939, -1183,14019,6547, -1183,16307,5288,
220   -1183,16555,5281, -1183,20128,2191, -1134,20304,2131,
221   -1183,20516,2156, -1417,21874,1842, -1417,23109,2185,
222   -1417,23961,3121, -1417,24001,4252, 0,23917,5637, -1418,23893,5418,
223   -1151,23389,6664, -1151,23501,6906, -1151,23806,6987,
224   -1151,24102,6987, -1151,24209,7189, -1151,24371,7513,
225   -1151,24605,7715, -1151,24939,7674, -1313,25568,7149,
226   -1313,25695,7149, -1598,26707,7610, 0,26837,7841, 0,27354,8076,
227   -1598,27262,7839, -1598,27842,7723, 0,27919,7998, 0,28449,7606,
228   -1598,28309,7303, -1302,28414,6723, 0,28544,6980, 0,28540,6197,
229   -1187,28523,5990, -1304,28447,4204, -1158,28789,1627,
230   -561,28931,-1220, -357,29608,-1244, -357,30527,-1441,
231   -357,31249,-1837, -357,31511,-2627, -357,31511,-3484,
232   -357,31118,-4143, -357,30264,-4538, -436,29406,-5256, 0,29409,-5243,
233   -2207,29018,-6763, -914,28658,-6964, 0,26292,-7237, -1305,26324,-7143,
234   -806,23401,-6784, -812,20723,-6228, -796,16757,-6210,
235   -1559,24934,7435, -1566,24633,7460, -1531,24429,7334,
236   -1475,24293,7131, -1440,24203,7004, -1372,23935,7015,
237   -1364,23606,6868, -1389,23515,6705, -1687,28010,6952,
238   -1687,27926,7343, -1687,27629,7491, -1687,27324,7552,
239   -1687,27032,7432, -1687,26791,7148, -1642,27135,7165,
240   -1642,27254,7304, -1642,27397,7364, -1642,27546,7334,
241   -1642,27693,7261, -1642,27737,7088, -1611,10591,8159,
242   -888,9327,-8560, -4491,13292,1032, -3840,15084,786, -3412,17397,397,
243   -2937,20005,-35, -5108,11669,1240, -6344,10251,1395, -6345,10246,1248,
244   -5109,11664,1092, -2964,20022,-132, -3413,17393,250, -3841,15079,638,
245   -4491,13288,885, -3743,13207,-535, -3085,15092,-710, -2727,17642,-878,
246   -2569,20636,-797, -4348,11575,-324, -5584,10108,-169,
247   -5403,10079,-1732, -4167,11644,-1888, -2465,20842,-2651,
248   -2522,18130,-2392, -2905,15407,-2077, -3562,13227,-1951,
249   -3901,13568,-3294, -3243,15993,-3519, -2861,18863,-3735,
250   -2776,22447,-4309, -4486,11792,-3132, -5783,9930,-2931,
251   -5783,9930,-3054, -4486,11792,-3255, -2776,22438,-4430,
252   -2861,18863,-3858, -3243,15993,-3641, -3901,13568,-3417,
253   -6199,9466,4558, -5766,10642,5726, -5228,11829,6090, -4801,12891,6048,
254   -4155,14560,5246, -3546,16847,3719, -3334,17643,2937,
255   -2860,20062,1230, -4822,12054,7102, -5325,10909,7208,
256   -5732,9938,6026, -4026,14701,5522, -2852,20170,1447, -3319,17801,3175,
257   -3538,16955,3935, -4090,13256,1679, -2874,20073,676, -3706,15083,1464,
258   -3301,17348,1117, -5931,10206,1996, -4695,11624,1840,
259   -4445,11658,2844, -5681,10240,3000, -3074,17398,2202,
260   -3456,15117,2468, -3840,13290,2683, -4642,13358,4019,
261   -4257,15194,3908, -6017,10188,3746, -5237,11714,4039,
262   -5621,11218,5077, -5026,12862,5058, -5134,10861,-3154,
263   -4193,12680,-3336, -2832,20609,-4118, -3052,17428,-3750,
264   -3572,14780,-3529, -3579,14774,-3623, -3059,17422,-3843,
265   -2839,20596,-4211, -4200,12674,-3429, -5141,10855,-3248,
266   -3908,13562,-3510, -3250,15987,-3735, -2868,18857,-3952,
267   -4492,11786,-3348, -5789,9924,-3148, -4817,11321,-3298,
268   -5465,10389,-3198, -4054,13118,-3470, -4346,12230,-3389,
269   -2853,19681,-4056, -2825,21511,-4367, -3155,16705,-3789,
270   -2963,18140,-3897, -3744,14168,-3567, -3415,15381,-3679,
271   -845,13482,-6604, -945,10997,-7893, -981,11110,-7735,
272   -859,13469,-6526, -899,9307,-8439, -813,16486,-6146, -832,20681,-6100,
273   -826,23358,-6656, -882,10149,-8148, -913,12323,-7139,
274   -822,14910,-6353, -817,18235,-6210, -827,21937,-6382,
275   -846,21937,-6341, -841,14912,-6313, -931,12326,-7098,
276   -901,10152,-8107, -844,23359,-6615, -851,20681,-6059,
277   -831,16487,-6105, -919,9307,-8399, -869,13482,-6492, -999,11113,-7694,
278   -860,9726,-8255, -942,10578,-7958, -962,11715,-7413, -900,12896,-6796,
279   -863,14065,-6404, -818,15760,-6221, -828,17367,-6171,
280   -854,19800,-5994, -848,21309,-6200, -843,22566,-6482,
281   -3407,15409,-3785, -3736,14196,-3673, -2911,18365,-4048,
282   -3147,16733,-3895, -2726,21608,-4455, -2808,19905,-4191,
283   -4338,12259,-3495, -4046,13146,-3576, -5457,10418,-3304,
284   -4809,11349,-3404, -4484,11815,-3454, -2715,22288,-4534,
285   -2832,19035,-4066, -3242,16015,-3841, -3900,13590,-3616,
286   -5133,10883,-3354, -4171,12742,-3524, -2803,20773,-4339,
287   -3051,17450,-3949, -3571,14803,-3729, -4979,11072,-3368,
288   -5619,10185,-3279, -4119,12924,-3556, -4411,12037,-3475,
289   -2801,20363,-4269, -2721,21826,-4489, -3099,17092,-3922,
290   -2887,18618,-4038, -3653,14499,-3701, -3325,15712,-3813,
291   -3489,15106,-3757, -3818,13893,-3645, -3011,17758,-3971,
292   -3194,16374,-3868, -2755,21085,-4385, -2815,19494,-4139,
293   -4265,12481,-3515, -3973,13368,-3596, -5304,10595,-3318,
294   -4664,11477,-3407, -5441,10207,-3361, -5350,10338,-3375,
295   -5139,10672,-3428, -5058,10742,-3431, -4831,11101,-3457,
296   -4742,11228,-3470, -4516,11559,-3504, -4423,11693,-3518,
297   -4277,12079,-3558, -4232,12180,-3571, -4138,12522,-3597,
298   -4094,12603,-3609, -3979,12935,-3675, -3943,13043,-3671,
299   -3852,13383,-3699, -3813,13496,-3705, -3692,13947,-3767,
300   -3653,14073,-3790, -3506,14587,-3772, -3467,14685,-3777,
301   -3349,15192,-3888, -3308,15317,-3887, -3162,15800,-3957,
302   -3119,15954,-3961, -3009,16528,-3946, -3002,16637,-3937,
303   -2914,17260,-4014, -2909,17347,-4006, -2834,17893,-4049,
304   -2813,18060,-4060, -2760,18849,-4232, -2746,18968,-4242,
305   -850,22569,-6438, -855,21313,-6156, -861,19804,-5949,
306   -834,17371,-6127, -824,15765,-6176, -869,14070,-6360,
307   -906,12901,-6751, -968,11720,-7368, -948,10645,-7895, -865,9731,-8211,
308   -1006,11164,-7630, -875,13487,-6447, -926,9310,-8354,
309   -837,16490,-6061, -857,20684,-6015, -867,23379,-6515,
310   -907,10157,-8062, -937,12331,-7053, -847,14917,-6268,
311   -842,18236,-6111, -852,21941,-6297, -885,9891,-8156, -985,10905,-7724,
312   -947,11969,-7255, -885,13125,-6649, -858,14493,-6314,
313   -839,16049,-6111, -836,17735,-6083, -859,20244,-5982,
314   -891,21559,-6157, -848,22883,-6508, -851,22255,-6367,
315   -856,20999,-6085, -867,19042,-6000, -836,16930,-6094,
316   -835,15341,-6222, -880,13646,-6405, -916,12540,-6953,
317   -981,11337,-7564, -927,10370,-7988, -932,9518,-8285, -931,9583,-8174,
318   -863,9671,-8145, -892,9982,-8037, -903,10075,-7996, -952,10454,-7865,
319   -961,10550,-7832, -1008,10963,-7617, -1018,11105,-7567,
320   -996,11458,-7405, -992,11582,-7342, -972,12080,-7057,
321   -968,12210,-6984, -935,12620,-6792, -931,12759,-6714,
322   -914,13199,-6441, -910,13346,-6359, -915,13767,-6194,
323   -910,13941,-6175, -890,14633,-6107, -886,14783,-6091,
324   -864,15476,-6035, -859,15645,-6017, -870,16062,-5957,
325   -873,16231,-5936, -853,17048,-5965, -861,17185,-5974,
326   -879,17812,-5997, -885,17961,-5997, -851,18486,-6138,
327   -865,18526,-5933, -872,18761,-5875, -870,19337,-5971,
328   -864,19470,-5784, -937,19590,-5786, -833,19023,-6126,
329   -851,20344,-5894, -851,20576,-5912, -855,21086,-5973,
330   -854,21224,-6003, -871,21651,-6070, -852,21853,-6116,
331   -850,22332,-6224, -849,22490,-6259, -831,22924,-6338,
332   -834,23240,-6364, -2743,19661,-4287, -2740,19863,-4312,
333   -2723,20501,-4469, -2705,20711,-4503, -2661,21262,-4565,
334   -2658,21427,-4593, -2687,22088,-4631, -2695,22209,-4643,
335   -2774,23170,-4392, -2633,23103,-4527, -2681,22439,-4516,
336   -2656,22665,-4573, -2552,22727,-4653, -2534,23015,-4628,
337   -2607,23397,-4556, -2759,23681,-4398, -2740,24136,-4370,
338   -2610,24100,-4580, -2412,24481,-5089, -2671,24389,-4569,
339   -2397,24935,-5652, -2562,25022,-5528, -939,23708,-6566,
340   -1009,24359,-6776, -1095,24912,-6886, -1049,24117,-6493,
341   -990,23894,-6415, -2290,23837,-4814, -2312,23612,-4723,
342   -2183,24804,-5574, -2191,24632,-5391, -1156,24771,-6650,
343   -1154,24624,-6586, -1104,24526,-6656, -1281,9161,-8432,
344   -2524,9161,-8046, -3691,9161,-7572, -4745,9161,-6945,
345   -5662,9127,-6096, -3697,9192,-7581, -2531,9192,-8056,
346   -4753,9183,-6951, -5664,9161,-6101, -5664,9185,-6101,
347   -4753,9207,-6951, -2531,9216,-8055, -3697,9216,-7581,
348   -3684,9232,-7560, -2518,9232,-8034, -4740,9223,-6930,
349   -5651,9200,-6080, -2828,20259,1366, -2798,20256,1187, -2820,20237,692,
350   -2843,20292,-25, -2874,20473,735, -2975,20508,90, -2474,20772,-759,
351   -2660,20879,-691, -2471,21553,-1445, -2498,22175,-1940,
352   -2471,24346,-2830, -2556,22373,-1903, -2528,21595,-1351,
353   -2493,24314,-2936, -2576,22239,-2123, -2548,21461,-1571,
354   -2823,20635,1307, -2741,20503,1328, -1490,23972,5392,
355   -1489,24080,4226, -1489,24040,3095, -1489,23188,2159,
356   -1489,21953,1816, -2479,22156,182, -1515,23830,2117, -1605,24415,3131,
357   -1599,24460,4263, -1580,24357,5431, -1448,23885,6743,
358   -1252,24770,5442, -1271,24873,4274, -1277,24828,3142,
359   -1389,24618,2016, -1479,24733,1993, -1301,25010,3165,
360   -1295,25055,4297, -1391,24890,5460, -1512,25216,5507,
361   -1602,25353,4317, -1608,25308,3186, -1979,23458,-29, -1320,25312,1928,
362   -1495,25055,546, -2438,25790,-488, -1605,25585,5599, -1583,26793,6150,
363   -1850,26272,4298, -1578,27435,7117, -1658,27625,6884,
364   -1671,27398,6846, -1678,27176,6937, -1715,27784,6626,
365   -1744,27323,6551, -1753,26904,6776, -1884,28809,-1688,
366   -1555,28655,1620, -1658,28252,4204, -1581,28263,5997,
367   -1567,28312,6790, -1935,27827,4220, -1818,28249,1603,
368   -1570,27742,6195, -1532,27288,6120, -2038,27074,4245, -1418,28416,228,
369   -413,30264,-4539, -424,31094,-4152, -418,31478,-3497,
370   -410,31453,-2653, -410,31190,-1863, -410,30468,-1467,
371   -410,29550,-1270, -411,31041,-1902, -448,31253,-2696,
372   -449,31323,-3466, -425,31182,-3496, -411,31060,-2738,
373   -387,30899,-1932, -316,30806,-1957, -335,30952,-2766,
374   -353,31089,-3521, -322,31007,-3540, -303,30871,-2786,
375   -284,30725,-1976, -304,30630,-1993, -323,30776,-2802,
376   -342,30912,-3557, -396,30843,-3565, -378,30707,-2811,
377   -358,30561,-2001, -414,30477,-2013, -433,30623,-2822,
378   -452,30759,-3576, -474,30560,-3616, -456,30424,-2861,
379   -436,30278,-2052, -349,30194,-2077, -368,30340,-2886,
380   -386,30477,-3641, -309,30389,-3665, -291,30253,-2911,
381   -271,30107,-2102, -267,29996,-2124, -286,30142,-2933,
382   -305,30278,-3688, -376,30179,-3700, -357,30043,-2945,
383   -338,29897,-2136, -420,29789,-2150, -439,29935,-2959,
384   -458,30071,-3713, -500,29883,-3751, -463,29601,-2187,
385   -470,30974,-4049, -462,30153,-4391, -466,30563,-4220,
386   -410,30009,-1368, -725,29372,-3225, -677,29335,-5130,
387   -908,29205,-3300, -632,29533,-4803, -2587,28768,-3408,
388   -2730,28611,-3456, -2404,28568,-6916, -2413,28849,-6612,
389   -1904,26715,1801, -1394,25919,831, -2224,27270,-3994,
390   -2730,28438,-3011, -2587,28570,-2864, -2826,28152,-3163,
391   -2476,28668,-6523, -2476,28433,-6776, -2787,28338,-3507,
392   -2216,27658,-3972, -2207,27950,-5907, -2311,28216,-6128,
393   -2320,27876,-3971, -2311,28118,-6301, -2311,27845,-6252,
394   -2320,27703,-3749, -2320,27084,-3798, -2320,26986,-4070,
395   -2698,26705,-4014, -2557,26974,-3547, -2557,27739,-3485,
396   -2572,27738,-6362, -2436,28204,-6533, -2436,28421,-6303,
397   -2556,28092,-3822, -2431,28142,-6975, -2544,27863,-6726,
398   -2266,28229,-1686, -1939,28156,-1065, -2569,27943,-2270,
399   -2381,27545,-1682, -2799,27594,-3104, -2750,27866,-2738,
400   -2539,27578,-6309, -2720,26853,-3133, -2788,26461,-3776,
401   -1061,27543,-7078, -1780,27941,135, -1859,27747,-527, -1756,27784,691,
402   -1855,27001,736, -1950,26711,19, -1964,27006,-630, -2342,26955,-1898,
403   -2595,25515,-3113, -2147,27855,132, -2126,27722,601, -2213,27691,-428,
404   -2210,27061,639, -2290,26816,34, -2302,27065,-515, -2347,27680,100,
405   -2335,27602,376, -2386,27584,-229, -2385,27213,398, -2432,27069,42,
406   -2439,27215,-281, -2481,27452,103, -1786,24263,399, -2278,24851,-562,
407   -2372,25143,-1163, 7383,9172,0, 7270,9172,-1487, 6937,9172,-2929,
408   6393,9172,-4281, 1282,9172,-8433, 0,9172,-8563, 1301,9439,8159,
409   2371,9313,7844, 3857,9286,7355, 4477,9172,6559, 5704,9174,5179,
410   6393,9172,4281, 6937,9172,2929, 7270,9172,1487, -7270,9172,-1487,
411   -6937,9172,-2929, -6393,9172,-4281, -1282,9172,-8433, 0,9339,8274,
412   -1301,9439,8159, -2371,9313,7844, -3857,9286,7355, -4477,9172,6559,
413   -5704,9174,5179, -6393,9172,4281, -6937,9172,2929, -7270,9172,1487,
414   -796,9467,8260, 0,9503,8356, 0,9667,8438, -796,9666,8325,
415   -807,10584,8327, -7383,9172,0, 796,9467,8260, 796,9666,8325,
416   807,10584,8327, 0,10584,8457, 0,11744,8130, 1183,11744,7939,
417   1183,12003,7939, 0,12003,8130, 0,14019,6737, 1183,14019,6547,
418   1183,16307,5288, 0,16307,5479, 0,16555,5472, 1183,16555,5281,
419   1183,20128,2191, 0,20128,2382, 0,20304,2322, 1134,20304,2131,
420   1183,20516,2156, 0,20516,2346, 0,21898,2060, 1417,21874,1842,
421   1417,23109,2185, 0,23133,2404, 0,23985,3339, 1417,23961,3121,
422   1417,24001,4252, 0,24025,4470, 1418,23893,5418, 1151,23389,6664,
423   0,23394,6882, 0,23506,7125, 1151,23501,6906, 1151,23806,6987,
424   0,23811,7205, 0,24107,7205, 1151,24102,6987, 1151,24209,7189,
425   0,24213,7407, 0,24376,7731, 1151,24371,7513, 1151,24605,7715,
426   0,24610,7933, 0,24944,7892, 1151,24939,7674, 1313,25568,7149,
427   0,25562,7367, 0,25689,7367, 1313,25695,7149, 1598,26707,7610,
428   1598,27262,7839, 1598,27842,7723, 1598,28309,7303, 1302,28414,6723,
429   1187,28523,5990, 1304,28447,4204, 0,28469,4435, 0,28654,1893,
430   1158,28789,1627, 561,28931,-1220, 0,29310,-864, 0,29574,-1062,
431   357,29608,-1244, 357,30527,-1441, 0,30496,-1259, 0,31221,-1655,
432   357,31249,-1837, 357,31511,-2627, 0,31485,-2445, 0,31485,-3302,
433   357,31511,-3484, 357,31118,-4143, 0,31089,-3961, 0,30233,-4356,
434   357,30264,-4538, 436,29406,-5256, 0,29018,-6407, 2207,29018,-6763,
435   914,28658,-6964, 0,28472,-7040, 1305,26324,-7143, 806,23401,-6784,
436   0,23246,-6890, 0,20735,-6319, 812,20723,-6228, 796,16757,-6210,
437   0,17171,-6133, 1559,24934,7435, 1566,24633,7460, 1531,24429,7334,
438   1475,24293,7131, 1440,24203,7004, 1372,23935,7015, 1364,23606,6868,
439   1389,23515,6705, 1687,28010,6952, 1687,27926,7343, 1687,27629,7491,
440   1687,27324,7552, 1687,27032,7432, 1687,26791,7148, 1642,27135,7165,
441   1642,27254,7304, 1642,27397,7364, 1642,27546,7334, 1642,27693,7261,
442   1642,27737,7088, 1611,10591,8159, 888,9327,-8560, 4491,13292,1032,
443   3840,15084,786, 3412,17397,397, 2937,20005,-35, 5108,11669,1240,
444   6344,10251,1395, 6345,10246,1248, 5109,11664,1092, 2964,20022,-132,
445   3413,17393,250, 3841,15079,638, 4491,13288,885, 3743,13207,-535,
446   3085,15092,-710, 2727,17642,-878, 2569,20636,-797, 4348,11575,-324,
447   5584,10108,-169, 5403,10079,-1732, 4167,11644,-1888,
448   2465,20842,-2651, 2522,18130,-2392, 2905,15407,-2077,
449   3562,13227,-1951, 3901,13568,-3294, 3243,15993,-3519,
450   2861,18863,-3735, 2776,22447,-4309, 4486,11792,-3132, 5783,9930,-2931,
451   5783,9930,-3054, 4486,11792,-3255, 2776,22438,-4430, 2861,18863,-3858,
452   3243,15993,-3641, 3901,13568,-3417, 6199,9466,4558, 5766,10642,5726,
453   5228,11829,6090, 4801,12891,6048, 4155,14560,5246, 3546,16847,3719,
454   3334,17643,2937, 2860,20062,1230, 4822,12054,7102, 5325,10909,7208,
455   5732,9938,6026, 4026,14701,5522, 2852,20170,1447, 3319,17801,3175,
456   3538,16955,3935, 4090,13256,1679, 2874,20073,676, 3706,15083,1464,
457   3301,17348,1117, 5931,10206,1996, 4695,11624,1840, 4445,11658,2844,
458   5681,10240,3000, 3074,17398,2202, 3456,15117,2468, 3840,13290,2683,
459   4642,13358,4019, 4257,15194,3908, 6017,10188,3746, 5237,11714,4039,
460   5621,11218,5077, 5026,12862,5058, 5134,10861,-3154, 4193,12680,-3336,
461   2832,20609,-4118, 3052,17428,-3750, 3572,14780,-3529,
462   3579,14774,-3623, 3059,17422,-3843, 2839,20596,-4211,
463   4200,12674,-3429, 5141,10855,-3248, 3908,13562,-3510,
464   3250,15987,-3735, 2868,18857,-3952, 4492,11786,-3348, 5789,9924,-3148,
465   4817,11321,-3298, 5465,10389,-3198, 4054,13118,-3470,
466   4346,12230,-3389, 2853,19681,-4056, 2825,21511,-4367,
467   3155,16705,-3789, 2963,18140,-3897, 3744,14168,-3567,
468   3415,15381,-3679, 0,14037,-6616, 845,13482,-6604, 945,10997,-7893,
469   0,11066,-7866, 981,11110,-7735, 859,13469,-6526, 899,9307,-8439,
470   813,16486,-6146, 832,20681,-6100, 826,23358,-6656, 882,10149,-8148,
471   913,12323,-7139, 822,14910,-6353, 817,18235,-6210, 827,21937,-6382,
472   846,21937,-6341, 841,14912,-6313, 931,12326,-7098, 901,10152,-8107,
473   844,23359,-6615, 851,20681,-6059, 831,16487,-6105, 919,9307,-8399,
474   869,13482,-6492, 999,11113,-7694, 860,9726,-8255, 942,10578,-7958,
475   962,11715,-7413, 900,12896,-6796, 863,14065,-6404, 818,15760,-6221,
476   828,17367,-6171, 854,19800,-5994, 848,21309,-6200, 843,22566,-6482,
477   3407,15409,-3785, 3736,14196,-3673, 2911,18365,-4048,
478   3147,16733,-3895, 2726,21608,-4455, 2808,19905,-4191,
479   4338,12259,-3495, 4046,13146,-3576, 5457,10418,-3304,
480   4809,11349,-3404, 4484,11815,-3454, 2715,22288,-4534,
481   2832,19035,-4066, 3242,16015,-3841, 3900,13590,-3616,
482   5133,10883,-3354, 4171,12742,-3524, 2803,20773,-4339,
483   3051,17450,-3949, 3571,14803,-3729, 4979,11072,-3368,
484   5619,10185,-3279, 4119,12924,-3556, 4411,12037,-3475,
485   2801,20363,-4269, 2721,21826,-4489, 3099,17092,-3922,
486   2887,18618,-4038, 3653,14499,-3701, 3325,15712,-3813,
487   3489,15106,-3757, 3818,13893,-3645, 3011,17758,-3971,
488   3194,16374,-3868, 2755,21085,-4385, 2815,19494,-4139,
489   4265,12481,-3515, 3973,13368,-3596, 5304,10595,-3318,
490   4664,11477,-3407, 5441,10207,-3361, 5350,10338,-3375,
491   5139,10672,-3428, 5058,10742,-3431, 4831,11101,-3457,
492   4742,11228,-3470, 4516,11559,-3504, 4423,11693,-3518,
493   4277,12079,-3558, 4232,12180,-3571, 4138,12522,-3597,
494   4094,12603,-3609, 3979,12935,-3675, 3943,13043,-3671,
495   3852,13383,-3699, 3813,13496,-3705, 3692,13947,-3767,
496   3653,14073,-3790, 3506,14587,-3772, 3467,14685,-3777,
497   3349,15192,-3888, 3308,15317,-3887, 3162,15800,-3957,
498   3119,15954,-3961, 3009,16528,-3946, 3002,16637,-3937,
499   2914,17260,-4014, 2909,17347,-4006, 2834,17893,-4049,
500   2813,18060,-4060, 2760,18849,-4232, 2746,18968,-4242, 850,22569,-6438,
501   855,21313,-6156, 860,19804,-5949, 834,17371,-6127, 824,15765,-6176,
502   869,14070,-6360, 906,12901,-6751, 968,11720,-7368, 948,10645,-7895,
503   865,9731,-8211, 1006,11164,-7630, 875,13487,-6447, 926,9310,-8354,
504   837,16490,-6061, 857,20684,-6015, 867,23379,-6515, 907,10157,-8062,
505   937,12331,-7053, 847,14917,-6268, 842,18236,-6111, 852,21941,-6297,
506   885,9891,-8156, 985,10905,-7724, 947,11969,-7255, 885,13125,-6649,
507   858,14493,-6314, 839,16049,-6111, 836,17735,-6083, 859,20244,-5982,
508   891,21559,-6157, 848,22883,-6508, 851,22255,-6367, 856,20999,-6085,
509   867,19042,-6000, 836,16930,-6094, 835,15341,-6222, 880,13646,-6405,
510   916,12540,-6953, 981,11337,-7564, 927,10370,-7988, 932,9518,-8285,
511   931,9583,-8174, 863,9671,-8145, 892,9982,-8037, 903,10075,-7996,
512   952,10454,-7865, 961,10550,-7832, 1008,10963,-7617, 1018,11105,-7567,
513   996,11458,-7405, 992,11582,-7342, 972,12080,-7057, 968,12210,-6984,
514   935,12620,-6792, 931,12759,-6714, 914,13199,-6441, 910,13346,-6359,
515   915,13767,-6194, 910,13941,-6175, 890,14633,-6107, 886,14783,-6091,
516   864,15476,-6035, 859,15645,-6017, 870,16062,-5957, 873,16231,-5936,
517   853,17048,-5965, 861,17185,-5974, 879,17812,-5997, 885,17961,-5997,
518   851,18486,-6138, 865,18526,-5933, 872,18761,-5875, 870,19337,-5971,
519   864,19470,-5784, 937,19590,-5786, 833,19023,-6126, 851,20344,-5894,
520   851,20576,-5912, 855,21086,-5973, 854,21224,-6003, 871,21651,-6070,
521   852,21853,-6116, 850,22332,-6224, 849,22490,-6259, 831,22924,-6338,
522   834,23240,-6364, 2743,19661,-4287, 2740,19863,-4312, 2723,20501,-4469,
523   2705,20711,-4503, 2661,21262,-4565, 2658,21427,-4593,
524   2687,22088,-4631, 2695,22209,-4643, 2774,23170,-4392,
525   2633,23103,-4527, 2681,22439,-4516, 2656,22665,-4573,
526   2552,22727,-4653, 2534,23015,-4628, 2607,23397,-4556,
527   2759,23681,-4398, 2740,24136,-4370, 2610,24100,-4580,
528   2412,24481,-5089, 2671,24389,-4569, 2397,24935,-5652,
529   2562,25022,-5528, 939,23708,-6566, 1009,24359,-6776, 1095,24912,-6886,
530   1049,24117,-6493, 990,23894,-6415, 2290,23837,-4814, 2312,23612,-4723,
531   2183,24804,-5574, 2191,24632,-5391, 1156,24771,-6650,
532   1154,24624,-6586, 1104,24526,-6656, 0,9161,-8562, 1281,9161,-8432,
533   2524,9161,-8046, 3691,9161,-7572, 4745,9161,-6945, 5662,9127,-6096,
534   3697,9192,-7581, 2531,9192,-8056, 4753,9183,-6951, 5664,9161,-6101,
535   5664,9185,-6101, 4753,9207,-6951, 2531,9216,-8055, 3697,9216,-7581,
536   3684,9232,-7560, 2518,9232,-8034, 4740,9223,-6930, 5651,9200,-6080,
537   2828,20259,1366, 2798,20256,1187, 2820,20237,692, 2843,20292,-25,
538   2874,20473,735, 2975,20508,90, 2474,20772,-759, 2660,20879,-691,
539   2471,21553,-1445, 2498,22175,-1940, 2471,24346,-2830,
540   2556,22373,-1903, 2528,21595,-1351, 2493,24314,-2936,
541   2576,22239,-2123, 2548,21461,-1571, 2823,20635,1307, 2741,20503,1328,
542   1490,23972,5392, 1489,24080,4226, 1489,24040,3095, 1489,23188,2159,
543   1489,21953,1816, 2479,22156,182, 1515,23830,2117, 1605,24415,3131,
544   1599,24460,4263, 1580,24357,5431, 1448,23885,6743, 1252,24770,5442,
545   1271,24873,4274, 1277,24828,3142, 1389,24618,2016, 1479,24733,1993,
546   1301,25010,3165, 1295,25055,4297, 1391,24890,5460, 1512,25216,5507,
547   1602,25353,4317, 1608,25308,3186, 1979,23458,-29, 1320,25312,1928,
548   1495,25055,546, 2438,25790,-488, 1605,25585,5599, 1583,26793,6150,
549   1850,26272,4298, 1578,27435,7117, 1658,27625,6884, 1671,27398,6846,
550   1678,27176,6937, 1715,27784,6626, 1744,27323,6551, 1753,26904,6776,
551   1884,28809,-1688, 1555,28655,1620, 1658,28252,4204, 1581,28263,5997,
552   1567,28312,6790, 1935,27827,4220, 1818,28249,1603, 1570,27742,6195,
553   1532,27288,6120, 2038,27074,4245, 1418,28416,228, 413,30264,-4539,
554   424,31094,-4152, 418,31478,-3497, 410,31453,-2653, 410,31190,-1863,
555   410,30468,-1467, 410,29550,-1270, 411,31041,-1902, 448,31253,-2696,
556   449,31323,-3466, 425,31182,-3496, 411,31060,-2738, 387,30899,-1932,
557   316,30806,-1957, 335,30952,-2766, 353,31089,-3521, 322,31007,-3540,
558   303,30871,-2786, 284,30725,-1976, 304,30630,-1993, 323,30776,-2802,
559   342,30912,-3557, 396,30843,-3565, 378,30707,-2811, 358,30561,-2001,
560   414,30477,-2013, 433,30623,-2822, 452,30759,-3576, 474,30560,-3616,
561   456,30424,-2861, 436,30278,-2052, 349,30194,-2077, 368,30340,-2886,
562   386,30477,-3641, 309,30389,-3665, 291,30253,-2911, 271,30107,-2102,
563   267,29996,-2124, 286,30142,-2933, 305,30278,-3688, 376,30179,-3700,
564   357,30043,-2945, 338,29897,-2136, 420,29789,-2150, 439,29935,-2959,
565   458,30071,-3713, 500,29883,-3751, 463,29601,-2187, 470,30974,-4049,
566   462,30153,-4391, 466,30563,-4220, 410,30009,-1368, 725,29372,-3225,
567   677,29335,-5130, 908,29205,-3300, 632,29533,-4803, 2587,28768,-3408,
568   2730,28611,-3456, 2404,28568,-6916, 2413,28849,-6612,
569   1904,26715,1801, 1394,25919,831, 2224,27270,-3994, 2730,28438,-3011,
570   2587,28570,-2864, 2826,28152,-3163, 2476,28668,-6523,
571   2476,28433,-6776, 2787,28338,-3507, 2216,27658,-3972,
572   2207,27950,-5907, 2311,28216,-6128, 2320,27876,-3971,
573   2311,28118,-6301, 2311,27845,-6252, 2320,27703,-3749,
574   2320,27084,-3798, 2320,26986,-4070, 2698,26705,-4014,
575   2557,26974,-3547, 2557,27739,-3485, 2572,27738,-6362,
576   2436,28204,-6533, 2436,28421,-6303, 2556,28092,-3822,
577   2431,28142,-6975, 2544,27863,-6726, 2266,28229,-1686,
578   1939,28156,-1065, 2569,27943,-2270, 2381,27545,-1682,
579   2799,27594,-3104, 2750,27866,-2738, 2539,27578,-6309,
580   2720,26853,-3133, 2788,26461,-3776, 1061,27543,-7078, 1780,27941,135,
581   1859,27747,-527, 1756,27784,691, 1855,27001,736, 1950,26711,19,
582   1964,27006,-630, 2342,26955,-1898, 2595,25515,-3113, 2147,27855,132,
583   2126,27722,601, 2213,27691,-428, 2210,27061,639, 2290,26816,34,
584   2302,27065,-515, 2347,27680,100, 2335,27602,376, 2386,27584,-229,
585   2385,27213,398, 2432,27069,42, 2439,27215,-281, 2481,27452,103,
586   1786,24263,399, 2278,24851,-562, 2372,25143,-1163, -2567,23141,-2607,
587   -2513,23156,-2494, 2513,23156,-2494, 2567,23141,-2607,
588
589   TRIANGLES, 657,656,159, 100,506,99, 1003,900,995, 1048,1009,901,
590   1051,901,1009, 1070,1073,1071, 1070,803,808, 1071,1077,1070,
591   1072,1006,1073, 1072,808,915, 1073,808,1072, 1077,1071,1076,
592   1078,1283,1127, 1081,1078,1079, 1081,1079,1080, 1083,1082,1086,
593   1083,747,1274, 1084,888,1085, 1085,878,1086, 1085,1086,1095,
594   1086,747,1083, 1093,1095,1086, 1094,1095,1093, 658,657,149,
595   1101,637,32, 1103,638,1108, 1105,637,1101, 1106,637,1105,
596   1108,638,1111, 111,36,158, 111,653,665, 111,665,36, 1110,858,1112,
597   1111,988,1110, 1111,638,891, 1111,891,988, 1112,858,1113,
598   1113,637,1106, 1117,779,784, 112,214,207, 112,651,210, 1124,1297,1154,
599   1125,1123,1128, 1125,1302,1154, 1127,1077,1078, 1129,791,796,
600   1130,1118,1137, 1136,1130,1137, 1137,1118,1119, 1137,1119,1121,
601   1137,1121,1126, 1142,758,759, 1142,759,760, 1142,760,761,
602   1147,1146,1154, 1150,755,756, 1150,756,757, 1154,1302,1124,
603   1155,1147,1154, 1155,1297,1156, 1155,1154,1297, 1156,1240,1155,
604   1156,1298,1157, 1157,1240,1156, 1157,1299,1273, 1157,1282,1281,
605   1158,1151,1152, 1161,768,1164, 1162,773,1161, 1162,1161,1163,
606   1163,1161,1164, 1165,1172,762, 1168,726,1178, 1168,1267,1266,
607   1169,1178,725, 1171,1172,1165, 1171,720,1172, 1171,1165,1175,
608   1178,1169,1174, 1178,1174,1278, 1179,1229,1228, 118,660,168,
609   1180,1229,1179, 1185,726,1226, 1186,1183,1184, 1186,1184,1191,
610   119,660,118, 1191,1184,1192, 1192,1184,1197, 1197,1184,1198,
611   1198,1184,1203, 1203,1184,1204, 121,116,451, 1210,1209,1230,
612   1215,1210,1230, 1216,1215,1230, 1221,1216,1230, 1222,1185,1226,
613   1222,1221,1230, 1223,1222,1226, 1224,1223,1225, 1225,1223,1226,
614   1226,726,1231, 1227,1188,1189, 1227,1189,1194, 1227,1194,1195,
615   1227,1195,1200, 1227,1200,1201, 1227,1201,1206, 1228,1224,1225,
616   1228,1225,1234, 1229,1207,1212, 1229,1212,1213, 1229,1213,1218,
617   1229,1218,1219, 1229,1219,1224, 1229,1180,1227, 1229,1224,1228,
618   1230,729,1185, 1230,1185,1222, 1231,1225,1226, 1232,1179,1234,
619   1233,744,1232, 1234,1179,1228, 1234,1225,1231, 1235,744,1233,
620   1237,744,1238, 1239,1155,1240, 1240,1157,1239, 1243,1168,1266,
621   1248,1241,1249, 1250,1249,1252, 1252,1249,1253, 1254,1248,1251,
622   1256,1241,1255, 1259,1244,1270, 1264,745,1237, 1265,1260,1272,
623   1267,1168,1178, 1267,1178,1277, 1269,1282,1270, 1270,1282,1273,
624   1271,1268,1269, 1271,1269,1270, 1273,1283,1274, 1274,1078,1081,
625   1274,1081,1083, 1274,747,1275, 1275,745,1264, 1275,1264,1265,
626   1275,1265,1272, 1275,1272,1274, 1276,1178,1278, 1277,1178,1276,
627   1280,1157,1281, 1281,1269,1277, 1282,1157,1273, 1282,1269,1281,
628   1283,1078,1274, 1292,1290,1296, 1295,1292,1296, 1296,1290,1291,
629   1296,1291,1293, 1296,1293,1294, 1296,1294,1295, 1297,1298,1156,
630   1297,1124,1298, 1298,1124,1299, 1299,1124,1273, 1299,1157,1298,
631   660,659,168, 133,128,463, 137,182,141, 138,185,137, 139,184,138,
632   140,183,139, 141,181,142, 141,182,144, 142,181,143, 143,649,142,
633   143,197,195, 144,196,181, 144,199,194, 145,183,140, 145,201,183,
634   145,140,405, 146,184,139, 146,139,183, 146,203,184, 147,185,138,
635   147,138,184, 147,205,185, 148,198,182, 148,137,185, 149,657,159,
636   150,149,159, 151,150,157, 152,151,157, 153,152,157, 157,150,158,
637   157,38,160, 157,37,38, 158,150,159, 160,153,157, 160,39,163,
638   160,38,39, 162,41,161, 163,39,40, 168,659,171, 172,155,156,
639   176,153,154, 176,154,155, 177,658,149, 179,149,150, 179,150,151,
640   180,152,153, 181,197,143, 181,141,144, 181,196,190, 182,199,144,
641   182,137,148, 182,198,189, 183,200,146, 184,202,147, 185,204,148,
642   186,204,185, 186,267,204, 186,185,205, 187,202,184, 187,265,202,
643   187,184,203, 188,200,183, 188,263,200, 188,183,201, 189,275,199,
644   189,261,255, 190,277,197, 190,259,254, 191,276,198, 191,148,204,
645   192,205,147, 192,147,202, 192,268,205, 193,203,146, 193,146,200,
646   193,266,203, 194,278,196, 194,262,249, 196,259,190, 196,144,194,
647   196,278,248, 197,181,190, 197,260,195, 197,277,247, 198,261,189,
648   198,148,191, 198,276,246, 199,182,189, 199,262,194, 199,275,245,
649   200,274,193, 201,273,188, 202,272,192, 203,271,187, 204,270,191,
650   205,269,186, 206,215,209, 206,216,90, 207,215,206, 207,214,208,
651   208,231,215, 208,230,228, 209,233,216, 209,232,227, 210,229,214,
652   210,651,226, 211,235,217, 211,234,225, 212,237,218, 212,236,224,
653   212,386,236, 213,238,223, 213,421,88, 214,230,208, 214,112,210,
654   214,229,222, 215,207,208, 215,232,209, 215,231,221, 216,206,209,
655   216,234,211, 216,233,220, 217,90,211, 217,386,212, 218,89,212,
656   218,238,213, 218,237,219, 219,342,238, 219,340,331, 220,346,234,
657   220,336,329, 221,348,232, 221,334,328, 222,350,230, 222,332,327,
658   223,341,326, 224,343,237, 224,339,325, 225,345,235, 225,337,324,
659   226,351,229, 226,651,445, 227,347,233, 227,335,322, 228,349,231,
660   228,333,321, 229,332,222, 229,210,226, 229,351,320, 230,214,222,
661   230,333,228, 230,350,319, 231,334,221, 231,208,228, 231,349,318,
662   232,215,221, 232,335,227, 232,348,317, 233,336,220, 233,209,227,
663   233,347,316, 234,216,220, 234,337,225, 234,346,315, 235,211,225,
664   235,345,314, 236,339,224, 236,383,313, 236,344,383, 237,340,219,
665   237,212,224, 237,343,312, 238,218,219, 238,341,223, 238,342,311,
666   239,269,205, 239,205,268, 240,270,204, 240,204,267, 241,271,203,
667   241,203,266, 242,272,202, 242,202,265, 243,273,201, 243,201,264,
668   244,274,200, 244,200,263, 250,145,407, 251,266,193, 251,193,274,
669   252,268,192, 252,192,272, 253,191,270, 256,263,188, 256,188,273,
670   257,265,187, 257,187,271, 258,267,186, 258,186,269, 259,196,248,
671   22,650,435, 260,197,247, 261,198,246, 262,199,245, 21,650,22,
672   275,189,255, 276,191,253, 277,190,254, 278,194,249, 323,226,445,
673   330,217,235, 330,235,338, 332,229,320, 333,230,319, 334,231,318,
674   335,232,317, 336,233,316, 337,234,315, 338,235,314, 339,236,313,
675   664,653,661, 340,237,312, 341,238,311, 342,219,331, 343,224,325,
676   344,236,386, 345,225,324, 346,220,329, 347,227,322, 348,221,328,
677   349,228,321, 665,653,664, 350,222,327, 351,226,323, 380,217,330,
678   405,408,145, 405,412,406, 406,408,405, 407,145,408, 408,341,407,
679   411,406,412, 413,412,461, 414,413,416, 415,414,416, 416,413,608,
680   418,87,421, 418,416,608, 419,223,326, 420,213,223, 420,223,419,
681   421,417,418, 421,213,420, 421,430,428, 421,87,88, 428,430,429,
682   430,421,420, 435,650,439, 439,650,440, 440,650,447, 442,651,437,
683   444,195,323, 444,323,445, 445,651,442, 446,195,444, 447,650,195,
684   447,195,446, 453,452,471, 455,453,471, 460,455,471, 461,617,413,
685   462,457,459, 465,43,44, 471,452,464, 471,464,470, 486,485,492,
686   488,458,1301, 488,631,458, 488,1301,459, 488,480,481, 488,481,489,
687   489,574,490, 490,631,489, 490,574,491, 490,632,631, 491,632,490,
688   495,105,106, 495,106,107, 495,107,108, 495,108,109, 495,109,110,
689   495,110,496, 497,495,496, 498,105,495, 498,495,497, 499,506,505,
690   505,68,71, 506,68,505, 506,67,68, 508,503,512, 509,499,505,
691   512,74,502, 512,502,601, 513,563,514, 518,517,520, 518,564,76,
692   519,75,564, 519,74,75, 523,522,561, 525,518,520, 526,518,525,
693   528,523,561, 529,528,561, 531,518,526, 532,518,531, 534,529,561,
694   535,534,561, 537,518,532, 538,518,537, 540,535,561, 546,541,563,
695   547,546,563, 552,547,563, 553,552,563, 556,519,564, 558,553,563,
696   559,557,558, 559,558,562, 560,74,519, 560,519,556, 560,556,557,
697   560,557,559, 560,559,565, 561,514,563, 562,563,513, 562,558,563,
698   562,513,568, 564,543,544, 564,544,549, 564,549,550, 564,550,555,
699   564,555,556, 565,74,560, 565,559,568, 566,84,567, 567,84,569,
700   568,559,562, 568,513,566, 571,85,598, 571,84,85, 572,84,571,
701   573,491,574, 574,489,573, 583,575,582, 585,582,588, 586,583,584,
702   587,583,586, 589,575,590, 598,85,609, 599,598,609, 653,111,654,
703   600,601,502, 600,502,577, 603,602,605, 604,578,593, 604,616,603,
704   604,603,605, 606,594,599, 606,599,609, 607,633,491, 607,616,604,
705   607,491,616, 607,458,633, 608,87,418, 608,617,607, 608,606,609,
706   608,413,617, 609,87,608, 609,86,87, 610,512,611, 611,512,601,
707   611,603,615, 612,508,512, 612,512,610, 615,616,491, 615,491,614,
708   615,603,616, 625,624,630, 627,625,630, 628,627,630, 629,628,630,
709   630,624,626, 630,626,629, 631,488,489, 632,458,631, 632,491,633,
710   633,458,632, 639,651,112, 641,774,640, 32,637,33, 667,640,668,
711   668,640,669, 669,640,774, 67,506,100, 672,669,774, 676,673,820,
712   677,676,823, 680,677,826, 688,685,1131, 712,711,754, 720,719,1172,
713   721,720,1171, 725,1178,726, 729,726,1185, 729,1230,730, 73,512,503,
714   730,1230,1184, 74,512,73, 743,82,83, 745,744,1237, 745,743,744,
715   745,1275,746, 746,85,743, 746,743,745, 746,609,85, 746,1275,86,
716   747,86,1275, 748,747,1086, 748,883,751, 748,1086,878, 751,882,752,
717   752,881,870, 76,564,75, 762,1172,763, 763,1172,719, 769,768,1161,
718   770,769,1161, 771,770,1161, 772,771,1161, 773,772,1161, 774,641,642,
719   775,638,639, 781,647,782, 655,654,111, 800,848,801, 801,847,802,
720   801,848,810, 802,846,803, 802,847,809, 803,846,808, 804,845,800,
721   805,844,804, 805,636,806, 806,844,805, 806,860,844, 807,845,804,
722   807,804,844, 807,862,845, 808,1073,1070, 809,863,846, 809,866,856,
723   810,865,847, 810,868,855, 811,800,845, 811,867,848, 812,644,645,
724   812,645,840, 813,812,842, 814,813,842, 816,815,843, 817,816,839,
725   818,817,839, 819,818,835, 820,813,814, 820,814,815, 820,815,816,
726   820,816,823, 821,672,774, 821,813,820, 822,642,643, 822,643,644,
727   822,644,812, 822,812,813, 822,813,821, 823,676,820, 824,681,825,
728   826,677,823, 83,742,743, 831,646,647, 831,647,781, 834,646,831,
729   844,859,807, 845,861,811, 846,864,808, 846,802,809, 846,863,851,
730   847,866,809, 847,801,810, 847,865,850, 848,868,810, 848,800,811,
731   848,867,849, 849,934,868, 849,932,923, 85,84,743, 850,936,866,
732   850,930,922, 851,938,864, 851,928,921, 852,861,845, 852,926,861,
733   852,845,862, 853,859,844, 853,924,859, 853,844,860, 854,811,861,
734   854,935,867, 855,937,865, 855,933,917, 856,939,863, 856,931,916,
735   857,862,807, 857,807,859, 857,927,862, 858,637,1113, 858,860,806,
736   858,925,860, 859,943,857, 86,609,746, 860,942,853, 861,941,854,
737   862,940,852, 863,928,851, 863,809,856, 863,939,909, 864,846,851,
738   864,938,908, 865,930,850, 865,810,855, 865,937,907, 866,847,850,
739   866,931,856, 866,936,906, 867,932,849, 867,811,854, 867,935,905,
740   868,848,849, 868,933,855, 868,934,904, 870,880,871, 871,879,775,
741   873,879,871, 873,895,879, 873,871,880, 874,880,870, 874,897,880,
742   874,870,881, 875,638,775, 875,775,879, 876,881,752, 876,899,881,
743   876,752,882, 877,882,751, 877,1051,882, 877,751,883, 878,883,748,
744   878,903,883, 879,894,875, 88,218,213, 880,896,873, 881,898,874,
745   882,900,876, 883,902,877, 884,902,883, 884,1005,902, 884,883,903,
746   885,898,881, 885,1001,898, 885,881,899, 886,896,880, 886,999,896,
747   886,880,897, 887,894,879, 887,997,894, 887,879,895, 888,878,1085,
748   888,903,878, 888,1006,903, 889,901,877, 889,1004,901, 889,877,902,
749   89,217,212, 89,218,88, 890,899,876, 890,1002,899, 890,876,900,
750   891,638,875, 891,875,894, 892,897,874, 892,1000,897, 892,874,898,
751   893,895,873, 893,998,895, 893,873,896, 894,1016,891, 895,1015,887,
752   896,1014,893, 897,1013,886, 898,1012,892, 899,1011,885, 656,655,159,
753   90,216,211, 90,217,89, 900,1010,890, 900,882,995, 901,1051,877,
754   902,1008,889, 903,1007,884, 91,57,58, 910,940,862, 910,862,927,
755   911,941,861, 911,861,926, 912,942,860, 912,860,925, 913,943,859,
756   913,859,924, 914,927,857, 914,857,943, 918,854,941, 919,924,853,
757   919,853,942, 920,926,852, 920,852,940, 928,863,909, 929,864,908,
758   93,92,484, 930,865,907, 931,866,906, 932,867,905, 933,868,904,
759   934,849,923, 935,854,918, 936,850,922, 937,855,917, 938,851,921,
760   939,856,916, 94,93,484, 96,95,476, 97,96,476, 976,903,1006,
761   976,1007,903, 977,902,1005, 977,1008,902, 978,901,1004, 978,1048,901,
762   979,900,1003, 979,1010,900, 98,97,476, 980,899,1002, 980,1011,899,
763   981,898,1001, 981,1012,898, 982,897,1000, 982,1013,897, 983,1014,896,
764   983,896,999, 984,1015,895, 984,895,998, 985,1016,894, 985,894,997,
765   986,893,1014, 986,998,893, 987,892,1012, 987,1000,892, 988,891,1016,
766   988,858,1110, 989,890,1010, 989,1002,890, 99,506,499, 990,889,1008,
767   990,1004,889, 991,888,1084, 991,1006,888, 992,887,1015, 992,997,887,
768   993,886,1013, 993,999,886, 994,885,1011, 994,1001,885, 995,882,1045,
769   996,884,1007, 996,1005,884,
770
771   QUADS, 648,666,130,131, 648,649,20,19, 657,658,15,14,
772   1000,987,1032,1031, 1001,994,1036,1035, 1002,989,1040,1039,
773   1003,995,1044,1043, 1004,990,1053,1052, 1005,996,1057,1056,
774   1006,991,1061,1060, 1007,976,1059,1058, 1008,977,1055,1054,
775   1009,906,973,1047, 101,64,67,100, 1010,979,1042,1041,
776   1011,980,1038,1037, 1012,981,1034,1033, 1013,982,1030,1029,
777   1014,983,1026,1025, 1015,984,1022,1021, 1016,985,1018,1017,
778   102,63,64,101, 103,60,63,102, 104,59,60,103, 1045,882,1051,1009,
779   1045,1009,1047,1046, 1048,978,1050,1049, 105,104,103,106,
780   106,103,102,107, 1061,991,1071,1075, 1062,939,1004,1052,
781   1062,1052,1053,1063, 1063,909,939,1062, 1064,928,1008,1054,
782   1064,1054,1055,1065, 1065,921,928,1064, 1066,938,1005,1056,
783   1066,1056,1057,1067, 1067,908,938,1066, 1068,929,1007,1058,
784   1068,1058,1059,1069, 1069,915,929,1068, 107,102,101,108,
785   1071,991,1084,1076, 1072,915,976,1006, 1073,1006,1060,1074,
786   1074,1060,1061,1075, 1075,1071,1073,1074, 1078,1077,1076,1079,
787   108,101,100,109, 1080,1079,1085,1095, 1081,1080,1082,1083,
788   1082,1080,1092,1091, 1084,1085,1087,1088, 1085,1079,1089,1087,
789   1086,1082,1091,1093, 1088,1087,1089,1090, 1089,1079,1076,1090,
790   109,100,99,110, 1090,1076,1084,1088, 1092,1080,1095,1094,
791   1093,1091,1092,1094, 1096,27,26,431, 1097,638,1103,1098,
792   658,659,16,15, 110,99,499,496, 1100,1099,1102,1104,
793   1101,1100,1104,1105, 1102,1099,1098,1103, 1106,1105,1104,1107,
794   1107,1104,1102,1109, 1109,1102,1103,1108, 1110,1109,1108,1111,
795   1112,1107,1109,1110, 1113,1106,1107,1112, 1115,819,828,1116,
796   1117,784,791,1120, 1118,1116,1117,1119, 1119,1117,1120,1121,
797   1120,791,1129,1122, 1121,1120,1122,1126, 1122,1123,1125,1126,
798   1126,1125,1154,1137, 1127,1124,1302,1303, 1128,1123,1122,1129,
799   1128,803,1070,1303, 1129,796,803,1128, 113,114,123,124,
800   1130,1115,1116,1118, 1131,1114,1115,1130, 1132,1133,1140,1141,
801   1133,1134,1139,1140, 1134,1135,1138,1139, 1136,688,1131,1130,
802   1138,1135,1136,1137, 1138,1137,1154,1146, 1139,1138,1146,1145,
803   114,115,122,123, 1140,1139,1145,1144, 1141,1140,1144,1143,
804   1142,761,1132,1141, 1143,758,1142,1141, 1143,1144,1149,1150,
805   1144,1145,1148,1149, 1145,1146,1147,1148, 1148,1147,1155,1153,
806   1149,1148,1153,1152, 115,116,121,122, 115,114,166,167,
807   1150,757,758,1143, 1150,1149,1152,1151, 1151,754,755,1150,
808   1158,712,754,1151, 1158,1152,1160,1159, 1160,1152,1153,1155,
809   1160,1155,1239,1177, 1165,762,773,1162, 1165,1162,1163,1166,
810   1166,1163,1164,1167, 1167,1159,1176,1166, 1169,1170,1173,1174,
811   1173,1170,1171,1175, 1174,1173,1177,1239, 1175,1165,1166,1176,
812   1176,1159,1160,1177, 1177,1173,1175,1176, 1182,1183,1186,1187,
813   1187,1186,1191,1190, 1188,1181,1182,1187, 1189,1188,1187,1190,
814   119,118,117,120, 1190,1191,1192,1193, 1193,1192,1197,1196,
815   1194,1189,1190,1193, 1195,1194,1193,1196, 1196,1197,1198,1199,
816   1199,1198,1203,1202, 659,660,17,16, 659,658,177,171, 120,117,113,124,
817   1200,1195,1196,1199, 1201,1200,1199,1202, 1202,1203,1204,1205,
818   1204,1184,1230,1209, 1205,1204,1209,1208, 1206,1201,1202,1205,
819   1207,1206,1205,1208, 1208,1209,1210,1211, 1211,1210,1215,1214,
820   1212,1207,1208,1211, 1213,1212,1211,1214, 1214,1215,1216,1217,
821   1217,1216,1221,1220, 1218,1213,1214,1217, 1219,1218,1217,1220,
822   122,121,128,127, 1220,1221,1222,1223, 1224,1219,1220,1223,
823   1227,1180,1181,1188, 1227,1206,1207,1229, 123,122,127,126,
824   1231,726,1168,1233, 1233,1168,1243,1235, 1234,1231,1233,1232,
825   1236,1235,1243,1242, 1236,1242,1244,1247, 1237,1238,1245,1246,
826   1238,744,1235,1236, 1239,1157,1280,1279, 124,123,126,125,
827   1244,1242,1271,1270, 1245,1238,1236,1247, 1246,1245,1262,1261,
828   1247,1244,1259,1263, 1249,1241,1256,1253, 125,126,135,136,
829   1251,1248,1249,1250, 1251,1250,1262,1263, 1254,1251,1263,1259,
830   1255,1241,1248,1254, 1257,1256,1255,1258, 1258,1255,1254,1259,
831   126,127,134,135, 1260,1253,1256,1257, 1261,1252,1253,1260,
832   1262,1250,1252,1261, 1262,1245,1247,1263, 1264,1237,1246,1265,
833   1265,1246,1261,1260, 1268,1243,1266,1269, 1269,1266,1267,1277,
834   127,128,133,134, 1271,1242,1243,1268, 1272,1260,1257,1274,
835   1273,1258,1259,1270, 1273,1124,1127,1283, 1274,1257,1258,1273,
836   1278,1174,1239,1279, 128,121,451,454, 1284,1276,1278,1285,
837   1285,1278,1279,1287, 1286,1277,1276,1284, 1287,1279,1280,1288,
838   1288,1280,1281,1289, 1289,1281,1277,1286, 129,120,124,125,
839   1290,1284,1285,1291, 1291,1285,1287,1293, 1292,1286,1284,1290,
840   1293,1287,1288,1294, 1294,1288,1289,1295, 1295,1289,1286,1292,
841   660,666,18,17, 130,666,660,119, 130,119,120,129, 1301,458,461,1300,
842   1301,1300,462,459, 1303,1070,1077,1127, 1303,1302,1125,1128,
843   131,130,129,132, 132,129,125,136, 134,133,140,139, 135,134,139,138,
844   136,135,138,137, 140,133,463,462, 141,132,136,137, 142,131,132,141,
845   154,153,160,163, 158,36,37,157, 159,655,111,158, 161,156,155,162,
846   161,41,42,448, 162,155,154,163, 163,40,41,162, 164,113,117,169,
847   164,169,170,174, 165,116,115,167, 165,156,449,450, 166,114,113,164,
848   167,166,173,172, 169,117,118,168, 170,169,168,171, 172,156,165,167,
849   173,166,164,174, 174,170,178,175, 175,178,179,180, 176,155,172,173,
850   176,173,174,175, 177,149,179,178, 178,170,171,177, 179,151,152,180,
851   180,153,176,175, 649,648,131,142, 649,650,21,20, 201,145,250,264,
852   206,90,753,869, 207,206,869,872, 263,256,400,399, 264,250,404,403,
853   265,257,306,305, 266,251,310,309, 267,258,298,297, 268,252,302,301,
854   269,239,300,299, 270,240,296,295, 271,241,308,307, 272,242,304,303,
855   273,243,402,401, 274,244,398,397, 279,260,247,280, 280,247,320,353,
856   281,277,254,282, 282,254,327,355, 283,259,248,284, 284,248,319,357,
857   285,278,249,286, 286,249,321,359, 287,262,245,288, 288,245,318,361,
858   289,275,255,290, 19,18,666,648, 290,255,328,363, 291,261,246,292,
859   292,246,317,365, 293,276,253,294, 294,253,322,367, 296,240,316,369,
860   298,258,329,371, 650,649,143,195, 300,239,315,373, 302,252,324,375,
861   304,242,314,377, 306,257,330,379, 308,241,344,382, 661,653,652,662,
862   310,251,313,385, 311,250,407,341, 312,256,273,340, 313,251,274,339,
863   314,242,265,338, 315,239,268,337, 316,240,267,336, 317,246,276,335,
864   318,245,275,334, 319,248,278,333, 662,667,668,663, 320,247,277,332,
865   321,249,262,349, 322,253,270,347, 323,195,260,351, 324,252,272,345,
866   325,244,263,343, 327,254,259,350, 328,255,261,348, 329,258,269,346,
867   663,668,669,670, 330,257,271,380, 331,243,264,342, 332,277,281,354,
868   333,278,285,358, 334,275,289,362, 335,276,293,366, 336,267,297,370,
869   337,268,301,374, 338,265,305,378, 339,274,397,387, 664,661,662,663,
870   340,273,401,391, 342,264,403,393, 343,263,399,389, 344,241,266,383,
871   345,272,303,376, 346,269,299,372, 347,270,295,368, 348,261,291,364,
872   349,262,287,360, 665,664,663,670, 350,259,283,356, 351,260,279,352,
873   352,279,280,353, 353,320,351,352, 354,281,282,355, 355,327,332,354,
874   356,283,284,357, 357,319,350,356, 358,285,286,359, 359,321,333,358,
875   36,665,670,671, 360,287,288,361, 361,318,349,360, 362,289,290,363,
876   363,328,334,362, 364,291,292,365, 365,317,348,364, 366,293,294,367,
877   367,322,335,366, 368,295,296,369, 369,316,347,368, 37,36,671,674,
878   370,297,298,371, 371,329,336,370, 372,299,300,373, 373,315,346,372,
879   374,301,302,375, 375,324,337,374, 376,303,304,377, 377,314,345,376,
880   378,305,306,379, 379,330,338,378, 38,37,674,675, 380,271,307,381,
881   381,307,308,382, 382,344,380,381, 383,266,309,384, 384,309,310,385,
882   385,313,383,384, 386,217,380,344, 388,325,339,387, 388,387,397,398,
883   39,38,675,678, 390,312,343,389, 390,389,399,400, 392,331,340,391,
884   392,391,401,402, 394,311,342,393, 394,393,403,404, 395,341,408,409,
885   396,326,341,395, 396,395,409,410, 398,244,325,388, 40,39,678,679,
886   400,256,312,390, 402,243,331,392, 404,250,311,394, 405,140,462,1300,
887   406,326,396,410, 408,406,410,409, 41,40,679,682, 411,412,413,414,
888   411,414,424,425, 412,405,1300,461, 417,415,416,418, 419,326,406,411,
889   419,411,425,423, 42,41,682,683, 420,414,415,430, 422,420,419,423,
890   424,414,420,422, 424,422,423,425, 426,417,421,428, 427,415,417,426,
891   427,426,428,429, 43,42,683,686, 430,415,427,429, 431,651,639,1096,
892   431,26,25,432, 432,25,24,433, 432,433,436,437, 433,24,23,434,
893   434,23,22,435, 436,433,434,438, 436,438,441,443, 437,651,431,432,
894   437,436,443,442, 438,434,435,439, 438,439,440,441, 44,43,686,687,
895   441,440,447,446, 442,443,444,445, 443,441,446,444, 448,42,43,465,
896   449,156,161,448, 449,448,465,464, 45,44,687,690, 450,449,464,452,
897   451,116,165,450, 451,450,452,453, 454,451,453,455, 456,454,455,460,
898   456,457,462,463, 459,457,456,460, 46,45,690,691, 461,458,607,617,
899   463,128,454,456, 465,44,470,464, 466,98,476,475, 466,49,50,98,
900   467,47,49,466, 468,46,47,467, 469,45,46,468, 47,46,691,694,
901   470,44,45,469, 470,469,472,471, 472,469,468,473, 473,468,467,474,
902   474,467,466,475, 476,95,477,475, 478,474,475,477, 479,473,474,478,
903   48,695,696,697, 480,472,473,479, 481,480,479,482, 482,479,478,483,
904   483,478,477,484, 486,483,484,485, 487,482,483,486, 487,486,494,489,
905   488,459,460,471, 488,471,472,480, 489,481,482,487, 49,47,694,48,
906   492,58,59,493, 493,59,104,501, 494,486,492,493, 494,493,510,511,
907   497,496,499,500, 498,497,500,501, 652,640,667,662, 652,653,10,9,
908   50,49,48,697, 500,499,509,510, 501,104,105,498, 502,74,565,567,
909   504,72,73,503, 505,71,72,504, 505,504,507,509, 507,504,503,508,
910   509,507,511,510, 51,50,697,698, 510,493,501,500, 511,507,508,573,
911   513,81,82,566, 514,80,81,513, 515,79,80,514, 515,514,561,522,
912   516,78,79,515, 516,515,522,521, 517,77,78,516, 518,76,77,517,
913   52,51,698,701, 520,517,516,521, 521,522,523,524, 524,523,528,527,
914   525,520,521,524, 526,525,524,527, 527,528,529,530, 53,52,701,702,
915   530,529,534,533, 531,526,527,530, 532,531,530,533, 533,534,535,536,
916   536,535,540,539, 537,532,533,536, 538,537,536,539, 539,540,541,542,
917   54,53,702,705, 541,540,561,563, 542,541,546,545, 543,538,539,542,
918   544,543,542,545, 545,546,547,548, 548,547,552,551, 549,544,545,548,
919   55,54,705,706, 550,549,548,551, 551,552,553,554, 554,553,558,557,
920   555,550,551,554, 556,555,554,557, 56,55,706,709, 564,518,538,543,
921   566,82,743,84, 567,565,568,566, 569,84,572,570, 57,56,709,710,
922   570,572,579,581, 573,489,494,511, 573,508,612,613, 577,502,567,569,
923   577,569,570,576, 577,576,605,602, 578,576,570,581, 579,572,571,580,
924   58,57,710,713, 580,571,598,599, 581,579,596,597, 582,575,589,588,
925   583,582,585,584, 586,584,596,595, 587,586,595,594, 588,589,592,593,
926   589,590,591,592, 59,58,713,714, 590,575,583,587, 590,587,594,591,
927   591,594,606,608, 592,591,608,607, 593,578,581,597, 593,592,607,604,
928   595,580,599,594, 596,579,580,595, 596,584,585,597, 597,585,588,593,
929   653,654,11,10, 60,59,714,61, 600,577,602,603, 601,600,603,611,
930   605,576,578,604, 61,716,717,62, 610,611,620,618, 611,615,623,620,
931   612,610,618,619, 613,612,619,621, 614,491,573,613, 614,613,621,622,
932   615,614,622,623, 618,620,626,624, 619,618,624,625, 62,717,718,65,
933   620,623,629,626, 621,619,625,627, 622,621,627,628, 623,622,628,629,
934   63,60,61,62, 639,638,1097,1096, 64,63,62,65, 647,634,793,782,
935   1,647,646,2, 2,646,645,3, 65,718,719,66, 3,645,644,4, 4,644,643,5,
936   5,643,642,6, 6,642,641,7, 7,641,640,8, 8,640,652,9, 28,27,1096,1097,
937   29,28,1097,1098, 66,719,720,69, 30,29,1098,1099, 31,30,1099,1100,
938   32,31,1100,1101, 33,637,636,34, 34,636,635,35, 35,635,634,0,
939   0,634,647,1, 67,64,65,66, 670,669,672,671, 671,672,673,674,
940   673,672,821,820, 674,673,676,675, 675,676,677,678, 678,677,680,679,
941   679,680,681,682, 68,67,66,69, 681,680,826,825, 682,681,684,683,
942   683,684,685,686, 684,681,824,1114, 685,684,1114,1131,
943   686,685,688,687, 687,688,689,690, 689,688,1136,1135, 69,720,721,70,
944   690,689,692,691, 691,692,693,694, 692,689,1135,1134,
945   693,692,1134,1133, 694,693,695,48, 695,693,1133,1132,
946   696,695,1132,761, 697,696,699,698, 698,699,700,701, 699,696,761,760,
947   654,655,12,11, 70,721,722,723, 700,699,760,759, 701,700,703,702,
948   702,703,704,705, 703,700,759,758, 704,703,758,757, 705,704,707,706,
949   706,707,708,709, 707,704,757,756, 708,707,756,755, 709,708,711,710,
950   71,68,69,70, 710,711,712,713, 711,708,755,754, 713,712,715,714,
951   714,715,716,61, 715,712,1158,1159, 716,715,767,766, 717,716,766,765,
952   718,717,765,764, 719,718,764,763, 72,71,70,723, 722,721,1171,1170,
953   723,722,725,724, 724,725,726,727, 725,722,1170,1169, 727,726,729,728,
954   728,729,730,731, 73,72,723,724, 731,730,733,732, 732,733,734,735,
955   733,730,1184,1183, 734,733,1183,1182, 735,734,737,736,
956   736,737,738,739, 737,734,1182,1181, 738,737,1181,1180,
957   739,738,741,740, 74,73,724,727, 740,741,742,83, 741,738,1180,1179,
958   742,741,1179,1232, 743,742,1232,744, 749,748,751,750, 75,74,727,728,
959   750,751,752,753, 753,752,870,869, 76,75,728,731, 762,763,772,773,
960   763,764,771,772, 764,765,770,771, 765,766,769,770, 766,767,768,769,
961   767,715,1159,1167, 768,767,1167,1164, 77,76,731,732, 774,642,822,821,
962   775,639,872,871, 776,780,783,787, 776,777,829,827, 778,779,828,830,
963   78,77,732,735, 780,781,782,783, 780,776,827,832, 781,780,832,831,
964   783,782,793,792, 784,779,778,785, 785,778,777,786, 786,777,776,787,
965   787,783,792,788, 788,792,795,799, 789,786,787,788, 79,78,735,736,
966   790,785,786,789, 791,784,785,790, 792,793,794,795, 793,634,635,794,
967   794,635,636,805, 795,794,805,804, 796,791,790,797, 797,790,789,798,
968   798,789,788,799, 799,795,804,800, 655,656,13,12, 80,79,736,739,
969   801,798,799,800, 802,797,798,801, 803,796,797,802, 806,636,637,858,
970   81,80,739,740, 815,814,842,843, 817,818,825,826, 818,819,824,825,
971   82,81,740,83, 823,816,817,826, 824,819,1115,1114, 827,829,836,837,
972   828,779,1117,1116, 828,819,835,830, 829,777,778,830, 831,832,833,834,
973   833,832,827,837, 834,833,841,840, 835,818,839,836, 836,829,830,835,
974   837,836,839,838, 839,816,843,838, 840,645,646,834, 841,833,837,838,
975   842,812,840,841, 842,841,838,843, 86,747,748,749, 869,870,871,872,
976   872,639,112,207, 88,87,86,749, 89,88,749,750, 656,657,14,13,
977   90,89,750,753, 91,58,492,485, 910,927,952,953, 911,926,956,957,
978   912,925,944,945, 913,924,948,949, 914,943,950,951, 915,808,864,929,
979   918,941,958,959, 919,942,946,947, 92,91,485,484, 92,56,57,91,
980   920,940,954,955, 924,919,992,1015, 925,858,988,1016, 926,920,993,1013,
981   927,914,986,1014, 928,909,990,1008, 929,908,996,1007, 93,55,56,92,
982   930,907,979,1003, 931,906,1009,1048, 932,905,981,1001,
983   933,904,980,1002, 934,923,994,1011, 935,918,987,1012,
984   936,922,995,1045, 937,917,989,1010, 938,921,977,1005,
985   939,916,978,1004, 94,54,55,93, 940,910,983,999, 941,911,982,1000,
986   942,912,985,997, 943,913,984,998, 944,925,1016,1017,
987   945,944,1017,1018, 946,942,997,1019, 947,946,1019,1020,
988   948,924,1015,1021, 949,948,1021,1022, 95,94,484,477, 95,53,54,94,
989   950,943,998,1023, 951,950,1023,1024, 952,927,1014,1025,
990   953,952,1025,1026, 954,940,999,1027, 955,954,1027,1028,
991   956,926,1013,1029, 957,956,1029,1030, 958,941,1000,1031,
992   959,958,1031,1032, 96,52,53,95, 960,935,1012,1033, 961,960,1033,1034,
993   961,905,935,960, 962,932,1001,1035, 963,962,1035,1036,
994   963,923,932,962, 964,934,1011,1037, 965,964,1037,1038,
995   965,904,934,964, 966,933,1002,1039, 967,966,1039,1040,
996   967,917,933,966, 968,937,1010,1041, 969,968,1041,1042,
997   969,907,937,968, 97,51,52,96, 970,930,1003,1043, 971,970,1043,1044,
998   971,922,930,970, 972,936,1045,1046, 973,972,1046,1047,
999   973,906,936,972, 974,931,1048,1049, 975,974,1049,1050,
1000   975,916,931,974, 976,915,1069,1059, 977,921,1065,1055,
1001   978,916,975,1050, 979,907,969,1042, 98,50,51,97, 980,904,965,1038,
1002   981,905,961,1034, 982,911,957,1030, 983,910,953,1026,
1003   984,913,949,1022, 985,912,945,1018, 986,914,951,1024,
1004   987,918,959,1032, 989,917,967,1040, 990,909,1063,1053,
1005   992,919,947,1020, 993,920,955,1028, 994,923,963,1036,
1006   995,922,971,1044, 996,908,1067,1057, 997,992,1020,1019,
1007   998,986,1024,1023, 999,993,1028,1027,
1008
1009   /* The base of the knight */
1010   SPIN,18,
1011   9510,0, 9510,756, SEAM, 9134,1129, 9447,1487,
1012   9447,1951, 9103,2371, STEPDOWN, 8211,3083,
1013   7167,4242, 6662,5664, 7040,7142, STEPUP, SEAM, 7935,8560,
1014   STEPUP, BACKREF,0,
1015
1016   ENDOFDATA
1017 };
1018
1019 static unsigned short bishop_data[] = {
1020   VERTICES, SETBACKREF,0, 5233,26960,0, 5154,26960,909, 4918,26960,1790,
1021   4532,26960,2617, 4009,26960,3364, 3364,26960,4009, 2617,26960,4532,
1022   1790,26960,4918, 909,26960,5154, 0,26833,5233, -909,26960,5154,
1023   -1790,26960,4918, -2617,26960,4532, -3364,26960,4009,
1024   -4009,26960,3364, -4532,26960,2617, -4918,26960,1790,
1025   -5154,26960,909, -5233,26960,0, -5154,26960,-909, -4918,26960,-1790,
1026   -4532,26960,-2617, -4009,26960,-3364, -3364,26960,-4009,
1027   -2617,26960,-4532, -1790,26960,-4918, -909,26960,-5154, 0,26833,-5233,
1028   909,26960,-5154, 1790,26960,-4918, 2617,26960,-4532, 3364,26960,-4009,
1029   4009,26960,-3364, 4532,26960,-2617, 4918,26960,-1790, 5154,26960,-909,
1030   SETBACKREF,1, 3812,31178,0, 3765,31144,729, 3624,31040,1435,
1031   3395,30872,2153, 3084,30642,2820, 2701,30360,3389, 2076,29899,4102,
1032   1492,30015,4340, 845,30033,4442, 0,30044,4511, -657,30063,4443,
1033   -1481,30081,4214, -2190,30081,3884, -2830,30081,3435,
1034   -3383,30081,2883, -3831,30081,2242, -4162,30081,1534,
1035   -4364,30081,779, -4432,30081,0, -4364,30081,-779, -4162,30081,-1534,
1036   -3831,30081,-2242, -3383,30081,-2883, -2830,30081,-3435,
1037   -2190,30081,-3884, -1481,30081,-4214, -657,30063,-4443, 0,30044,-4511,
1038   845,30033,-4442, 1492,30015,-4340, 2076,29899,-4102, 2701,30360,-3388,
1039   3084,30642,-2820, 3395,30872,-2153, 3624,31040,-1435, 3765,31144,-729,
1040   240,28546,-4957, 884,29021,-4784, 1490,29467,-4537, 2076,29899,-4102,
1041   2701,30360,-3388, 3084,30642,-2820, 3395,30872,-2153,
1042   3624,31040,-1435, 3765,31144,-729, 2177,28477,4637, 1021,27605,5037,
1043   1021,27605,-5042, 2170,28478,-4644, 0,26833,-5233, 0,26833,5233,
1044   -3153,28619,-3758, 240,28546,4957, 884,29021,4784, 2076,29899,4102,
1045   2701,30360,3389, 3084,30642,2820, 3395,30872,2153, 3624,31040,1435,
1046   3765,31144,729, -719,28582,4883, 4863,28569,977, 4560,28569,1925,
1047   4064,28569,2815, 3465,28569,3723, 2622,28569,4448, 2621,28583,-4401,
1048   3473,28588,-3691, 4064,28569,-2815, 4560,28569,-1925, 4863,28569,-977,
1049   4965,28569,0, -1678,28619,4610, -3153,28619,3758, -2453,28619,4248,
1050   -4248,28619,2453, -3758,28619,3153, -4831,28619,852, -4906,28619,0,
1051   -4831,28619,-852, -4610,28619,-1678, -4248,28619,-2453,
1052   -3758,28619,-3153, -1678,28619,-4610, -2453,28619,-4248,
1053   -644,27895,5037, -644,27895,-5037, -4610,28619,1678, -719,28582,-4883,
1054   2170,28478,-4644, 1021,27605,-5042, 1021,27605,5037, 2177,28477,4637,
1055   0,26833,-5233, 0,26833,5233, -644,27895,-5037, -644,27895,5037,
1056   -644,27895,5037, -644,27895,-5037, 1490,29467,-4537, 884,29021,-4784,
1057   240,28546,-4957, 240,28546,4957, 884,29021,4784, 3812,31178,0,
1058   4349,30116,-867, 4197,30001,-1705, 3948,29813,-2492, 3610,29558,-3203,
1059   3193,29244,-3817, 2711,28880,-4315, 4349,30116,-867, 4197,30001,-1705,
1060   3948,29813,-2492, 3610,29558,-3203, 3193,29244,-3817,
1061   2711,28880,-4315, 1608,28047,-4906, 1608,28047,4901, 2711,28880,4310,
1062   3193,29244,3812, 3610,29558,3198, 3948,29813,2487, 4197,30001,1701,
1063   4349,30116,862, 4401,30155,-176, 1490,29467,4537, 1490,29467,4537,
1064   4401,30155,-176, 4349,30116,862, 4197,30001,1701, 3948,29813,2487,
1065   3610,29558,3198, 3193,29244,3812, 2711,28880,4310, 1608,28047,4901,
1066   1608,28047,-4906,
1067
1068   TRIANGLES, 8,127,9, 7,128,154, 2,98,3, 121,96,10, 121,10,9, 121,138,96,
1069   122,27,26, 27,126,28, 66,135,65, 162,42,43, 165,164,141, 80,140,95,
1070   103,151,150, 102,125,152, 101,155,128, 100,157,156, 124,137,122,
1071   33,105,34, 29,153,125, 26,124,122,
1072
1073   QUADS, 22,118,87,23, 21,117,118,22, 20,116,117,21, 19,115,116,20,
1074   18,114,115,19, 17,113,114,18, 16,123,113,17, 15,111,123,16, 14,112,111,15,
1075   13,109,112,14, 12,110,109,13, 11,108,110,12, 7,154,127,8, 110,108,47,48,
1076   135,136,64,65, 136,137,63,64, 138,139,44,45, 139,162,43,44, 109,110,48,49,
1077   147,161,107,106, 166,165,141,142, 167,166,142,143, 168,167,143,144,
1078   169,168,144,145, 112,109,49,50, 170,169,145,146, 171,81,84,172,
1079   111,112,50,51, 72,88,133,134, 73,89,88,72, 74,163,89,73, 75,90,163,74,
1080   76,91,90,75, 77,92,91,76, 78,93,92,77, 79,94,93,78, 80,95,94,79,
1081   81,170,146,84, 82,171,172,83, 86,82,83,85, 130,129,131,132, 123,111,51,52,
1082   113,123,52,53, 114,113,53,54, 115,114,54,55, 116,115,55,56, 117,116,56,57,
1083   118,117,57,58, 87,118,58,59, 120,87,59,60, 119,120,60,61, 107,161,160,97,
1084   106,107,0,35, 105,148,147,106, 105,106,35,34, 104,149,148,105,
1085   104,105,33,32, 103,150,149,104, 103,104,32,31, 102,152,151,103,
1086   102,103,31,30, 101,128,7,6, 100,101,6,5, 100,156,155,101, 99,100,5,4,
1087   99,158,157,100, 98,99,4,3, 98,159,158,99, 97,98,2,1, 97,160,159,98,
1088   96,108,11,10, 96,138,45,46, 124,119,61,62, 47,108,96,46, 63,137,124,62,
1089   0,107,97,1, 29,125,102,30, 28,126,153,29, 25,119,124,26, 24,120,119,25,
1090   23,87,120,24,
1091
1092   /* Everything above the slit */
1093   SPIN,18,
1094   8870,0,8870,731,SEAM,8519,1091,8811,1438,8811,1886,8626,2292,
1095   STEPDOWN,6989,2980,5927,4133,5548,5735,
1096   STEPUP,5388,7642,5228,7807,STEPDOWN,4427,8149,4057,8434,
1097   3493,9185,2816,13524,SEAM,2690,18532,5301,18690,
1098   STEPUP,6810,19005,6861,19277,6804,19625,STEPDOWN,6502,19845,
1099   SEAM,4305,20394,STEPUP,4796,20522,4924,20759,4778,20979,
1100   STEPDOWN,SEAM,3727,21207,SEAM,3726,22181,STEPUP,SEAM,4546,22705,
1101   SEAM,3846,23385,4718,24227,5226,25516,STEPUP,BACKREF,0,
1102
1103   /* Everything below the slit */
1104   SPIN,36,
1105   BACKREF,1,STEPDOWN,3548,31590,STEPDOWN,2724,32633,SEAM,1581,33500,
1106   2013,33901,STEPUP,2281,34500,2281,34936,STEPDOWN,1947,35372,
1107   STEPDOWN,1233,35734,STEPDOWN,0,35891,
1108
1109   ENDOFDATA
1110 };
1111
1112 static unsigned short king_data[] = {
1113   SPIN,20,
1114   11378,0,11378,856,SEAM,10928,1152,
1115   11302,1684,11302,2209,11065,2684,
1116   STEPDOWN,8964,3490,7603,4841,7116,6717,
1117   STEPUP,6911,8950,6705,9144,STEPDOWN,5678,9545,5204,9878,
1118   4481,10758,3696,14808,SEAM,3065,26979,
1119   5813,27155,STEPUP,7145,27507,7424,27812,7352,28288,7131,28533,
1120   5477,28882,5397,29010,5406,29363,4903,29934,
1121   STEPDOWN,SEAM,3944,30227,
1122   SEAM,3974,31478,4703,31849,STEPUP,4832,32092,4756,32370,
1123   SEAM,3975,32620,6899,39055,6877,39351,2833,39514,
1124   2786,39612,2786,39807,2734,39856,STEPDOWN,STEPDOWN,2590,39905,0,39969,
1125   /* The cross */
1126   SETBACKREF,0,
1127   QUADSTRIP,-1613,39866,0,-1543,39866,702,-1651,40481,0,-1580,40590,702,
1128   -1531,40917,0,-1465,41008,702,
1129   QUADSTRIP,-1531,40917,0,-1465,41008,702,-2956,41104,0,-2829,41187,702,
1130   -3075,41520,0,-2943,41585,702,-3075,43849,0,-2943,43805,702,
1131   -2862,44347,0,-2739,44282,702,-1116,44636,0,-1068,44554,702,
1132   QUADSTRIP,-1116,44636,0,-1068,44554,702,-1102,45692,0,-1054,45576,702,
1133   -973,45829,0,-973,45747,702,973,45829,0,973,45747,702,1102,45692,0,
1134   1054,45576,702,1116,44636,0,1068,44554,702,
1135   QUADSTRIP,1116,44636,0,1068,44554,702,2862,44347,0,2739,44282,702,
1136   3075,43849,0,2943,43805,702,3075,41520,0,2943,41585,702,2956,41104,0,
1137   2829,41187,702,1531,40917,0,1465,41008,702,
1138   QUADSTRIP,1531,40917,0,1465,41008,702,1651,40481,0,1580,40590,702,
1139   1613,39866,0,1543,39866,702,
1140   QUADSTRIP,-1543,39866,702,1543,39866,702,-1580,40590,702,
1141   1580,40590,702,-1465,41008,702,1465,41008,702,-2829,41187,702,
1142   2829,41187,702,-2943,41585,702,2943,41585,702,-2943,43805,702,
1143   2943,43805,702,-2739,44282,702,2739,44282,702,-1068,44554,702,
1144   1068,44554,702,-1054,45576,702,1054,45576,702,-973,45747,702,
1145   973,45747,702,
1146   QUADSTRIP,-1543,39866,-702,BACKREF,0,0,-1580,40590,-702,BACKREF,0,2,
1147   -1465,41008,-702,BACKREF,0,4,
1148   QUADSTRIP,-1465,41008,-702,BACKREF,0,6,-2829,41187,-702,BACKREF,0,8,
1149   -2943,41585,-702,BACKREF,0,10,-2943,43805,-702,BACKREF,0,12,
1150   -2739,44282,-702,BACKREF,0,14,-1068,44554,-702,BACKREF,0,16,
1151   QUADSTRIP,-1068,44554,-702,BACKREF,0,18,-1054,45576,-702,
1152   BACKREF,0,20,-973,45747,-702,BACKREF,0,22,973,45747,-702,BACKREF,0,24,
1153   1054,45576,-702,BACKREF,0,26,1068,44554,-702,BACKREF,0,28,
1154   QUADSTRIP,1068,44554,-702,BACKREF,0,30,2739,44282,-702,
1155   BACKREF,0,32,2943,43805,-702,BACKREF,0,34,2943,41585,-702,BACKREF,0,36,
1156   2829,41187,-702,BACKREF,0,38,1465,41008,-702,BACKREF,0,40,
1157   QUADSTRIP,1465,41008,-702,BACKREF,0,42,1580,40590,-702,
1158   BACKREF,0,44,1543,39866,-702,BACKREF,0,46,
1159   QUADSTRIP,1543,39866,-702,-1543,39866,-702,1580,40590,-702,
1160   -1580,40590,-702,1465,41008,-702,-1465,41008,-702,2829,41187,-702,
1161   -2829,41187,-702,2943,41585,-702,-2943,41585,-702,2943,43805,-702,
1162   -2943,43805,-702,2739,44282,-702,-2739,44282,-702,1068,44554,-702,
1163   -1068,44554,-702,1054,45576,-702,-1054,45576,-702,973,45747,-702,
1164   -973,45747,-702,
1165   ENDOFDATA
1166 };
1167
1168 static unsigned short queen_data[] = {
1169   SPIN,24,
1170   11092,0,11092,914,SEAM,10653,1284,
1171   11018,1798,11018,2358,10787,2866,
1172   STEPDOWN,8739,3726,7412,5168,6937,7171,
1173   STEPUP,6737,9556,6537,9762,STEPDOWN,5536,10191,5073,10546,
1174   4368,11485,3678,15137,SEAM,3259,26879,
1175   5966,27091,STEPUP,7332,27515,7619,27882,7545,28455,7317,28751,
1176   5654,29177,5538,29326,5542,29982,5377,30278,
1177   STEPDOWN,SEAM,4194,30585,
1178   SEAM,4226,31822,5002,32218,STEPUP,5139,32477,5058,32774,
1179   SEAM,4227,33040,STEPDOWN,4421,34778,5042,36612,5874,38429,
1180   STEPUP,SEAM,PATTERN,3,6018,39660,6018,39660,6804,39977,
1181   SEAM,PATTERN,3,5015,41139,5015,41139,5673,41460,
1182   SEAM,4349,40044,
1183   STEPDOWN,SEAM,1381,41188,
1184   1396,42332,STEPDOWN,1082,43072,481,43476,0,43543,
1185   ENDOFDATA
1186 };
1187
1188 static unsigned short pawn_data[] = {
1189   SPIN,16,
1190   7395,0,7395,609,
1191   SEAM,7102,910,7345,1199,7345,1572,7191,1910,
1192   STEPDOWN,5826,2484,4941,3446,4625,4781,
1193   STEPUP,4492,6371,4358,6508,
1194   STEPDOWN,3691,6794,2912,7657,2473,10091,
1195   SEAM,2100,15344,
1196   STEPUP,4518,15697,4695,15900,4649,16218,4509,16382,
1197   STEPDOWN,SEAM,3150,16755,STEPUP,3858,17678,4303,18752,4455,19905,
1198   4303,21058,3858,22132,
1199   STEPDOWN,3150,23055,2227,23763,STEPDOWN,1153,24208,0,24360,
1200   ENDOFDATA
1201 };
1202
1203 static unsigned short rook_data[] = {
1204   SPIN,20,
1205   9374,0,9374,756,SEAM,9003,1062,9311,1487,
1206   9311,1951,9116,2371,8521,3083,6701,5807,SEAM,6009,7595,
1207   6167,7812,6138,8066,5926,8460,5216,12608,
1208   SEAM,4883,21434,
1209   SEAM,5140,21608,
1210   SEAM,5176,22792,
1211   SEAM,5953,23030,
1212 /* SEAM,PATTERN,5,6103,26819,6143,27971,6143,27971,6143,27971,6103,26819, */
1213 /* SEAM,PATTERN,5, 5020,26819,5053,27971,5053,27971,5053,27971, 5020,26819, */
1214   SETBACKREF,0,
1215   6103,26819,
1216
1217   SETBACKREF,1,
1218   SPIN,20,
1219   5020,26819,5020,26114,4906,25858,0,25666,
1220
1221   POLARQUADSTRIP,20,BACKREF,0,1,1,6143,27971,BACKREF,0,2,2,6143,27971,
1222   BACKREF,0,3,3,6143,27971,BACKREF,0,4,4,6143,27971,
1223   POLARQUADSTRIP,20,BACKREF,0,6,6,6143,27971,BACKREF,0,7,7,6143,27971,
1224   BACKREF,0,8,8,6143,27971,BACKREF,0,9,9,6143,27971,
1225   POLARQUADSTRIP,20,BACKREF,0,11,11,6143,27971,BACKREF,0,12,12,6143,27971,
1226   BACKREF,0,13,13,6143,27971,BACKREF,0,14,14,6143,27971,
1227   POLARQUADSTRIP,20,BACKREF,0,16,16,6143,27971,BACKREF,0,17,17,6143,27971,
1228   BACKREF,0,18,18,6143,27971,BACKREF,0,19,19,6143,27971,
1229
1230   POLARQUADSTRIP,20,1,5053,27971,BACKREF,1,1,2,5053,27971,BACKREF,1,2,
1231   3,5053,27971,BACKREF,1,3,4,5053,27971,BACKREF,1,4,
1232   POLARQUADSTRIP,20,6,5053,27971,BACKREF,1,6,7,5053,27971,BACKREF,1,7,
1233   8,5053,27971,BACKREF,1,8,9,5053,27971,BACKREF,1,9,
1234   POLARQUADSTRIP,20,11,5053,27971,BACKREF,1,11,12,5053,27971,BACKREF,1,12,
1235   13,5053,27971,BACKREF,1,13,14,5053,27971,BACKREF,1,14,
1236   POLARQUADSTRIP,20,16,5053,27971,BACKREF,1,16,17,5053,27971,BACKREF,1,17,
1237   18,5053,27971,BACKREF,1,18,19,5053,27971,BACKREF,1,19,
1238
1239   POLARQUADSTRIP,20,1,5020,26819,1,6103,26819,
1240   0,5020,26819,0,6103,26819,19,5020,26819,19,6103,26819,
1241   POLARQUADSTRIP,20,6,5020,26819,6,6103,26819,
1242   5,5020,26819,5,6103,26819,4,5020,26819,4,6103,26819,
1243   POLARQUADSTRIP,20,11,5020,26819,11,6103,26819,
1244   10,5020,26819,10,6103,26819,9,5020,26819,9,6103,26819,
1245   POLARQUADSTRIP,20,16,5020,26819,16,6103,26819,
1246   15,5020,26819,15,6103,26819,14,5020,26819,14,6103,26819,
1247
1248   POLARQUADSTRIP,20,1,5053,27971,1,6143,27971,1,5020,26819,1,6103,26819,
1249   POLARQUADSTRIP,20,4,5020,26819,4,6103,26819,4,5053,27971,4,6143,27971,
1250   POLARQUADSTRIP,20,6,5053,27971,6,6143,27971,6,5020,26819,6,6103,26819,
1251   POLARQUADSTRIP,20,9,5020,26819,9,6103,26819,9,5053,27971,9,6143,27971,
1252   POLARQUADSTRIP,20,11,5053,27971,11,6143,27971,11,5020,26819,11,6103,26819,
1253   POLARQUADSTRIP,20,14,5020,26819,14,6103,26819,14,5053,27971,14,6143,27971,
1254   POLARQUADSTRIP,20,16,5053,27971,16,6143,27971,16,5020,26819,16,6103,26819,
1255   POLARQUADSTRIP,20,19,5020,26819,19,6103,26819,19,5053,27971,19,6143,27971,
1256
1257   POLARQUADSTRIP,20,1,6143,27971,1,5053,27971,2,6143,27971,2,5053,27971,
1258   3,6143,27971,3,5053,27971,4,6143,27971,4,5053,27971,
1259   POLARQUADSTRIP,20,6,6143,27971,6,5053,27971,7,6143,27971,7,5053,27971,
1260   8,6143,27971,8,5053,27971,9,6143,27971,9,5053,27971,
1261   POLARQUADSTRIP,20,11,6143,27971,11,5053,27971,12,6143,27971,12,5053,27971,
1262   13,6143,27971,13,5053,27971,14,6143,27971,14,5053,27971,
1263   POLARQUADSTRIP,20,16,6143,27971,16,5053,27971,17,6143,27971,17,5053,27971,
1264   18,6143,27971,18,5053,27971,19,6143,27971,19,5053,27971,
1265
1266   ENDOFDATA
1267 };
1268
1269 static double piece_size;
1270
1271 static int
1272 enumerate_ring_vertices( int steps, unsigned short *data, void *h,
1273   void (*process_vertex)(void *h,double x,double y,double z))
1274 {
1275   int patlen = 1,i;
1276   unsigned short *pts = data;
1277   double dtheta = M_PI * 2 / steps;
1278
1279   if( data[0] == PATTERN) {
1280         patlen = data[1];
1281         pts += 2;
1282   }
1283
1284   if( pts[0] == 0) steps = 1;
1285
1286   for( i=0; i < steps; i++) {
1287         double r = pts[(i % patlen)*2] * piece_size;
1288         double y = pts[(i % patlen)*2+1] * piece_size;
1289         double theta = dtheta * i;
1290
1291         process_vertex( h, r * cos(theta), y, r * sin(theta));
1292   }
1293
1294   return pts + patlen * 2 - data;
1295 }
1296
1297 static void
1298 enumerate_vertices( unsigned short *data, void *h,
1299   void (*process_vertex)(void *h,double x,double y,double z))
1300 {
1301   while(1) {
1302         if( data[0] == SPIN) {
1303           int steps;
1304           steps = data[1];
1305           data += 2;
1306
1307           while(data[0] <= SEAM) {
1308                 if( data[0] == SETBACKREF || data[0] == BACKREF) {
1309                   data += 2;
1310                   continue;
1311                 } else if( data[0] == STEPUP) {
1312                   steps *= 2;
1313                   data++;
1314                   continue;
1315                 } else if( data[0] == STEPDOWN) {
1316                   steps /= 2;
1317                   data++;
1318                   continue;
1319                 } else if( data[0] == SEAM) {
1320                   data ++;
1321                   /* Visit seam vertices twice */
1322                   enumerate_ring_vertices( steps, data,
1323                         h, process_vertex);
1324                   data += enumerate_ring_vertices( steps, data,
1325                         h, process_vertex);
1326                 } else {
1327                   data += enumerate_ring_vertices( steps, data,
1328                         h, process_vertex);
1329                 }
1330           }
1331         } else if( data[0] == POLARQUADSTRIP) {
1332           int steps = data[1];
1333           double dtheta;
1334           data += 2;
1335
1336           dtheta = M_PI * 2 / steps;
1337
1338           while(data[0] <= SEAM) {
1339                 if( data[0] != BACKREF) {
1340                   double theta = dtheta * data[0];
1341                   double r = data[1] * piece_size;
1342                   double y = data[2] * piece_size;
1343                   process_vertex( h, r * cos(theta), y, r * sin(theta));
1344                 }
1345                 data += 3;
1346           }
1347         } else if( data[0] == QUADSTRIP || data[0] == VERTICES) {
1348           data ++;
1349
1350           while(data[0] <= SEAM) {
1351                 if( data[0] == SETBACKREF) {
1352                   data += 2;
1353                   continue;
1354                 }
1355
1356                 if( data[0] != BACKREF) {
1357                   double x = (signed short)data[0] * piece_size;
1358                   double y = data[1] * piece_size;
1359                   double z = (signed short)data[2] * piece_size;
1360                   process_vertex( h, x, y, z);
1361                 }
1362                 data += 3;
1363           }
1364         } else if( data[0] == QUADS || data[0] == TRIANGLES) {
1365           data ++;
1366           while( data[0] <= SEAM) data++;
1367         } else {
1368           break;
1369         }
1370   }
1371 }
1372
1373 static void
1374 enumerate_ring_faces( int basevertex, int steps,
1375   int prevbase, int prevsteps, void *h, int *count_ret,
1376   void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1377 {
1378   int i,j;
1379
1380   if( steps == 1) {
1381         for( i=0; i < prevsteps; i++) {
1382           process_face( h,
1383                 basevertex,
1384                 prevbase + i,
1385                 prevbase + (i ? i-1 : prevsteps-1),
1386                 -1);
1387           if (count_ret) (*count_ret)++;
1388         }
1389   } else if( steps == prevsteps) {
1390         for( i=0; i < steps; i++) {
1391           process_face( h,
1392                 basevertex + i,
1393                 prevbase + i,
1394                 prevbase + (i ? i-1 : steps-1),
1395                 basevertex + (i ? i-1 : steps-1));
1396           if (count_ret) (*count_ret)++;
1397         }
1398   } else {
1399         j = 0;
1400         for( i=0;; i++) {
1401           while( j < prevsteps && steps*(1+2*j) < prevsteps*(1+2*i)) {
1402                 process_face( h,
1403                   basevertex + (i%steps),
1404                   prevbase + ((j+1)%prevsteps),
1405                   prevbase + j,
1406                   -1);
1407                 if (count_ret) (*count_ret)++;
1408                 j++;
1409           }
1410           if( i == steps) break;
1411           process_face( h,
1412                 basevertex + i,
1413                 basevertex + ((i+1)%steps),
1414                 prevbase + (j%prevsteps),
1415                 -1);
1416           if (count_ret) (*count_ret)++;
1417         }
1418   }
1419 }
1420
1421 static void
1422 enumerate_faces( unsigned short *data, void *h, int *count_ret,
1423   void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1424 {
1425   int basevertex = 0, startofvertices = 0;
1426   int backrefs[5];
1427
1428   while(1) {
1429         if( data[0] == SPIN) {
1430           int steps;
1431           int prevsteps = -1,prevbase = 0;
1432
1433           steps = data[1];
1434           data += 2;
1435
1436           while( data[0] <= SEAM) {
1437                 if( data[0] == SETBACKREF) {
1438                   backrefs[data[1]] = basevertex;
1439                   data += 2;
1440                   continue;
1441                 }
1442
1443                 if( data[0] == STEPUP) {
1444                   steps *= 2;
1445                   data++;
1446                   continue;
1447                 } else if( data[0] == STEPDOWN) {
1448                   steps /= 2;
1449                   data++;
1450                   continue;
1451                 }
1452
1453                 if( data[0] == BACKREF) {
1454                   if( prevsteps != -1) {
1455                         enumerate_ring_faces( backrefs[data[1]], steps,
1456                                               prevbase, prevsteps, h, 
1457                                               count_ret, process_face);
1458                   }
1459
1460                   prevbase = backrefs[data[1]];
1461                   data += 2;
1462                 } else {
1463                   int isseam = 0;
1464                   if( data[0] == SEAM) {
1465                         isseam = 1;
1466                         data++;
1467                   }
1468
1469                   if( data[0] == PATTERN) {
1470                         data += 2 + data[1]*2;
1471                   } else {
1472                         if( data[0] == 0) steps = 1;
1473                         data += 2;
1474                   }
1475
1476                   if( prevsteps != -1) {
1477                         enumerate_ring_faces( basevertex, steps,
1478                                               prevbase, prevsteps, h, 
1479                                               count_ret, process_face);
1480                   }
1481
1482                   if( isseam) basevertex += steps;
1483                   prevbase = basevertex;
1484                   basevertex += steps;
1485                 }
1486
1487                 prevsteps = steps;
1488           }
1489         } else if( data[0] == POLARQUADSTRIP || data[0] == QUADSTRIP) {
1490           int v0=-1,v1=0,v2,v3;
1491           if( data[0] == POLARQUADSTRIP) data += 2;
1492           else data ++;
1493           while(data[0] <= SEAM) {
1494                 if( data[0] == BACKREF) {
1495                   v2 = backrefs[data[1]]+data[2];
1496                 } else {
1497                   v2 = basevertex;
1498                   basevertex++;
1499                 }
1500                 if( data[3] == BACKREF) {
1501                   v3 = backrefs[data[4]]+data[5];
1502                 } else {
1503                   v3 = basevertex;
1504                   basevertex++;
1505                 }
1506                 data += 6;
1507                 if( v0 != -1) {
1508                   process_face( h, v0, v1, v3, v2);
1509                   if (count_ret) (*count_ret)++;
1510                 }
1511                 v0 = v2;
1512                 v1 = v3;
1513           }
1514         } else if( data[0] == VERTICES) {
1515           data ++;
1516           startofvertices = basevertex;
1517           while( data[0] <= SEAM) {
1518                 if( data[0] == SETBACKREF) {
1519                   backrefs[data[1]] = basevertex;
1520                   data += 2;
1521                   continue;
1522                 }
1523                 data += 3;
1524                 basevertex ++;
1525           }
1526         } else if( data[0] == QUADS) {
1527           data ++;
1528           while( data[0] <= SEAM) {
1529                 process_face( h,
1530                   data[0] + startofvertices,
1531                   data[1] + startofvertices,
1532                   data[2] + startofvertices,
1533                   data[3] + startofvertices);
1534                 if (count_ret) (*count_ret)++;
1535                 data += 4;
1536           }
1537         } else if( data[0] == TRIANGLES) {
1538           data ++;
1539           while( data[0] <= SEAM) {
1540                 process_face( h,
1541                   data[0] + startofvertices,
1542                   data[1] + startofvertices,
1543                   data[2] + startofvertices, -1);
1544                 if (count_ret) (*count_ret)++;
1545                 data += 3;
1546           }
1547         } else {
1548           break;
1549         }
1550   }
1551 }
1552
1553 static void
1554 normalize( float v[3]) {
1555   float d = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
1556
1557   if( d == 0.0) {
1558         /* The direction is undefined - normalize it anyway */
1559         v[0] = 1.0;
1560         v[1] = 0.0;
1561         v[2] = 0.0;
1562         return;
1563   }
1564
1565   v[0] /= d;
1566   v[1] /= d;
1567   v[2] /= d;
1568 }
1569
1570 static void
1571 normcrossprod( float v1[3], float v2[3], float out[3])
1572 {
1573   out[0] = v1[1] * v2[2] - v1[2] * v2[1];
1574   out[1] = v1[2] * v2[0] - v1[0] * v2[2];
1575   out[2] = v1[0] * v2[1] - v1[1] * v2[0];
1576   normalize( out);
1577 }
1578
1579 #define vectordiff(v1,v2,out) \
1580         ((out)[0] = (v1)[0] - (v2)[0], \
1581         (out)[1] = (v1)[1] - (v2)[1], \
1582         (out)[2] = (v1)[2] - (v2)[2])
1583
1584 #define vectoradd(v1,v2) \
1585         ((v1)[0] += (v2)[0], \
1586          (v1)[1] += (v2)[1], \
1587          (v1)[2] += (v2)[2])
1588
1589 static int numverts;
1590 static float *vertices;
1591 static float *normals;
1592
1593 static void
1594 count_vertex( void *dummy, double x, double y, double z)
1595 {
1596   numverts++;
1597 }
1598
1599 static void
1600 add_normal( void *dummy, int v1, int v2, int v3, int v4)
1601 {
1602   float surfnormal[3],d1[3],d2[3];
1603
1604   if( v4 == -1) {
1605         vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1606         vectordiff( vertices + 3 * v3, vertices + 3 * v1, d2);
1607         normcrossprod( d1, d2, surfnormal);
1608         vectoradd( normals + 3 * v1, surfnormal);
1609         vectoradd( normals + 3 * v2, surfnormal);
1610         vectoradd( normals + 3 * v3, surfnormal);
1611   } else {
1612         vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1613         vectordiff( vertices + 3 * v4, vertices + 3 * v1, d2);
1614         normcrossprod( d1, d2, surfnormal);
1615         vectoradd( normals + 3 * v1, surfnormal);
1616         vectordiff( vertices + 3 * v3, vertices + 3 * v2, d1);
1617         vectordiff( vertices + 3 * v1, vertices + 3 * v2, d2);
1618         normcrossprod( d1, d2, surfnormal);
1619         vectoradd( normals + 3 * v2, surfnormal);
1620         vectordiff( vertices + 3 * v4, vertices + 3 * v3, d1);
1621         vectordiff( vertices + 3 * v2, vertices + 3 * v3, d2);
1622         normcrossprod( d1, d2, surfnormal);
1623         vectoradd( normals + 3 * v3, surfnormal);
1624         vectordiff( vertices + 3 * v1, vertices + 3 * v4, d1);
1625         vectordiff( vertices + 3 * v3, vertices + 3 * v4, d2);
1626         normcrossprod( d1, d2, surfnormal);
1627         vectoradd( normals + 3 * v4, surfnormal);
1628   }
1629 }
1630
1631 static void
1632 collect_vertex( void *curvert, double x, double y, double z)
1633 {
1634   (*(float**)curvert)[0] = x;
1635   (*(float**)curvert)[1] = y;
1636   (*(float**)curvert)[2] = z;
1637   (*(float**)curvert) += 3;
1638 }
1639
1640 static void
1641 draw_face( void *dummy, int v1, int v2, int v3, int v4)
1642 {
1643   glBegin( v4 == -1 ? GL_TRIANGLES : GL_QUADS);
1644   glNormal3f( normals[v1*3], normals[v1*3+1], normals[v1*3+2]);
1645   glVertex3f( vertices[v1*3], vertices[v1*3+1], vertices[v1*3+2]);
1646   glNormal3f( normals[v2*3], normals[v2*3+1], normals[v2*3+2]);
1647   glVertex3f( vertices[v2*3], vertices[v2*3+1], vertices[v2*3+2]);
1648   glNormal3f( normals[v3*3], normals[v3*3+1], normals[v3*3+2]);
1649   glVertex3f( vertices[v3*3], vertices[v3*3+1], vertices[v3*3+2]);
1650   if( v4 != -1) {
1651         glNormal3f( normals[v4*3], normals[v4*3+1], normals[v4*3+2]);
1652         glVertex3f( vertices[v4*3], vertices[v4*3+1], vertices[v4*3+2]);
1653   }
1654   glEnd();
1655 }
1656
1657 static int
1658 draw_piece( unsigned short *piece_data)
1659 {
1660   int i;
1661   float *curvert;
1662   int count = 0;
1663
1664   /* Count how many vertices this piece has */
1665   enumerate_vertices( piece_data, NULL, count_vertex);
1666
1667   /* Allocate memory for the vertices and for the vertex normals */
1668   vertices = malloc( sizeof(float) * 3 * numverts);
1669   normals = malloc( sizeof(float) * 3 * numverts);
1670   if( !vertices || !normals) exit(1);
1671
1672   /* Collect the vertex coordinates */
1673   curvert = vertices;
1674   enumerate_vertices( piece_data, &curvert, collect_vertex);
1675
1676   /* Zero out the normals */
1677   for( i=0; i < numverts * 3; i++) {
1678         normals[i] = 0.0;
1679   }
1680
1681   /* Add up all the face normals at each vertex */
1682   enumerate_faces( piece_data, NULL, NULL, add_normal);
1683
1684   /* Normalize the vertex normals */
1685   for( i=0; i < numverts; i++) {
1686         normalize( normals + i * 3);
1687   }
1688
1689   /* Now draw the faces */
1690   enumerate_faces( piece_data, NULL, &count, draw_face);
1691
1692   free( normals);
1693   free( vertices);
1694
1695   if (count <= 1) abort();
1696   return count;
1697 }
1698
1699 void chessmodels_gen_lists( int classic, int poly_count[PIECES]) {
1700
1701   Bool queen_only_p = classic < 0;
1702   if (classic < 0) classic = 0;
1703
1704   piece_size = classic ? 0.095 / 100 : 0.3 / 8192;
1705
1706   glGenLists (20); /* this is horrible! List numbers are hardcoded! */
1707
1708   glNewList(QUEEN, GL_COMPILE);
1709   poly_count[QUEEN] = draw_piece( classic ? classic_queen_data : queen_data);
1710   glEndList();
1711
1712   if (queen_only_p) return;
1713
1714   glNewList(KING, GL_COMPILE);
1715   poly_count[KING] = draw_piece( classic ? classic_king_data : king_data);
1716   glEndList();
1717
1718   glNewList(BISHOP, GL_COMPILE);
1719   poly_count[BISHOP] = draw_piece( classic ? classic_bishop_data : bishop_data);
1720   glEndList();
1721
1722   glNewList(KNIGHT, GL_COMPILE);
1723   poly_count[KNIGHT] = draw_piece( classic ? classic_knight_data : knight_data);
1724   glEndList();
1725
1726   glNewList(ROOK, GL_COMPILE);
1727   poly_count[ROOK] = draw_piece( classic ? classic_rook_data : rook_data);
1728   glEndList();
1729
1730   glNewList(PAWN, GL_COMPILE);
1731   poly_count[PAWN] = draw_piece( classic ? classic_pawn_data : pawn_data);
1732   glEndList();
1733 }