1 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1998, 2000
2 * Jamie Zawinski <jwz@jwz.org>
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation. No representations are made about the suitability of this
9 * software for any purpose. It is provided "as is" without express or
12 * This code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller,
17 #include "screenhack.h"
19 #define POINT_COUNT 600
20 #define LINE_COUNT 1200
22 #define ANGLE_SCALE 0.001
44 unsigned char old_dep, new_dep;
66 double hs_cos_xy, hs_sin_xy;
67 double hs_cos_xz, hs_sin_xz;
68 double hs_cos_yz, hs_sin_yz;
69 double hs_cos_xw, hs_sin_xw;
70 double hs_cos_yw, hs_sin_yw;
71 double hs_cos_zw, hs_sin_zw;
72 double hs_ref_ax, hs_ref_ay, hs_ref_az, hs_ref_aw;
73 double hs_ref_bx, hs_ref_by, hs_ref_bz, hs_ref_bw;
74 double hs_ref_cx, hs_ref_cy, hs_ref_cz, hs_ref_cw;
75 double hs_ref_dx, hs_ref_dy, hs_ref_dz, hs_ref_dw;
76 GC hs_color_gcs[8][8];
77 char hs_moved[POINT_COUNT];
78 struct point_state hs_points[POINT_COUNT];
81 static const struct point_info point_table[POINT_COUNT];
82 static const struct line_info line_table[LINE_COUNT];
84 static struct hyper_state hyper_state;
86 static void init (struct hyper_state *hs);
87 static void hyper (struct hyper_state *hs);
88 static void check_events (struct hyper_state *hs);
89 static void set_sizes (struct hyper_state *hs, int width, int height);
92 char *progclass = "Hyperball";
104 ".background: black",
105 ".foreground: white",
173 XrmOptionDescRec options [] =
175 { "-observer-z", ".observer-z", XrmoptionSepArg, 0 },
176 { "-delay", ".delay", XrmoptionSepArg, 0 },
177 { "-xw", ".xw", XrmoptionSepArg, 0 },
178 { "-xy", ".xy", XrmoptionSepArg, 0 },
179 { "-xz", ".xz", XrmoptionSepArg, 0 },
180 { "-yw", ".yw", XrmoptionSepArg, 0 },
181 { "-yz", ".yz", XrmoptionSepArg, 0 },
182 { "-zw", ".zw", XrmoptionSepArg, 0 },
188 screenhack (Display *d, Window w)
190 struct hyper_state *hs;
203 init (struct hyper_state *hs)
209 /* double xy, xz, yz, xw, yw, zw; */
210 unsigned long bg_pixel;
214 dpy = hs->hs_display;
217 observer_z = get_float_resource ("observer-z", "Float");
218 if (observer_z < 1.125)
220 hs->hs_observer_z = observer_z;
224 XWindowAttributes wa;
228 root = get_boolean_resource("root", "Boolean");
229 XGetWindowAttributes (dpy, win, &wa);
230 XSelectInput(dpy, win, root ? ExposureMask :
231 wa.your_event_mask | ExposureMask | ButtonPressMask);
236 set_sizes (hs, width, height);
239 hs->hs_angle_xy = get_float_resource ("xy", "Float") * ANGLE_SCALE;
240 hs->hs_angle_xz = get_float_resource ("xz", "Float") * ANGLE_SCALE;
241 hs->hs_angle_yz = get_float_resource ("yz", "Float") * ANGLE_SCALE;
242 hs->hs_angle_xw = get_float_resource ("xw", "Float") * ANGLE_SCALE;
243 hs->hs_angle_yw = get_float_resource ("yw", "Float") * ANGLE_SCALE;
244 hs->hs_angle_zw = get_float_resource ("zw", "Float") * ANGLE_SCALE;
246 delay = get_integer_resource ("delay", "Integer");
247 hs->hs_delay = delay;
249 bg_pixel = get_pixel_resource ("background", "Background", dpy, cmap);
254 unsigned long fg_pixel;
257 gcv.function = GXcopy;
258 gcv.foreground = bg_pixel;
259 black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
260 fg_pixel = get_pixel_resource ("foreground", "Foreground", dpy, cmap);
261 gcv.foreground = fg_pixel;
262 white_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
263 hs->hs_color_gcs[0][0] = black_gc;
264 hs->hs_color_gcs[0][1] = white_gc;
271 gcv.function = GXxor;
272 for (col = 0; col < 8; col++)
273 for (dep = 0; dep < 8; dep++)
276 unsigned long fg_pixel;
279 sprintf (buffer, "color%d%d", col, dep);
280 fg_pixel = get_pixel_resource (buffer, "Foreground", dpy, cmap);
281 gcv.foreground = fg_pixel ^ bg_pixel;
282 color_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
283 hs->hs_color_gcs[col][dep] = color_gc;
295 double cos_xy, sin_xy;
296 double cos_xz, sin_xz;
297 double cos_yz, sin_yz;
298 double cos_xw, sin_xw;
299 double cos_yw, sin_yw;
300 double cos_zw, sin_zw;
303 hs->hs_ref_ax = 1.0, hs->hs_ref_ay = 0.0, hs->hs_ref_az = 0.0, hs->hs_ref_aw = 0.0;
304 hs->hs_ref_bx = 0.0, hs->hs_ref_by = 1.0, hs->hs_ref_bz = 0.0, hs->hs_ref_bw = 0.0;
305 hs->hs_ref_cx = 0.0, hs->hs_ref_cy = 0.0, hs->hs_ref_cz = 1.0, hs->hs_ref_cw = 0.0;
306 hs->hs_ref_dx = 0.0, hs->hs_ref_dy = 0.0, hs->hs_ref_dz = 0.0, hs->hs_ref_dw = 1.0;
308 xy = hs->hs_angle_xy;
309 xz = hs->hs_angle_xz;
310 yz = hs->hs_angle_yz;
311 xw = hs->hs_angle_xw;
312 yw = hs->hs_angle_yw;
313 zw = hs->hs_angle_zw;
315 cos_xy = cos (xy), sin_xy = sin (xy);
316 hs->hs_cos_xy = cos_xy, hs->hs_sin_xy = sin_xy;
317 cos_xz = cos (xz), sin_xz = sin (xz);
318 hs->hs_cos_xz = cos_xz, hs->hs_sin_xz = sin_xz;
319 cos_yz = cos (yz), sin_yz = sin (yz);
320 hs->hs_cos_yz = cos_yz, hs->hs_sin_yz = sin_yz;
321 cos_xw = cos (xw), sin_xw = sin (xw);
322 hs->hs_cos_xw = cos_xw, hs->hs_sin_xw = sin_xw;
323 cos_yw = cos (yw), sin_yw = sin (yw);
324 hs->hs_cos_yw = cos_yw, hs->hs_sin_yw = sin_yw;
325 cos_zw = cos (zw), sin_zw = sin (zw);
326 hs->hs_cos_zw = cos_zw, hs->hs_sin_zw = sin_zw;
332 hyper (struct hyper_state *hs)
349 resize = hs->hs_resize;
350 if (icon || !(roted | resize))
355 const struct point_info *point_ptr;
356 struct point_state *point_state;
364 point_ptr = &point_table[0];
365 point_state = &hs->hs_points[0];
366 mark_ptr = &hs->hs_moved[0];
374 double az, bz, cz, dz;
376 double ax, bx, cx, dx;
378 double ay, by, cy, dy;
391 pos_a = point_ptr->pg_a;
392 pos_b = point_ptr->pg_b;
393 pos_c = point_ptr->pg_c;
394 pos_d = point_ptr->pg_d;
396 az = hs->hs_ref_az; bz = hs->hs_ref_bz; cz = hs->hs_ref_cz; dz = hs->hs_ref_dz;
397 ax = hs->hs_ref_ax; bx = hs->hs_ref_bx; cx = hs->hs_ref_cx; dx = hs->hs_ref_dx;
398 ay = hs->hs_ref_ay; by = hs->hs_ref_by; cy = hs->hs_ref_cy; dy = hs->hs_ref_dy;
399 sum_z = pos_a * az + pos_b * bz + pos_c * cz + pos_d * dz;
400 observer_z = hs->hs_observer_z;
401 unit_scale = hs->hs_unit_scale;
402 sum_x = pos_a * ax + pos_b * bx + pos_c * cx + pos_d * dx;
403 sum_y = pos_a * ay + pos_b * by + pos_c * cy + pos_d * dy;
404 mul = unit_scale / (observer_z - sum_z);
405 offset_x = hs->hs_offset_x;
406 offset_y = hs->hs_offset_y;
407 old_x = point_state->new_x;
408 old_y = point_state->new_y;
409 old_dep = point_state->new_dep;
410 xf = sum_x * mul + offset_x;
411 yf = sum_y * mul + offset_y;
412 new_x = (int)rint(xf);
413 new_y = (int)rint(yf);
414 new_dep = (int)floor(sum_z * -128.0) + 128;
415 point_state->old_x = old_x;
416 point_state->old_y = old_y;
417 point_state->old_dep = old_dep;
418 point_state->new_x = new_x;
419 point_state->new_y = new_y;
420 point_state->new_dep = new_dep;
422 mov = new_x != old_x || new_y != old_y || new_dep != old_dep;
430 redraw = hs->hs_redraw;
431 if (icon || !(roted | redraw))
436 const struct line_info *li_ptr;
442 li_ptr = &line_table[0];
444 dpy = hs->hs_display;
454 struct point_state *sp;
455 struct point_state *sq;
469 col = li_ptr->li_color;
471 mov_p = hs->hs_moved[ip];
472 mov_q = hs->hs_moved[iq];
473 if (!(redraw | mov_p | mov_q))
476 sp = &hs->hs_points[ip];
477 sq = &hs->hs_points[iq];
481 erase_gc = hs->hs_color_gcs[0][0];
482 draw_gc = hs->hs_color_gcs[0][1];
488 old_sum = sp->old_dep + sq->old_dep;
489 new_sum = sp->new_dep + sq->new_dep;
490 row = &hs->hs_color_gcs[col][0];
491 old_dep = old_sum >> 6;
492 new_dep = new_sum >> 6;
493 erase_gc = row[old_dep];
494 draw_gc = row[new_dep];
503 XDrawLine (dpy, win, erase_gc, p_x, p_y, q_x, q_y);
510 XDrawLine (dpy, win, draw_gc, p_x, p_y, q_x, q_y);
532 /* If you get error messages about the following forms, and you think you're
533 using an ANSI C conforming compiler, then you're mistaken. Possibly you're
534 mixing an ANSI compiler with a non-ANSI preprocessor, or vice versa.
535 Regardless, your system is broken; it's not a bug in this program.
537 #if defined(__STDC__) || defined(__ANSI_CPP__)
539 #define rotate(name,dim0,dim1) \
540 old_u = hs->hs_ref_##name##dim0; \
541 old_v = hs->hs_ref_##name##dim1; \
542 new_u = old_u * cos_a + old_v * sin_a; \
543 new_v = old_v * cos_a - old_u * sin_a; \
544 hs->hs_ref_##name##dim0 = new_u; \
545 hs->hs_ref_##name##dim1 = new_v;
547 #define rotates(dim0,dim1) \
548 if (hs->hs_sin_##dim0##dim1 != 0) { \
549 cos_a = hs->hs_cos_##dim0##dim1; \
550 sin_a = hs->hs_sin_##dim0##dim1; \
551 rotate(a, dim0, dim1); \
552 rotate(b, dim0, dim1); \
553 rotate(c, dim0, dim1); \
554 rotate(d, dim0, dim1); \
557 #else /* !__STDC__, courtesy of Andreas Luik <luik@isa.de> */
559 #define rotate(name,dim0,dim1,cos,sin) \
560 old_u = hs->hs_ref_/**/name/**/dim0; \
561 old_v = hs->hs_ref_/**/name/**/dim1; \
562 new_u = old_u * cos_a + old_v * sin_a; \
563 new_v = old_v * cos_a - old_u * sin_a; \
564 hs->hs_ref_/**/name/**/dim0 = new_u; \
565 hs->hs_ref_/**/name/**/dim1 = new_v;
567 #define rotates(dim0,dim1) \
568 if (hs->hs_sin_/**/dim0/**/dim1 != 0) { \
569 cos_a = hs->hs_cos_/**/dim0/**/dim1; \
570 sin_a = hs->hs_sin_/**/dim0/**/dim1; \
571 rotate(a, dim0, dim1); \
572 rotate(b, dim0, dim1); \
573 rotate(c, dim0, dim1); \
574 rotate(d, dim0, dim1); \
588 /* stop = hs->hs_stop; */
589 delay = hs->hs_delay;
590 if (stop && delay < 10000)
599 check_events (struct hyper_state *hs)
608 dpy = hs->hs_display;
609 count = XEventsQueued (dpy, QueuedAfterReading);
618 XNextEvent (dpy, &e);
627 case ConfigureNotify:
634 switch (e.xbutton.button)
637 hs->hs_stop = !hs->hs_stop;
650 screenhack_handle_event(dpy, &e);
655 resize = hs->hs_resize;
659 XWindowAttributes wa;
663 XGetWindowAttributes (dpy, win, &wa);
666 set_sizes (hs, width, height);
669 redraw = hs->hs_redraw;
671 XClearWindow (dpy, win);
676 set_sizes (struct hyper_state *hs, int width, int height)
685 observer_z = hs->hs_observer_z;
686 min_dim = width < height ? width : height;
687 var = sqrt(observer_z * observer_z - 1.0);
688 offset_x = 0.5 * (width - 1);
689 offset_y = 0.5 * (height - 1);
690 unit_scale = 0.4 * min_dim * var;
691 hs->hs_offset_x = (float)offset_x;
692 hs->hs_offset_y = (float)offset_y;
693 hs->hs_unit_scale = (float)unit_scale;
699 static const struct point_info point_table[POINT_COUNT] =
701 { 0.93, 0.30, 0.09, 0.03, },
702 { 0.84, 0.49, -0.08, 0.05, },
703 { 0.72, 0.65, 0.02, -0.09, },
704 { 0.57, 0.79, 0.05, 0.07, },
705 { 0.40, 0.89, -0.09, -0.01, },
706 { 0.20, 0.95, 0.07, -0.06, },
707 { 0.00, 0.97, 0.00, 0.09, },
708 { -0.20, 0.95, -0.07, -0.06, },
709 { -0.40, 0.89, 0.09, -0.01, },
710 { -0.57, 0.79, -0.05, 0.07, },
711 { -0.72, 0.65, -0.02, -0.09, },
712 { -0.84, 0.49, 0.08, 0.05, },
713 { -0.93, 0.30, -0.09, 0.03, },
714 { -0.97, 0.10, 0.04, -0.08, },
715 { -0.97, -0.10, 0.04, 0.08, },
716 { -0.93, -0.30, -0.09, -0.03, },
717 { -0.84, -0.49, 0.08, -0.05, },
718 { -0.72, -0.65, -0.02, 0.09, },
719 { -0.57, -0.79, -0.05, -0.07, },
720 { -0.40, -0.89, 0.09, 0.01, },
721 { -0.20, -0.95, -0.07, 0.06, },
722 { 0.00, -0.97, 0.00, -0.09, },
723 { 0.20, -0.95, 0.07, 0.06, },
724 { 0.40, -0.89, -0.09, 0.01, },
725 { 0.57, -0.79, 0.05, -0.07, },
726 { 0.72, -0.65, 0.02, 0.09, },
727 { 0.84, -0.49, -0.08, -0.05, },
728 { 0.93, -0.30, 0.09, -0.03, },
729 { 0.97, -0.10, -0.04, 0.08, },
730 { 0.97, 0.10, -0.04, -0.08, },
731 { 0.27, 0.83, -0.13, -0.41, },
732 { 0.09, 0.87, 0.40, 0.18, },
733 { -0.09, 0.87, -0.40, 0.18, },
734 { -0.27, 0.83, 0.13, -0.41, },
735 { -0.44, 0.76, 0.22, 0.38, },
736 { -0.59, 0.65, -0.42, -0.09, },
737 { -0.71, 0.51, 0.35, -0.25, },
738 { -0.80, 0.36, -0.05, 0.43, },
739 { -0.86, 0.18, -0.29, -0.32, },
740 { -0.88, 0.00, 0.43, 0.00, },
741 { -0.86, -0.18, -0.29, 0.32, },
742 { -0.80, -0.36, -0.05, -0.43, },
743 { -0.71, -0.51, 0.35, 0.25, },
744 { -0.59, -0.65, -0.42, 0.09, },
745 { -0.44, -0.76, 0.22, -0.38, },
746 { -0.27, -0.83, 0.13, 0.41, },
747 { -0.09, -0.87, -0.40, -0.18, },
748 { 0.09, -0.87, 0.40, -0.18, },
749 { 0.27, -0.83, -0.13, 0.41, },
750 { 0.44, -0.76, -0.22, -0.38, },
751 { 0.59, -0.65, 0.42, 0.09, },
752 { 0.71, -0.51, -0.35, 0.25, },
753 { 0.80, -0.36, 0.05, -0.43, },
754 { 0.86, -0.18, 0.29, 0.32, },
755 { 0.88, 0.00, -0.43, 0.00, },
756 { 0.86, 0.18, 0.29, -0.32, },
757 { 0.80, 0.36, 0.05, 0.43, },
758 { 0.71, 0.51, -0.35, -0.25, },
759 { 0.59, 0.65, 0.42, -0.09, },
760 { 0.44, 0.76, -0.22, 0.38, },
761 { -0.13, 0.41, -0.27, 0.83, },
762 { -0.22, 0.38, -0.44, -0.76, },
763 { -0.29, 0.32, 0.86, 0.18, },
764 { -0.35, 0.25, -0.71, 0.51, },
765 { -0.40, 0.18, 0.09, -0.87, },
766 { -0.42, 0.09, 0.59, 0.65, },
767 { -0.43, 0.00, -0.88, 0.00, },
768 { -0.42, -0.09, 0.59, -0.65, },
769 { -0.40, -0.18, 0.09, 0.87, },
770 { -0.35, -0.25, -0.71, -0.51, },
771 { -0.29, -0.32, 0.86, -0.18, },
772 { -0.22, -0.38, -0.44, 0.76, },
773 { -0.13, -0.41, -0.27, -0.83, },
774 { -0.05, -0.43, 0.80, 0.36, },
775 { 0.05, -0.43, -0.80, 0.36, },
776 { 0.13, -0.41, 0.27, -0.83, },
777 { 0.22, -0.38, 0.44, 0.76, },
778 { 0.29, -0.32, -0.86, -0.18, },
779 { 0.35, -0.25, 0.71, -0.51, },
780 { 0.40, -0.18, -0.09, 0.87, },
781 { 0.42, -0.09, -0.59, -0.65, },
782 { 0.43, 0.00, 0.88, 0.00, },
783 { 0.42, 0.09, -0.59, 0.65, },
784 { 0.40, 0.18, -0.09, -0.87, },
785 { 0.35, 0.25, 0.71, 0.51, },
786 { 0.29, 0.32, -0.86, 0.18, },
787 { 0.22, 0.38, 0.44, -0.76, },
788 { 0.13, 0.41, 0.27, 0.83, },
789 { 0.05, 0.43, -0.80, -0.36, },
790 { -0.05, 0.43, 0.80, -0.36, },
791 { 0.09, -0.03, -0.93, 0.30, },
792 { 0.09, -0.01, 0.40, -0.89, },
793 { 0.09, 0.01, 0.40, 0.89, },
794 { 0.09, 0.03, -0.93, -0.30, },
795 { 0.08, 0.05, 0.84, -0.49, },
796 { 0.07, 0.06, -0.20, 0.95, },
797 { 0.05, 0.07, -0.57, -0.79, },
798 { 0.04, 0.08, 0.97, 0.10, },
799 { 0.02, 0.09, -0.72, 0.65, },
800 { 0.00, 0.09, 0.00, -0.97, },
801 { -0.02, 0.09, 0.72, 0.65, },
802 { -0.04, 0.08, -0.97, 0.10, },
803 { -0.05, 0.07, 0.57, -0.79, },
804 { -0.07, 0.06, 0.20, 0.95, },
805 { -0.08, 0.05, -0.84, -0.49, },
806 { -0.09, 0.03, 0.93, -0.30, },
807 { -0.09, 0.01, -0.40, 0.89, },
808 { -0.09, -0.01, -0.40, -0.89, },
809 { -0.09, -0.03, 0.93, 0.30, },
810 { -0.08, -0.05, -0.84, 0.49, },
811 { -0.07, -0.06, 0.20, -0.95, },
812 { -0.05, -0.07, 0.57, 0.79, },
813 { -0.04, -0.08, -0.97, -0.10, },
814 { -0.02, -0.09, 0.72, -0.65, },
815 { 0.00, -0.09, 0.00, 0.97, },
816 { 0.02, -0.09, -0.72, -0.65, },
817 { 0.04, -0.08, 0.97, -0.10, },
818 { 0.05, -0.07, -0.57, 0.79, },
819 { 0.07, -0.06, -0.20, -0.95, },
820 { 0.08, -0.05, 0.84, 0.49, },
821 { 0.64, 0.67, -0.15, -0.28, },
822 { 0.49, 0.79, 0.30, 0.07, },
823 { 0.31, 0.87, -0.26, 0.18, },
824 { 0.13, 0.92, 0.04, -0.31, },
825 { -0.07, 0.92, 0.20, 0.24, },
826 { -0.26, 0.89, -0.31, -0.01, },
827 { -0.44, 0.82, 0.22, -0.23, },
828 { -0.60, 0.71, 0.02, 0.31, },
829 { -0.73, 0.57, -0.25, -0.19, },
830 { -0.83, 0.40, 0.31, -0.06, },
831 { -0.90, 0.22, -0.16, 0.27, },
832 { -0.93, 0.03, -0.09, -0.30, },
833 { -0.91, -0.16, 0.28, 0.14, },
834 { -0.86, -0.35, -0.29, 0.12, },
835 { -0.77, -0.52, 0.11, -0.29, },
836 { -0.64, -0.67, 0.15, 0.28, },
837 { -0.49, -0.79, -0.30, -0.07, },
838 { -0.31, -0.87, 0.26, -0.18, },
839 { -0.13, -0.92, -0.04, 0.31, },
840 { 0.07, -0.92, -0.20, -0.24, },
841 { 0.26, -0.89, 0.31, 0.01, },
842 { 0.44, -0.82, -0.22, 0.23, },
843 { 0.60, -0.71, -0.02, -0.31, },
844 { 0.73, -0.57, 0.25, 0.19, },
845 { 0.83, -0.40, -0.31, 0.06, },
846 { 0.90, -0.22, 0.16, -0.27, },
847 { 0.93, -0.03, 0.09, 0.30, },
848 { 0.91, 0.16, -0.28, -0.14, },
849 { 0.86, 0.35, 0.29, -0.12, },
850 { 0.77, 0.52, -0.11, 0.29, },
851 { 0.44, 0.82, -0.22, -0.23, },
852 { 0.26, 0.89, 0.31, -0.01, },
853 { 0.07, 0.92, -0.20, 0.24, },
854 { -0.12, 0.92, -0.04, -0.31, },
855 { -0.31, 0.87, 0.26, 0.18, },
856 { -0.49, 0.79, -0.30, 0.07, },
857 { -0.64, 0.67, 0.15, -0.28, },
858 { -0.77, 0.52, 0.11, 0.29, },
859 { -0.86, 0.35, -0.29, -0.12, },
860 { -0.91, 0.16, 0.28, -0.14, },
861 { -0.93, -0.03, -0.09, 0.30, },
862 { -0.90, -0.22, -0.16, -0.27, },
863 { -0.83, -0.40, 0.31, 0.06, },
864 { -0.73, -0.57, -0.25, 0.19, },
865 { -0.60, -0.71, 0.02, -0.31, },
866 { -0.44, -0.82, 0.22, 0.23, },
867 { -0.26, -0.89, -0.31, 0.01, },
868 { -0.07, -0.92, 0.20, -0.24, },
869 { 0.12, -0.92, 0.04, 0.31, },
870 { 0.31, -0.87, -0.26, -0.18, },
871 { 0.49, -0.79, 0.30, -0.07, },
872 { 0.64, -0.67, -0.15, 0.28, },
873 { 0.77, -0.52, -0.11, -0.29, },
874 { 0.86, -0.35, 0.29, 0.12, },
875 { 0.91, -0.16, -0.28, 0.14, },
876 { 0.93, 0.03, 0.09, -0.30, },
877 { 0.90, 0.22, 0.16, 0.27, },
878 { 0.83, 0.40, -0.31, -0.06, },
879 { 0.73, 0.57, 0.25, -0.19, },
880 { 0.60, 0.71, -0.02, 0.31, },
881 { -0.13, 0.83, -0.27, -0.41, },
882 { -0.30, 0.79, 0.49, 0.07, },
883 { -0.46, 0.71, -0.38, 0.31, },
884 { -0.60, 0.60, 0.02, -0.49, },
885 { -0.71, 0.46, 0.35, 0.35, },
886 { -0.79, 0.30, -0.49, 0.03, },
887 { -0.83, 0.13, 0.31, -0.38, },
888 { -0.84, -0.05, 0.08, 0.49, },
889 { -0.81, -0.22, -0.41, -0.27, },
890 { -0.75, -0.38, 0.48, -0.13, },
891 { -0.65, -0.53, -0.22, 0.44, },
892 { -0.53, -0.66, -0.18, -0.46, },
893 { -0.38, -0.75, 0.46, 0.17, },
894 { -0.22, -0.82, -0.44, 0.23, },
895 { -0.04, -0.84, 0.12, -0.48, },
896 { 0.13, -0.83, 0.27, 0.41, },
897 { 0.30, -0.79, -0.49, -0.07, },
898 { 0.46, -0.71, 0.38, -0.31, },
899 { 0.60, -0.60, -0.02, 0.49, },
900 { 0.71, -0.46, -0.35, -0.35, },
901 { 0.79, -0.30, 0.49, -0.03, },
902 { 0.83, -0.13, -0.31, 0.38, },
903 { 0.84, 0.05, -0.08, -0.49, },
904 { 0.81, 0.22, 0.41, 0.27, },
905 { 0.75, 0.38, -0.48, 0.13, },
906 { 0.65, 0.53, 0.22, -0.44, },
907 { 0.53, 0.66, 0.18, 0.46, },
908 { 0.38, 0.75, -0.46, -0.17, },
909 { 0.22, 0.82, 0.44, -0.23, },
910 { 0.04, 0.84, -0.12, 0.48, },
911 { -0.65, 0.53, -0.22, -0.44, },
912 { -0.75, 0.38, 0.48, 0.13, },
913 { -0.81, 0.22, -0.41, 0.27, },
914 { -0.84, 0.05, 0.08, -0.49, },
915 { -0.83, -0.13, 0.31, 0.38, },
916 { -0.79, -0.30, -0.49, -0.03, },
917 { -0.71, -0.46, 0.35, -0.35, },
918 { -0.60, -0.60, 0.02, 0.49, },
919 { -0.46, -0.71, -0.38, -0.31, },
920 { -0.30, -0.79, 0.49, -0.07, },
921 { -0.13, -0.83, -0.27, 0.41, },
922 { 0.04, -0.84, -0.13, -0.48, },
923 { 0.22, -0.82, 0.44, 0.23, },
924 { 0.38, -0.75, -0.46, 0.17, },
925 { 0.53, -0.66, 0.18, -0.46, },
926 { 0.65, -0.53, 0.22, 0.44, },
927 { 0.75, -0.38, -0.48, -0.13, },
928 { 0.81, -0.22, 0.41, -0.27, },
929 { 0.84, -0.05, -0.08, 0.49, },
930 { 0.83, 0.13, -0.31, -0.38, },
931 { 0.79, 0.30, 0.49, 0.03, },
932 { 0.71, 0.46, -0.35, 0.35, },
933 { 0.60, 0.60, -0.02, -0.49, },
934 { 0.46, 0.71, 0.38, 0.31, },
935 { 0.30, 0.79, -0.49, 0.07, },
936 { 0.13, 0.83, 0.27, -0.41, },
937 { -0.04, 0.84, 0.13, 0.48, },
938 { -0.22, 0.82, -0.44, -0.23, },
939 { -0.38, 0.75, 0.46, -0.17, },
940 { -0.53, 0.66, -0.18, 0.46, },
941 { 0.11, 0.78, -0.33, -0.47, },
942 { -0.05, 0.79, 0.57, 0.07, },
943 { -0.22, 0.76, -0.44, 0.38, },
944 { -0.37, 0.70, 0.01, -0.58, },
945 { -0.51, 0.60, 0.42, 0.40, },
946 { -0.62, 0.49, -0.57, 0.05, },
947 { -0.71, 0.35, 0.35, -0.46, },
948 { -0.77, 0.19, 0.11, 0.57, },
949 { -0.79, 0.03, -0.49, -0.30, },
950 { -0.78, -0.14, 0.55, -0.16, },
951 { -0.73, -0.29, -0.25, 0.52, },
952 { -0.65, -0.44, -0.22, -0.53, },
953 { -0.55, -0.57, 0.54, 0.19, },
954 { -0.42, -0.67, -0.51, 0.28, },
955 { -0.27, -0.74, 0.13, -0.56, },
956 { -0.11, -0.78, 0.33, 0.47, },
957 { 0.05, -0.79, -0.57, -0.07, },
958 { 0.22, -0.76, 0.44, -0.38, },
959 { 0.37, -0.70, -0.01, 0.58, },
960 { 0.51, -0.60, -0.42, -0.40, },
961 { 0.62, -0.49, 0.57, -0.05, },
962 { 0.71, -0.35, -0.35, 0.46, },
963 { 0.77, -0.19, -0.11, -0.57, },
964 { 0.79, -0.03, 0.49, 0.30, },
965 { 0.78, 0.14, -0.55, 0.16, },
966 { 0.73, 0.29, 0.25, -0.52, },
967 { 0.65, 0.44, 0.22, 0.53, },
968 { 0.55, 0.57, -0.54, -0.19, },
969 { 0.42, 0.67, 0.51, -0.28, },
970 { 0.27, 0.74, -0.13, 0.56, },
971 { -0.73, 0.29, -0.25, -0.52, },
972 { -0.78, 0.14, 0.55, 0.16, },
973 { -0.79, -0.03, -0.49, 0.30, },
974 { -0.77, -0.19, 0.11, -0.57, },
975 { -0.71, -0.35, 0.35, 0.46, },
976 { -0.62, -0.49, -0.57, -0.05, },
977 { -0.51, -0.60, 0.42, -0.40, },
978 { -0.37, -0.70, 0.01, 0.58, },
979 { -0.22, -0.76, -0.44, -0.38, },
980 { -0.05, -0.79, 0.57, -0.07, },
981 { 0.11, -0.78, -0.33, 0.47, },
982 { 0.27, -0.74, -0.13, -0.56, },
983 { 0.42, -0.67, 0.51, 0.28, },
984 { 0.55, -0.57, -0.54, 0.19, },
985 { 0.65, -0.44, 0.22, -0.53, },
986 { 0.73, -0.29, 0.25, 0.52, },
987 { 0.78, -0.14, -0.55, -0.16, },
988 { 0.79, 0.03, 0.49, -0.30, },
989 { 0.77, 0.19, -0.11, 0.57, },
990 { 0.71, 0.35, -0.35, -0.46, },
991 { 0.62, 0.49, 0.57, 0.05, },
992 { 0.51, 0.60, -0.42, 0.40, },
993 { 0.37, 0.70, -0.01, -0.58, },
994 { 0.22, 0.76, 0.44, 0.38, },
995 { 0.05, 0.79, -0.57, 0.07, },
996 { -0.11, 0.78, 0.33, -0.47, },
997 { -0.27, 0.74, 0.13, 0.56, },
998 { -0.42, 0.67, -0.51, -0.28, },
999 { -0.55, 0.57, 0.54, -0.19, },
1000 { -0.65, 0.44, -0.22, 0.53, },
1001 { -0.28, 0.70, -0.24, -0.58, },
1002 { -0.42, 0.62, 0.59, 0.21, },
1003 { -0.54, 0.52, -0.55, 0.29, },
1004 { -0.64, 0.40, 0.15, -0.60, },
1005 { -0.71, 0.25, 0.35, 0.51, },
1006 { -0.75, 0.10, -0.62, -0.08, },
1007 { -0.75, -0.06, 0.48, -0.40, },
1008 { -0.72, -0.21, -0.02, 0.62, },
1009 { -0.66, -0.36, -0.45, -0.43, },
1010 { -0.57, -0.49, 0.62, -0.05, },
1011 { -0.46, -0.60, -0.38, 0.49, },
1012 { -0.33, -0.68, -0.11, -0.61, },
1013 { -0.18, -0.73, 0.53, 0.33, },
1014 { -0.02, -0.75, -0.60, 0.17, },
1015 { 0.13, -0.74, 0.27, -0.56, },
1016 { 0.28, -0.70, 0.24, 0.58, },
1017 { 0.42, -0.62, -0.59, -0.21, },
1018 { 0.54, -0.52, 0.55, -0.29, },
1019 { 0.64, -0.40, -0.15, 0.60, },
1020 { 0.71, -0.25, -0.35, -0.51, },
1021 { 0.75, -0.10, 0.62, 0.08, },
1022 { 0.75, 0.06, -0.48, 0.40, },
1023 { 0.72, 0.21, 0.02, -0.62, },
1024 { 0.66, 0.36, 0.45, 0.43, },
1025 { 0.57, 0.49, -0.62, 0.05, },
1026 { 0.46, 0.60, 0.38, -0.49, },
1027 { 0.33, 0.68, 0.11, 0.61, },
1028 { 0.18, 0.73, -0.53, -0.33, },
1029 { 0.02, 0.75, 0.60, -0.17, },
1030 { -0.13, 0.74, -0.27, 0.56, },
1031 { -0.46, 0.60, -0.38, -0.49, },
1032 { -0.57, 0.49, 0.62, 0.05, },
1033 { -0.66, 0.36, -0.45, 0.43, },
1034 { -0.72, 0.21, -0.02, -0.62, },
1035 { -0.75, 0.06, 0.48, 0.40, },
1036 { -0.75, -0.10, -0.62, 0.08, },
1037 { -0.71, -0.25, 0.35, -0.51, },
1038 { -0.64, -0.40, 0.15, 0.60, },
1039 { -0.54, -0.52, -0.55, -0.29, },
1040 { -0.42, -0.62, 0.59, -0.21, },
1041 { -0.28, -0.70, -0.24, 0.58, },
1042 { -0.13, -0.74, -0.27, -0.56, },
1043 { 0.02, -0.75, 0.60, 0.17, },
1044 { 0.18, -0.73, -0.53, 0.33, },
1045 { 0.33, -0.68, 0.11, -0.61, },
1046 { 0.46, -0.60, 0.38, 0.49, },
1047 { 0.57, -0.49, -0.62, -0.05, },
1048 { 0.66, -0.36, 0.45, -0.43, },
1049 { 0.72, -0.21, 0.02, 0.62, },
1050 { 0.75, -0.06, -0.48, -0.40, },
1051 { 0.75, 0.10, 0.62, -0.08, },
1052 { 0.71, 0.25, -0.35, 0.51, },
1053 { 0.64, 0.40, -0.15, -0.60, },
1054 { 0.54, 0.52, 0.55, 0.29, },
1055 { 0.42, 0.62, -0.59, 0.21, },
1056 { 0.28, 0.70, 0.24, -0.58, },
1057 { 0.13, 0.74, 0.27, 0.56, },
1058 { -0.02, 0.75, -0.60, -0.17, },
1059 { -0.18, 0.73, 0.53, -0.33, },
1060 { -0.33, 0.68, -0.11, 0.61, },
1061 { -0.24, 0.58, 0.28, 0.70, },
1062 { -0.35, 0.51, -0.71, -0.25, },
1063 { -0.45, 0.43, 0.66, -0.36, },
1064 { -0.53, 0.33, -0.18, 0.73, },
1065 { -0.59, 0.21, -0.42, -0.62, },
1066 { -0.62, 0.08, 0.75, 0.10, },
1067 { -0.62, -0.05, -0.57, 0.49, },
1068 { -0.60, -0.17, 0.02, -0.75, },
1069 { -0.55, -0.29, 0.54, 0.52, },
1070 { -0.48, -0.40, -0.75, 0.06, },
1071 { -0.38, -0.49, 0.46, -0.60, },
1072 { -0.27, -0.56, 0.13, 0.74, },
1073 { -0.15, -0.60, -0.64, -0.40, },
1074 { -0.02, -0.62, 0.72, -0.21, },
1075 { 0.11, -0.61, -0.33, 0.68, },
1076 { 0.24, -0.58, -0.29, -0.70, },
1077 { 0.35, -0.51, 0.71, 0.25, },
1078 { 0.45, -0.43, -0.66, 0.36, },
1079 { 0.53, -0.33, 0.18, -0.73, },
1080 { 0.59, -0.21, 0.42, 0.62, },
1081 { 0.62, -0.08, -0.75, -0.10, },
1082 { 0.62, 0.05, 0.57, -0.49, },
1083 { 0.60, 0.17, -0.02, 0.75, },
1084 { 0.55, 0.29, -0.54, -0.52, },
1085 { 0.48, 0.40, 0.75, -0.06, },
1086 { 0.38, 0.49, -0.46, 0.60, },
1087 { 0.27, 0.56, -0.13, -0.74, },
1088 { 0.15, 0.60, 0.64, 0.40, },
1089 { 0.02, 0.62, -0.72, 0.21, },
1090 { -0.11, 0.61, 0.33, -0.68, },
1091 { -0.38, 0.49, 0.46, 0.60, },
1092 { -0.48, 0.40, -0.75, -0.06, },
1093 { -0.55, 0.29, 0.54, -0.52, },
1094 { -0.60, 0.17, 0.02, 0.75, },
1095 { -0.62, 0.05, -0.57, -0.49, },
1096 { -0.62, -0.08, 0.75, -0.10, },
1097 { -0.59, -0.21, -0.42, 0.62, },
1098 { -0.53, -0.33, -0.18, -0.73, },
1099 { -0.45, -0.43, 0.66, 0.36, },
1100 { -0.35, -0.51, -0.71, 0.25, },
1101 { -0.24, -0.58, 0.28, -0.70, },
1102 { -0.11, -0.61, 0.33, 0.68, },
1103 { 0.02, -0.62, -0.72, -0.21, },
1104 { 0.15, -0.60, 0.64, -0.40, },
1105 { 0.27, -0.56, -0.13, 0.74, },
1106 { 0.38, -0.49, -0.46, -0.60, },
1107 { 0.48, -0.40, 0.75, 0.06, },
1108 { 0.55, -0.29, -0.54, 0.52, },
1109 { 0.60, -0.17, -0.02, -0.75, },
1110 { 0.62, -0.05, 0.57, 0.49, },
1111 { 0.62, 0.08, -0.75, 0.10, },
1112 { 0.59, 0.21, 0.42, -0.62, },
1113 { 0.53, 0.33, 0.18, 0.73, },
1114 { 0.45, 0.43, -0.66, -0.36, },
1115 { 0.35, 0.51, 0.71, -0.25, },
1116 { 0.24, 0.58, -0.28, 0.70, },
1117 { 0.11, 0.61, -0.33, -0.68, },
1118 { -0.02, 0.62, 0.72, 0.21, },
1119 { -0.15, 0.60, -0.64, 0.40, },
1120 { -0.27, 0.56, 0.13, -0.74, },
1121 { -0.33, 0.47, -0.11, 0.78, },
1122 { -0.42, 0.40, -0.51, -0.60, },
1123 { -0.49, 0.30, 0.79, 0.03, },
1124 { -0.54, 0.19, -0.55, 0.57, },
1125 { -0.57, 0.07, -0.05, -0.79, },
1126 { -0.57, -0.05, 0.62, 0.49, },
1127 { -0.55, -0.16, -0.78, 0.14, },
1128 { -0.51, -0.28, 0.42, -0.67, },
1129 { -0.44, -0.38, 0.22, 0.76, },
1130 { -0.35, -0.46, -0.71, -0.35, },
1131 { -0.25, -0.52, 0.73, -0.29, },
1132 { -0.13, -0.56, -0.27, 0.74, },
1133 { -0.01, -0.58, -0.37, -0.70, },
1134 { 0.11, -0.57, 0.77, 0.19, },
1135 { 0.22, -0.53, -0.65, 0.44, },
1136 { 0.33, -0.47, 0.11, -0.78, },
1137 { 0.42, -0.40, 0.51, 0.60, },
1138 { 0.49, -0.30, -0.79, -0.03, },
1139 { 0.54, -0.19, 0.55, -0.57, },
1140 { 0.57, -0.07, 0.05, 0.79, },
1141 { 0.57, 0.05, -0.62, -0.49, },
1142 { 0.55, 0.16, 0.78, -0.14, },
1143 { 0.51, 0.28, -0.42, 0.67, },
1144 { 0.44, 0.38, -0.22, -0.76, },
1145 { 0.35, 0.46, 0.71, 0.35, },
1146 { 0.25, 0.52, -0.73, 0.29, },
1147 { 0.13, 0.56, 0.27, -0.74, },
1148 { 0.01, 0.58, 0.37, 0.70, },
1149 { -0.11, 0.57, -0.77, -0.19, },
1150 { -0.22, 0.53, 0.65, -0.44, },
1151 { -0.25, 0.52, 0.73, 0.29, },
1152 { -0.35, 0.46, -0.71, 0.35, },
1153 { -0.44, 0.38, 0.22, -0.76, },
1154 { -0.51, 0.28, 0.42, 0.67, },
1155 { -0.55, 0.16, -0.78, -0.14, },
1156 { -0.57, 0.05, 0.62, -0.49, },
1157 { -0.57, -0.07, -0.05, 0.79, },
1158 { -0.54, -0.19, -0.55, -0.57, },
1159 { -0.49, -0.30, 0.79, -0.03, },
1160 { -0.42, -0.40, -0.51, 0.60, },
1161 { -0.33, -0.47, -0.11, -0.78, },
1162 { -0.22, -0.53, 0.65, 0.44, },
1163 { -0.11, -0.57, -0.77, 0.19, },
1164 { 0.01, -0.58, 0.37, -0.70, },
1165 { 0.13, -0.56, 0.27, 0.74, },
1166 { 0.25, -0.52, -0.73, -0.29, },
1167 { 0.35, -0.46, 0.71, -0.35, },
1168 { 0.44, -0.38, -0.22, 0.76, },
1169 { 0.51, -0.28, -0.42, -0.67, },
1170 { 0.55, -0.16, 0.78, 0.14, },
1171 { 0.57, -0.05, -0.62, 0.49, },
1172 { 0.57, 0.07, 0.05, -0.79, },
1173 { 0.54, 0.19, 0.55, 0.57, },
1174 { 0.49, 0.30, -0.79, 0.03, },
1175 { 0.42, 0.40, 0.51, -0.60, },
1176 { 0.33, 0.47, 0.11, 0.78, },
1177 { 0.22, 0.53, -0.65, -0.44, },
1178 { 0.11, 0.57, 0.77, -0.19, },
1179 { -0.01, 0.58, -0.37, 0.70, },
1180 { -0.13, 0.56, -0.27, -0.74, },
1181 { -0.27, 0.41, 0.13, 0.83, },
1182 { -0.35, 0.35, -0.71, -0.46, },
1183 { -0.41, 0.27, 0.81, -0.22, },
1184 { -0.46, 0.17, -0.38, 0.75, },
1185 { -0.49, 0.07, -0.30, -0.79, },
1186 { -0.49, -0.03, 0.79, 0.30, },
1187 { -0.48, -0.13, -0.75, 0.38, },
1188 { -0.44, -0.23, 0.22, -0.82, },
1189 { -0.38, -0.31, 0.46, 0.71, },
1190 { -0.31, -0.38, -0.83, -0.13, },
1191 { -0.22, -0.44, 0.65, -0.53, },
1192 { -0.13, -0.48, -0.04, 0.84, },
1193 { -0.02, -0.49, -0.60, -0.60, },
1194 { 0.08, -0.49, 0.84, -0.05, },
1195 { 0.18, -0.46, -0.53, 0.66, },
1196 { 0.27, -0.41, -0.13, -0.83, },
1197 { 0.35, -0.35, 0.71, 0.46, },
1198 { 0.41, -0.27, -0.81, 0.22, },
1199 { 0.46, -0.17, 0.38, -0.75, },
1200 { 0.49, -0.07, 0.30, 0.79, },
1201 { 0.49, 0.03, -0.79, -0.30, },
1202 { 0.48, 0.13, 0.75, -0.38, },
1203 { 0.44, 0.23, -0.22, 0.82, },
1204 { 0.38, 0.31, -0.46, -0.71, },
1205 { 0.31, 0.38, 0.83, 0.13, },
1206 { 0.22, 0.44, -0.65, 0.53, },
1207 { 0.12, 0.48, 0.04, -0.84, },
1208 { 0.02, 0.49, 0.60, 0.60, },
1209 { -0.08, 0.49, -0.84, 0.05, },
1210 { -0.18, 0.46, 0.53, -0.66, },
1211 { -0.22, 0.44, 0.65, 0.53, },
1212 { -0.31, 0.38, -0.83, 0.13, },
1213 { -0.38, 0.31, 0.46, -0.71, },
1214 { -0.44, 0.23, 0.22, 0.82, },
1215 { -0.48, 0.13, -0.75, -0.38, },
1216 { -0.49, 0.03, 0.79, -0.30, },
1217 { -0.49, -0.07, -0.30, 0.79, },
1218 { -0.46, -0.17, -0.38, -0.75, },
1219 { -0.41, -0.27, 0.81, 0.22, },
1220 { -0.35, -0.35, -0.71, 0.46, },
1221 { -0.27, -0.41, 0.13, -0.83, },
1222 { -0.18, -0.46, 0.53, 0.66, },
1223 { -0.08, -0.49, -0.84, -0.05, },
1224 { 0.02, -0.49, 0.60, -0.60, },
1225 { 0.12, -0.48, 0.04, 0.84, },
1226 { 0.22, -0.44, -0.65, -0.53, },
1227 { 0.31, -0.38, 0.83, -0.13, },
1228 { 0.38, -0.31, -0.46, 0.71, },
1229 { 0.44, -0.23, -0.22, -0.82, },
1230 { 0.48, -0.13, 0.75, 0.38, },
1231 { 0.49, -0.03, -0.79, 0.30, },
1232 { 0.49, 0.07, 0.30, -0.79, },
1233 { 0.46, 0.17, 0.38, 0.75, },
1234 { 0.41, 0.27, -0.81, -0.22, },
1235 { 0.35, 0.35, 0.71, -0.46, },
1236 { 0.27, 0.41, -0.13, 0.83, },
1237 { 0.18, 0.46, -0.53, -0.66, },
1238 { 0.08, 0.49, 0.84, 0.05, },
1239 { -0.02, 0.49, -0.60, 0.60, },
1240 { -0.12, 0.48, -0.04, -0.84, },
1241 { -0.15, 0.28, -0.64, 0.67, },
1242 { -0.20, 0.24, -0.07, -0.92, },
1243 { -0.25, 0.19, 0.73, 0.57, },
1244 { -0.28, 0.14, -0.91, 0.16, },
1245 { -0.30, 0.07, 0.49, -0.79, },
1246 { -0.31, 0.01, 0.26, 0.89, },
1247 { -0.31, -0.06, -0.83, -0.40, },
1248 { -0.29, -0.12, 0.86, -0.35, },
1249 { -0.26, -0.18, -0.31, 0.87, },
1250 { -0.22, -0.23, -0.44, -0.82, },
1251 { -0.16, -0.27, 0.90, 0.22, },
1252 { -0.11, -0.29, -0.77, 0.52, },
1253 { -0.04, -0.31, 0.12, -0.92, },
1254 { 0.02, -0.31, 0.60, 0.71, },
1255 { 0.09, -0.30, -0.93, -0.03, },
1256 { 0.15, -0.28, 0.64, -0.67, },
1257 { 0.20, -0.24, 0.07, 0.92, },
1258 { 0.25, -0.19, -0.73, -0.57, },
1259 { 0.28, -0.14, 0.91, -0.16, },
1260 { 0.30, -0.07, -0.49, 0.79, },
1261 { 0.31, -0.01, -0.26, -0.89, },
1262 { 0.31, 0.06, 0.83, 0.40, },
1263 { 0.29, 0.12, -0.86, 0.35, },
1264 { 0.26, 0.18, 0.31, -0.87, },
1265 { 0.22, 0.23, 0.44, 0.82, },
1266 { 0.16, 0.27, -0.90, -0.22, },
1267 { 0.11, 0.29, 0.77, -0.52, },
1268 { 0.04, 0.31, -0.12, 0.92, },
1269 { -0.02, 0.31, -0.60, -0.71, },
1270 { -0.09, 0.30, 0.93, 0.03, },
1271 { -0.22, 0.23, -0.44, 0.82, },
1272 { -0.26, 0.18, -0.31, -0.87, },
1273 { -0.29, 0.12, 0.86, 0.35, },
1274 { -0.31, 0.06, -0.83, 0.40, },
1275 { -0.31, -0.01, 0.26, -0.89, },
1276 { -0.30, -0.07, 0.49, 0.79, },
1277 { -0.28, -0.14, -0.91, -0.16, },
1278 { -0.25, -0.19, 0.73, -0.57, },
1279 { -0.20, -0.24, -0.07, 0.92, },
1280 { -0.15, -0.28, -0.64, -0.67, },
1281 { -0.09, -0.30, 0.93, -0.03, },
1282 { -0.02, -0.31, -0.60, 0.71, },
1283 { 0.04, -0.31, -0.13, -0.92, },
1284 { 0.11, -0.29, 0.77, 0.52, },
1285 { 0.16, -0.27, -0.90, 0.22, },
1286 { 0.22, -0.23, 0.44, -0.82, },
1287 { 0.26, -0.18, 0.31, 0.87, },
1288 { 0.29, -0.12, -0.86, -0.35, },
1289 { 0.31, -0.06, 0.83, -0.40, },
1290 { 0.31, 0.01, -0.26, 0.89, },
1291 { 0.30, 0.07, -0.49, -0.79, },
1292 { 0.28, 0.14, 0.91, 0.16, },
1293 { 0.25, 0.19, -0.73, 0.57, },
1294 { 0.20, 0.24, 0.07, -0.92, },
1295 { 0.15, 0.28, 0.64, 0.67, },
1296 { 0.09, 0.30, -0.93, 0.03, },
1297 { 0.02, 0.31, 0.60, -0.71, },
1298 { -0.04, 0.31, 0.13, 0.92, },
1299 { -0.11, 0.29, -0.77, -0.52, },
1300 { -0.16, 0.27, 0.90, -0.22, },
1303 static const struct line_info line_table[LINE_COUNT] =