From 6f5482d73adb0165c0130bb47d852644ab0c4869 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Tue, 3 Jul 2012 22:01:42 -0400 Subject: [PATCH] From http://www.jwz.org/xscreensaver/xscreensaver-5.18.tar.gz -rw-r--r-- 1 zblaxell zblaxell 7363800 Jul 3 17:45 xscreensaver-5.18.tar.gz a9f66d3f5094d2c1ef46c1209730e7cb653f33a7 xscreensaver-5.18.tar.gz --- OSX/PrefsReader.m | 1 + OSX/SaverListController.m | 44 +- OSX/SaverRunner.h | 6 +- OSX/SaverRunner.m | 43 +- OSX/SaverRunner.plist | 4 +- OSX/XScreenSaver.plist | 4 +- OSX/XScreenSaverConfigSheet.m | 300 +- OSX/XScreenSaverGLView.m | 15 +- OSX/XScreenSaverView.h | 6 +- OSX/XScreenSaverView.m | 185 +- OSX/bindist.rtf | 4 +- OSX/iSaverRunner.plist | 4 +- OSX/iSaverRunner1024.png | Bin 0 -> 46983 bytes OSX/iosgrabimage.m | 125 + OSX/iostextclient.m | 37 +- OSX/jwxyz-timers.m | 43 +- OSX/jwxyz.h | 4 + OSX/jwxyz.m | 149 +- OSX/osxgrabscreen.m | 21 +- README | 10 + config.h.in | 3 + configure | 68 +- configure.in | 19 + driver/Makefile.in | 2 + driver/XScreenSaver.ad.in | 6 +- driver/XScreenSaver_ad.h | 2 +- driver/subprocs.c | 4 +- driver/xscreensaver.c | 26 +- driver/xscreensaver.h | 3 +- hacks/Makefile.in | 1 + hacks/abstractile.c | 14 +- hacks/anemone.c | 13 +- hacks/apollonian.c | 8 +- hacks/apple2-main.c | 3 + hacks/asm6502.c | 167 +- hacks/asm6502.h | 44 +- hacks/barcode.c | 3 + hacks/bouboule.c | 19 +- hacks/braid.c | 8 +- hacks/bsod.c | 4 +- hacks/ccurve.c | 8 + hacks/check-configs.pl | 24 +- hacks/compass.c | 5 + hacks/config/README | 4 +- hacks/config/antspotlight.xml | 3 +- hacks/config/boxfit.xml | 9 +- hacks/config/bumps.xml | 3 +- hacks/config/dnalogo.xml | 2 +- hacks/config/flipscreen3d.xml | 2 +- hacks/config/gleidescope.xml | 2 +- hacks/config/jigsaw.xml | 5 +- hacks/config/pedal.xml | 3 + hacks/config/pipes.xml | 12 +- hacks/config/ripples.xml | 4 +- hacks/config/rotzoomer.xml | 2 +- hacks/config/sonar.xml | 12 +- hacks/config/spotlight.xml | 4 +- hacks/coral.c | 2 + hacks/crystal.c | 8 +- hacks/decayscreen.c | 26 +- hacks/demon.c | 9 +- hacks/discrete.c | 10 +- hacks/distort.c | 6 + hacks/drift.c | 8 +- hacks/eruption.c | 15 + hacks/euler2d.c | 8 +- hacks/fadeplot.c | 13 +- hacks/flag.c | 2 +- hacks/flame.c | 3 + hacks/flow.c | 8 +- hacks/galaxy.c | 8 +- hacks/glx/Makefile.in | 319 +- hacks/glx/antmaze.c | 4 - hacks/glx/atunnel.c | 6 +- hacks/glx/boing.c | 22 +- hacks/glx/bouncingcow.c | 3 +- hacks/glx/carousel.c | 17 +- hacks/glx/chessgames.h | 2 +- hacks/glx/chessmodels.c | 65 +- hacks/glx/chessmodels.h | 2 +- hacks/glx/companion.c | 2 +- hacks/glx/crackberg.c | 39 +- hacks/glx/cube21.c | 59 +- hacks/glx/cubenetic.c | 3 + hacks/glx/cubicgrid.c | 5 + hacks/glx/dangerball.c | 3 + hacks/glx/dnalogo.c | 103 +- hacks/glx/dnapizza.h | 122 + hacks/glx/endgame.c | 152 +- hacks/glx/engine.c | 8 + hacks/glx/flipflop.c | 2 - hacks/glx/flyingtoasters.c | 7 +- hacks/glx/gears.c | 3 + hacks/glx/gflux.c | 3 + hacks/glx/glcells.c | 3 +- hacks/glx/glknots.c | 3 + hacks/glx/glplanet.c | 3 + hacks/glx/glschool.c | 34 +- hacks/glx/glschool_alg.c | 26 +- hacks/glx/glschool_alg.h | 22 +- hacks/glx/glschool_gl.c | 36 +- hacks/glx/glschool_gl.h | 20 +- hacks/glx/gltext.c | 23 +- hacks/glx/gltrackball.c | 3 + hacks/glx/glxfonts.c | 59 +- hacks/glx/hilbert.c | 3 + hacks/glx/jigglypuff.c | 4 + hacks/glx/jigsaw.c | 416 +- hacks/glx/juggler3d.c | 2 +- hacks/glx/jwzgles.c | 448 +- hacks/glx/jwzglesI.h | 2 + hacks/glx/lament.c | 3 + hacks/glx/menger.c | 3 + hacks/glx/mirrorblob.c | 6 +- hacks/glx/moebius.c | 3 + hacks/glx/moebiusgears.c | 3 + hacks/glx/molecule.c | 18 +- hacks/glx/pinion.c | 2 - hacks/glx/pipes.c | 329 +- hacks/glx/polyhedra-gl.c | 46 +- hacks/glx/providence.c | 2 - hacks/glx/queens.c | 101 +- hacks/glx/rubik.c | 55 +- hacks/glx/rubikblocks.c | 5 + hacks/glx/sballs.c | 3 + hacks/glx/sierpinski3d.c | 3 + hacks/glx/skytentacles.c | 3 +- hacks/glx/sonar-icmp.c | 336 +- hacks/glx/sonar-sim.c | 12 +- hacks/glx/sonar.c | 69 +- hacks/glx/sonar.h | 35 +- hacks/glx/sonar.man | 22 +- hacks/glx/spheremonics.c | 3 + hacks/glx/stairs.c | 10 +- hacks/glx/stonerview-move.c | 13 +- hacks/glx/stonerview-move.h | 17 +- hacks/glx/stonerview-view.c | 12 +- hacks/glx/stonerview.c | 12 +- hacks/glx/stonerview.h | 2 +- hacks/glx/surfaces.c | 3 + hacks/glx/tangram.c | 14 +- hacks/glx/tangram_shapes.c | 26 +- hacks/glx/tangram_shapes.h | 10 +- hacks/glx/teapot.c | 81 +- hacks/glx/teapot2.h | 6330 ++++++++++++++++++++++++ hacks/glx/topblock.c | 43 +- hacks/glx/trackball.c | 1 + hacks/glx/trackball.h | 4 +- hacks/glx/tronbit.c | 4 - hacks/glx/tunnel_draw.c | 26 +- hacks/glx/tunnel_draw.h | 8 +- hacks/goop.c | 10 +- hacks/grav.c | 10 +- hacks/interference.c | 3 + hacks/julia.c | 100 +- hacks/julia.man | 12 +- hacks/loop.c | 8 +- hacks/m6502.c | 23 +- hacks/memscroller.c | 14 + hacks/moire2.c | 2 + hacks/mountain.c | 9 +- hacks/munge-ad.pl | 6 +- hacks/noseguy.c | 3 + hacks/pacman.c | 104 +- hacks/pacman.h | 4 +- hacks/pacman_ai.c | 50 +- hacks/pacman_ai.h | 6 +- hacks/pacman_level.c | 18 +- hacks/pacman_level.h | 17 +- hacks/penetrate.c | 1 + hacks/penrose.c | 9 +- hacks/piecewise.c | 2 + hacks/polyominoes.c | 8 +- hacks/popsquares.c | 30 + hacks/sierpinski.c | 8 +- hacks/slidescreen.c | 10 + hacks/speedmine.c | 10 + hacks/squiral.c | 42 +- hacks/starfish.c | 4 + hacks/strange.c | 10 +- hacks/swirl.c | 8 +- hacks/thornbird.c | 8 +- hacks/triangle.c | 8 +- hacks/truchet.c | 4 + hacks/vermiculate.c | 5 + hacks/wander.c | 5 + hacks/whirlwindwarp.c | 3 + hacks/xlyap.c | 1 - hacks/xrayswarm.c | 6 + po/Makefile.in.in | 3 +- po/POTFILES.in | 2 +- utils/Makefile.in | 1 + utils/grabclient.c | 112 +- utils/grabscreen.h | 7 + utils/version.h | 2 +- xscreensaver.spec | 2 +- xscreensaver.xcodeproj/project.pbxproj | 40 +- 197 files changed, 10879 insertions(+), 1259 deletions(-) create mode 100644 OSX/iSaverRunner1024.png create mode 100644 OSX/iosgrabimage.m create mode 100644 hacks/glx/dnapizza.h create mode 100644 hacks/glx/teapot2.h diff --git a/OSX/PrefsReader.m b/OSX/PrefsReader.m index dd9170fe..95dc8ebe 100644 --- a/OSX/PrefsReader.m +++ b/OSX/PrefsReader.m @@ -369,6 +369,7 @@ NSRange r = [name rangeOfString:@"." options:NSBackwardsSearch]; if (r.length) name = [name substringFromIndex:r.location+1]; + name = [name stringByReplacingOccurrencesOfString:@" " withString:@""]; saver_name = [name retain]; [self registerXrmKeys:opts defaults:defs]; diff --git a/OSX/SaverListController.m b/OSX/SaverListController.m index 75e8751b..484cb168 100644 --- a/OSX/SaverListController.m +++ b/OSX/SaverListController.m @@ -16,6 +16,7 @@ #import "SaverListController.h" #import "SaverRunner.h" +#import "yarandom.h" #import "version.h" #undef countof @@ -246,8 +247,7 @@ SaverRunner *s = (SaverRunner *) [[UIApplication sharedApplication] delegate]; if (! s) return; - if (! [s isKindOfClass:[SaverRunner class]]) - abort(); + NSAssert ([s isKindOfClass:[SaverRunner class]], @"not a SaverRunner"); [s loadSaver: cell.textLabel.text]; } @@ -260,8 +260,7 @@ SaverRunner *s = (SaverRunner *) [[UIApplication sharedApplication] delegate]; if (! s) return; - if (! [s isKindOfClass:[SaverRunner class]]) - abort(); + NSAssert ([s isKindOfClass:[SaverRunner class]], @"not a SaverRunner"); [s openPreferences: cell.textLabel.text]; } @@ -296,6 +295,43 @@ } +/* We need this to respond to "shake" gestures + */ +- (BOOL)canBecomeFirstResponder +{ + return YES; +} + +- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event +{ +} + +- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event +{ +} + + +/* Shake means load a random screen saver. + */ +- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event +{ + NSMutableArray *a = [NSMutableArray arrayWithCapacity: 200]; + for (NSArray *sec in letter_sections) + for (NSString *s in sec) + [a addObject: s]; + int n = [a count]; + if (! n) return; + NSString *which = [a objectAtIndex: (random() % n)]; + + SaverRunner *s = + (SaverRunner *) [[UIApplication sharedApplication] delegate]; + if (! s) return; + NSAssert ([s isKindOfClass:[SaverRunner class]], @"not a SaverRunner"); + [self scrollTo: which]; + [s loadSaver: which]; +} + + - (void)dealloc { for (int i = 0; i < countof(list_by_letter); i++) diff --git a/OSX/SaverRunner.h b/OSX/SaverRunner.h index 2c5d0461..0a35ca19 100644 --- a/OSX/SaverRunner.h +++ b/OSX/SaverRunner.h @@ -58,12 +58,12 @@ # endif // USE_IPHONE } -- (void) aboutPanel: (id)sender; -- (void)loadSaver:(NSString *)name launch:(BOOL)launch; +- (void) loadSaver: (NSString *)name launch:(BOOL)launch; - (void) loadSaver: (NSString *)name; -- (void)selectedSaverDidChange:(NSDictionary *)change; +- (void) selectedSaverDidChange:(NSDictionary *)change; #ifndef USE_IPHONE +- (void) aboutPanel: (id)sender; - (void) openPreferences: (id)sender; #else // USE_IPHONE - (void) openPreferences: (NSString *)which; diff --git a/OSX/SaverRunner.m b/OSX/SaverRunner.m index 60233a08..3fd451d9 100644 --- a/OSX/SaverRunner.m +++ b/OSX/SaverRunner.m @@ -29,10 +29,11 @@ of bundles that have executable code in them. Bleh. */ +#import #import "SaverRunner.h" #import "SaverListController.h" #import "XScreenSaverGLView.h" -#import +#import "yarandom.h" #ifdef USE_IPHONE @@ -417,11 +418,10 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) [prefs synchronize]; if (saverName && [saverName isEqualToString: name]) { - if (launch && ![saverView isAnimating]) { - [window addSubview: saverView]; - [saverView startAnimation]; - } - return; + if ([saverView isAnimating]) + return; + else + goto LAUNCH; } saverName = name; @@ -452,8 +452,11 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; + LAUNCH: if (launch) { + [self saveScreenshot]; [window addSubview: saverView]; + [saverView becomeFirstResponder]; [saverView startAnimation]; } # endif // USE_IPHONE @@ -466,9 +469,10 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) } +# ifndef USE_IPHONE + - (void)aboutPanel:(id)sender { -# ifndef USE_IPHONE NSDictionary *bd = [saverBundle infoDictionary]; NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:20]; @@ -484,28 +488,9 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) [[NSApplication sharedApplication] orderFrontStandardAboutPanelWithOptions:d]; - -# else // USE_IPHONE - - NSDictionary *bd = [[NSBundle mainBundle] infoDictionary]; - NSString *body = [bd objectForKey:@"CFBundleGetInfoString"]; - - body = [body stringByReplacingOccurrencesOfString:@", " withString:@",\n"]; - body = [body stringByAppendingString: - @"\n\n" - "Double-tap to run.\n\n" - "Double-tap again to\n" - "return to this list."]; - - [[[UIAlertView alloc] initWithTitle: @"" - message: body - delegate: nil - cancelButtonTitle: @"OK" - otherButtonTitles: nil] - show]; +} # endif // USE_IPHONE -} @@ -916,6 +901,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) initWithNames:saverNames descriptions:[self makeDescTable]]; [rootViewController pushViewController:menu animated:YES]; + [menu becomeFirstResponder]; [window makeKeyAndVisible]; [window setAutoresizesSubviews:YES]; @@ -923,8 +909,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; - // Has to be after the list window is up, or we get black. - [self saveScreenshot]; + application.applicationSupportsShakeToEdit = YES; # endif // USE_IPHONE diff --git a/OSX/SaverRunner.plist b/OSX/SaverRunner.plist index 5ac695ff..b116fb8f 100644 --- a/OSX/SaverRunner.plist +++ b/OSX/SaverRunner.plist @@ -22,11 +22,11 @@ http://www.jwz.org/xscreensaver/ CFBundlePackageType APPL CFBundleShortVersionString - 5.17 + 5.18 CFBundleSignature ???? CFBundleVersion - 5.17 + 5.18 LSMinimumSystemVersion 10.4 NSHumanReadableCopyright diff --git a/OSX/XScreenSaver.plist b/OSX/XScreenSaver.plist index 6beac277..fa9f4870 100644 --- a/OSX/XScreenSaver.plist +++ b/OSX/XScreenSaver.plist @@ -15,11 +15,11 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.17 + 5.18 CFBundleSignature ???? CFBundleVersion - 5.17 + 5.18 LSMinimumSystemVersion 10.4 NSMainNibFile diff --git a/OSX/XScreenSaverConfigSheet.m b/OSX/XScreenSaverConfigSheet.m index e179dd0b..1df862b2 100644 --- a/OSX/XScreenSaverConfigSheet.m +++ b/OSX/XScreenSaverConfigSheet.m @@ -48,6 +48,7 @@ #endif // USE_IPHONE #undef LABEL_ABOVE_SLIDER +#define USE_HTML_LABELS #pragma mark XML Parser @@ -191,6 +192,222 @@ typedef enum { SimpleXMLCommentKind, # endif // !USE_PICKER_VIEW +# pragma mark Implementing labels with clickable links + +#if defined(USE_IPHONE) && defined(USE_HTML_LABELS) + +@interface HTMLLabel : UIView +{ + NSString *html; + UIFont *font; + UIWebView *webView; +} + +@property(nonatomic, retain) NSString *html; +@property(nonatomic, retain) UIWebView *webView; + +- (id) initWithHTML:(NSString *)h font:(UIFont *)f; +- (id) initWithText:(NSString *)t font:(UIFont *)f; +- (void) setHTML:(NSString *)h; +- (void) setText:(NSString *)t; +- (void) sizeToFit; + +@end + +@implementation HTMLLabel + +@synthesize html; +@synthesize webView; + +- (id) initWithHTML:(NSString *)h font:(UIFont *)f +{ + self = [super init]; + if (! self) return 0; + font = [f retain]; + webView = [[UIWebView alloc] init]; + webView.delegate = self; + webView.dataDetectorTypes = UIDataDetectorTypeNone; + self. autoresizingMask = (UIViewAutoresizingFlexibleWidth | + UIViewAutoresizingFlexibleHeight); + webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | + UIViewAutoresizingFlexibleHeight); + [self addSubview: webView]; + [self setHTML: h]; + return self; +} + +- (id) initWithText:(NSString *)t font:(UIFont *)f +{ + self = [self initWithHTML:@"" font:f]; + if (! self) return 0; + [self setText: t]; + return self; +} + + +- (void) setHTML: (NSString *)h +{ + if (! h) return; + [h retain]; + if (html) [html release]; + html = h; + NSString *h2 = + [NSString stringWithFormat: + @"" + "" + "" +// "" + "" + "" + "" + "%@" + "" + "", + [font fontName], + [font pointSize], + [font lineHeight], + h]; + [webView loadHTMLString:h2 baseURL:[NSURL URLWithString:@""]]; +} + + +static char *anchorize (const char *url); + +- (void) setText: (NSString *)t +{ + t = [t stringByReplacingOccurrencesOfString:@"&" withString:@"&"]; + t = [t stringByReplacingOccurrencesOfString:@"<" withString:@"<"]; + t = [t stringByReplacingOccurrencesOfString:@">" withString:@">"]; + t = [t stringByReplacingOccurrencesOfString:@"\n\n" withString:@"

"]; + t = [t stringByReplacingOccurrencesOfString:@"

" + withString:@"

        "]; + t = [t stringByReplacingOccurrencesOfString:@"\n " + withString:@"
        "]; + + NSString *h = @""; + for (NSString *s in + [t componentsSeparatedByCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]]) { + if ([s hasPrefix:@"http://"] || + [s hasPrefix:@"https://"]) { + char *anchor = anchorize ([s cStringUsingEncoding:NSUTF8StringEncoding]); + NSString *a2 = [NSString stringWithCString: anchor + encoding: NSUTF8StringEncoding]; + s = [NSString stringWithFormat: @"%@
", s, a2]; + free (anchor); + } + h = [NSString stringWithFormat: @"%@ %@", h, s]; + } + [self setHTML: h]; +} + + +-(BOOL) webView:(UIWebView *)wv + shouldStartLoadWithRequest:(NSURLRequest *)req + navigationType:(UIWebViewNavigationType)type +{ + // Force clicked links to open in Safari, not in this window. + if (type == UIWebViewNavigationTypeLinkClicked) { + [[UIApplication sharedApplication] openURL:[req URL]]; + return NO; + } + return YES; +} + + +- (void) setFrame: (CGRect)r +{ + [super setFrame: r]; + r.origin.x = 0; + r.origin.y = 0; + [webView setFrame: r]; + [self setHTML: html]; + [webView reload]; +} + + +- (NSString *) stripTags:(NSString *)str +{ + NSString *result = @""; + + str = [str stringByReplacingOccurrencesOfString:@"

" + withString:@"

" + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [str length])]; + str = [str stringByReplacingOccurrencesOfString:@"
" + withString:@"\n" + options:NSCaseInsensitiveSearch + range:NSMakeRange(0, [str length])]; + + for (NSString *s in [str componentsSeparatedByString: @"<"]) { + NSRange r = [s rangeOfString:@">"]; + if (r.length > 0) + s = [s substringFromIndex: r.location + r.length]; + result = [result stringByAppendingString: s]; + } + return result; +} + + +- (void) sizeToFit +{ + CGRect r = [self frame]; + + /* It would be sensible to just ask the UIWebView how tall the page is, + instead of hoping that NSString and UIWebView measure fonts and do + wrapping in exactly the same way, but I can't make that work. + Maybe because it loads async? + */ +# if 0 + r.size.height = [[webView + stringByEvaluatingJavaScriptFromString: + @"document.body.offsetHeight"] + doubleValue]; +# else + NSString *text = [self stripTags: html]; + CGSize s = r.size; + s.height = 999999; + s = [text sizeWithFont: font + constrainedToSize: s + lineBreakMode: UILineBreakModeWordWrap]; + + // GAAAH. Add one more line, or the UIWebView is still scrollable! + // The text is sized right, but it lets you scroll it up anyway. + s.height += [font pointSize]; + + r.size.height = s.height; +# endif + + [self setFrame: r]; +} + + +- (void) dealloc +{ + [html release]; + [font release]; + [webView release]; + [super dealloc]; +} + +@end + +#endif // USE_IPHONE && USE_HTML_LABELS + @interface XScreenSaverConfigSheet (Private) @@ -682,6 +899,8 @@ anchorize (const char *url) } +#if !defined(USE_IPHONE) || !defined(USE_HTML_LABELS) + /* Converts any http: URLs in the given text field to clickable links. */ static void @@ -766,6 +985,9 @@ hreffify (NSText *nstext) # endif } +#endif /* !USE_IPHONE || !USE_HTML_LABELS */ + + #pragma mark Creating controls from XML @@ -813,6 +1035,26 @@ hreffify (NSText *nstext) if ([val length] == 0) [dict removeObjectForKey:key]; } + +# ifdef USE_IPHONE + // Kludge for starwars.xml: + // If there is a "_low-label" and no "_label", but "_low-label" contains + // spaces, divide them. + NSString *lab = [dict objectForKey:@"_label"]; + NSString *low = [dict objectForKey:@"_low-label"]; + if (low && !lab) { + NSArray *split = + [[[low stringByTrimmingCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]] + componentsSeparatedByString: @" "] + filteredArrayUsingPredicate: + [NSPredicate predicateWithFormat:@"length > 0"]]; + if (split && [split count] == 2) { + [dict setValue:[split objectAtIndex:0] forKey:@"_label"]; + [dict setValue:[split objectAtIndex:1] forKey:@"_low-label"]; + } + } +# endif // USE_IPHONE } @@ -1479,25 +1721,25 @@ set_menu_item_object (NSMenuItem *item, NSObject *obj) hreffify (lab); boldify (lab); [lab sizeToFit]; -# else // USE_IPHONE - /* There's no way to put rich text or links inside a UILabel. - - I guess Apple expects us to use a UIWebView for this -- but there's - no way to measure how tall the HTML-rendered text is (the answer is - not: "document.height" via JavaScript) so we can't put the - properly-sized cell in the table. - - This is some serious bullshit. +# else // USE_IPHONE - Another option would be to subclass UILabel and replace its drawRect - with new code that uses CTLineDraw. But that's a huge hassle. - */ +# ifndef USE_HTML_LABELS UILabel *lab = [self makeLabel:text]; [lab setFont:[NSFont systemFontOfSize: [NSFont systemFontSize]]]; hreffify (lab); + +# else // USE_HTML_LABELS + HTMLLabel *lab = [[HTMLLabel alloc] + initWithText:text + font:[NSFont systemFontOfSize: [NSFont systemFontSize]]]; + [lab setFrame:rect]; + [lab sizeToFit]; +# endif // USE_HTML_LABELS + [self placeSeparator]; + # endif // USE_IPHONE [self placeChild:lab on:parent]; @@ -2024,7 +2266,6 @@ find_text_field_of_button (NSButton *button) - (void) makeImageLoaderControlBox:(NSXMLNode *)node on:(NSView *)parent { -# ifndef USE_IPHONE /* [x] Grab desktop images [ ] Choose random image: @@ -2039,11 +2280,19 @@ find_text_field_of_button (NSButton *button) NSXMLElement *node2; +# ifndef USE_IPHONE +# define SCREENS "Grab desktop images" +# define PHOTOS "Choose random images" +# else +# define SCREENS "Grab screenshots" +# define PHOTOS "Use photo library" +# endif + node2 = [[NSXMLElement alloc] initWithName:@"boolean"]; [node2 setAttributesAsDictionary: [NSDictionary dictionaryWithObjectsAndKeys: @"grabDesktopImages", @"id", - @"Grab desktop images", @"_label", + @ SCREENS, @"_label", @"-no-grab-desktop", @"arg-unset", nil]]; [self makeCheckbox:node2 on:parent]; @@ -2052,7 +2301,7 @@ find_text_field_of_button (NSButton *button) [node2 setAttributesAsDictionary: [NSDictionary dictionaryWithObjectsAndKeys: @"chooseRandomImages", @"id", - @"Choose random images", @"_label", + @ PHOTOS, @"_label", @"-choose-random-images", @"arg-set", nil]]; [self makeCheckbox:node2 on:parent]; @@ -2067,6 +2316,10 @@ find_text_field_of_button (NSButton *button) [self makeFileSelector:node2 on:parent dirsOnly:YES withLabel:YES editable:YES]; +# undef SCREENS +# undef PHOTOS + +# ifndef USE_IPHONE // Add a second, explanatory label below the file/URL selector. LABEL *lab2 = 0; @@ -2079,7 +2332,7 @@ find_text_field_of_button (NSButton *button) r2.origin.y += 14; [lab2 setFrameOrigin:r2.origin]; [lab2 release]; -# endif // !USE_IPHONE +# endif // USE_IPHONE } @@ -2612,6 +2865,8 @@ wrap_with_buttons (NSWindow *window, NSView *panel) } saver_name = [self parseXScreenSaverTag: node]; + saver_name = [saver_name stringByReplacingOccurrencesOfString:@" " + withString:@""]; [saver_name retain]; # ifndef USE_IPHONE @@ -2831,7 +3086,20 @@ wrap_with_buttons (NSWindow *window, NSView *panel) [t sizeToFit]; r = t.frame; h = r.size.height + LINE_SPACING * 3; +# ifdef USE_HTML_LABELS + + } else if ([ctl isKindOfClass:[HTMLLabel class]]) { + + HTMLLabel *t = (HTMLLabel *) ctl; + CGRect r = t.frame; + r.size.width = [tv frame].size.width; + r.size.width -= LEFT_MARGIN * 2; + [t setFrame:r]; + [t sizeToFit]; + r = t.frame; + h = r.size.height + LINE_SPACING * 3; +# endif // USE_HTML_LABELS } else { CGFloat h2 = [ctl frame].size.height; h2 += LINE_SPACING * 2; diff --git a/OSX/XScreenSaverGLView.m b/OSX/XScreenSaverGLView.m index da155211..58144ee1 100644 --- a/OSX/XScreenSaverGLView.m +++ b/OSX/XScreenSaverGLView.m @@ -47,6 +47,8 @@ extern void check_gl_error (const char *type); # ifndef USE_IPHONE [NSOpenGLContext clearCurrentContext]; # endif // !USE_IPHONE + + clear_gl_error(); // This hack is defunct, don't let this linger. } @@ -240,14 +242,19 @@ extern void check_gl_error (const char *type); */ -// redefine these now since they don't work when not inside an ObjC method. +// redefine NSAssert, etc. here since they don't work when not inside +// an ObjC method. #undef NSAssert #undef NSAssert1 #undef NSAssert2 -#define NSAssert(CC,S) do { if (!(CC)) { NSLog(S); abort();}} while(0) -#define NSAssert1(CC,S,A) do { if (!(CC)) { NSLog(S,A); abort();}} while(0) -#define NSAssert2(CC,S,A,B) do { if (!(CC)) { NSLog(S,A,B);abort();}} while(0) +#define NSASS(S) \ + jwxyz_abort ("%s", [(S) cStringUsingEncoding:NSUTF8StringEncoding]) +#define NSAssert(CC,S) do { if (!(CC)) { NSASS((S)); }} while(0) +#define NSAssert1(CC,S,A) do { if (!(CC)) { \ + NSASS(([NSString stringWithFormat: S, A])); }} while(0) +#define NSAssert2(CC,S,A,B) do { if (!(CC)) { \ + NSASS(([NSString stringWithFormat: S, A, B])); }} while(0) /* Called by OpenGL savers using the XLockmore API. diff --git a/OSX/XScreenSaverView.h b/OSX/XScreenSaverView.h index eb241b39..7365b9d8 100644 --- a/OSX/XScreenSaverView.h +++ b/OSX/XScreenSaverView.h @@ -53,6 +53,9 @@ @interface XScreenSaverView : ScreenSaverView +# ifdef USE_IPHONE + +# endif { struct xscreensaver_function_table *xsft; PrefsReader *prefsReader; @@ -70,7 +73,8 @@ # ifdef USE_IPHONE UIDeviceOrientation orientation, new_orientation; - NSTimer *orientation_Timer; + double tap_time; + CGPoint tap_point; BOOL screenLocked; GLfloat rotation_ratio; // ratio thru rotation anim, or -1 diff --git a/OSX/XScreenSaverView.m b/OSX/XScreenSaverView.m index 55c5516b..438c05f9 100644 --- a/OSX/XScreenSaverView.m +++ b/OSX/XScreenSaverView.m @@ -91,6 +91,11 @@ int mono_p = 0; +@interface XScreenSaverView (Private) +- (void) stopAndClose; +- (void) stopAndClose:(Bool)relaunch; +@end + @implementation XScreenSaverView // Given a lower-cased saver name, returns the function table for it. @@ -113,7 +118,9 @@ int mono_p = 0; if (! name) name = [[path lastPathComponent] stringByDeletingPathExtension]; - NSString *table_name = [[name lowercaseString] + NSString *table_name = [[[name lowercaseString] + stringByReplacingOccurrencesOfString:@" " + withString:@""] stringByAppendingString: @"_xscreensaver_function_table"]; void *addr = CFBundleGetDataPointerForName (cfb, (CFStringRef) table_name); @@ -146,7 +153,7 @@ int mono_p = 0; strcat (npath, opath); if (putenv (npath)) { perror ("putenv"); - abort(); + NSAssert1 (0, @"putenv \"%s\" failed", npath); } /* Don't free (npath) -- MacOS's putenv() does not copy it. */ @@ -167,7 +174,7 @@ int mono_p = 0; strcat (env, s); if (putenv (env)) { perror ("putenv"); - abort(); + NSAssert1 (0, @"putenv \"%s\" failed", env); } /* Don't free (env) -- MacOS's putenv() does not copy it. */ } @@ -213,7 +220,11 @@ add_default_options (const XrmOptionDescRec *opts, ".textURL: http://twitter.com/statuses/public_timeline.atom", // ".textProgram: ", ".grabDesktopImages: yes", +# ifndef USE_IPHONE ".chooseRandomImages: no", +# else + ".chooseRandomImages: yes", +# endif ".imageDirectory: ~/Pictures", ".relaunchDelay: 2", 0 @@ -325,7 +336,7 @@ double_time (void) "org.jwz.xscreensaver...plist" */ NSString *name = [NSString stringWithCString:xsft->progclass - encoding:NSUTF8StringEncoding]; + encoding:NSISOLatin1StringEncoding]; name = [@"org.jwz.xscreensaver." stringByAppendingString:name]; [self setResourcesEnv:name]; @@ -375,7 +386,6 @@ double_time (void) // xsft // fpst - // orientation_timer [super dealloc]; } @@ -611,12 +621,41 @@ double current_device_rotation (void) [self setFrame:[self frame]]; } + +- (void)alertView:(UIAlertView *)av clickedButtonAtIndex:(NSInteger)i +{ + if (i == 0) exit (-1); // Cancel + [self stopAndClose]; // Keep going +} + +- (void) handleException: (NSException *)e +{ + NSLog (@"Caught exception: %@", e); + [[[UIAlertView alloc] initWithTitle: + [NSString stringWithFormat: @"%s crashed!", + xsft->progclass] + message: + [NSString stringWithFormat: + @"The error message was:" + "\n\n%@\n\n" + "If it keeps crashing, try " + "resetting its options.", + e] + delegate: self + cancelButtonTitle: @"Exit" + otherButtonTitles: @"Keep going", nil] + show]; + [self stopAnimation]; +} + #endif // USE_IPHONE - (void) render_x11 { # ifdef USE_IPHONE + @try { + if (orientation == UIDeviceOrientationUnknown) [self didRotate:nil]; [self hackRotation]; @@ -760,7 +799,6 @@ double current_device_rotation (void) resized_p = NO; } - // Run any XtAppAddInput callbacks now. // (Note that XtAppAddTimeOut callbacks have already been run by // the Cocoa event loop.) @@ -817,6 +855,13 @@ double current_device_rotation (void) } } # endif // DO_GC_HACKERY + +# ifdef USE_IPHONE + } + @catch (NSException *e) { + [self handleException: e]; + } +# endif // USE_IPHONE } @@ -969,7 +1014,7 @@ double current_device_rotation (void) { NSBundle *bundle = [NSBundle bundleForClass:[self class]]; NSString *file = [NSString stringWithCString:xsft->progclass - encoding:NSUTF8StringEncoding]; + encoding:NSISOLatin1StringEncoding]; file = [file lowercaseString]; NSString *path = [bundle pathForResource:file ofType:@"xml"]; if (!path) { @@ -1116,7 +1161,8 @@ double current_device_rotation (void) break; } default: - abort(); + NSAssert (0, @"unknown X11 event type: %d", type); + break; } [self lockFocus]; @@ -1196,6 +1242,47 @@ double current_device_rotation (void) #else // USE_IPHONE +- (void) stopAndClose +{ + if ([self isAnimating]) + [self stopAnimation]; + + /* Need to make the SaverListController be the firstResponder again + so that it can continue to receive its own shake events. I + suppose that this abstraction-breakage means that I'm adding + XScreenSaverView to the UINavigationController wrong... + */ + UIViewController *v = [[self window] rootViewController]; + if ([v isKindOfClass: [UINavigationController class]]) { + UINavigationController *n = (UINavigationController *) v; + [[n topViewController] becomeFirstResponder]; + } + + // [self removeFromSuperview]; + [UIView animateWithDuration: 0.5 + animations:^{ self.alpha = 0.0; } + completion:^(BOOL finished) { + [self removeFromSuperview]; + self.alpha = 1.0; + }]; +} + + +- (void) stopAndClose:(Bool)relaunch_p +{ + [self stopAndClose]; + + if (relaunch_p) { // Fake a shake on the SaverListController. + UIViewController *v = [[self window] rootViewController]; + if ([v isKindOfClass: [UINavigationController class]]) { + UINavigationController *n = (UINavigationController *) v; + [[n topViewController] motionEnded: UIEventSubtypeMotionShake + withEvent: nil]; + } + } +} + + /* Called after the device's orientation has changed. Note: we could include a subclass of UIViewController which @@ -1311,7 +1398,11 @@ double current_device_rotation (void) } -/* In the simulator, multi-touch sequences look like this: +/* I believe we can't use UIGestureRecognizer for tracking touches + because UIPanGestureRecognizer doesn't give us enough detail in its + callbacks. + + In the simulator, multi-touch sequences look like this: touchesBegan [touchA, touchB] touchesEnd [touchA, touchB] @@ -1345,8 +1436,29 @@ rotate_mouse (int *x, int *y, int w, int h, int rot) } +#if 0 // AudioToolbox/AudioToolbox.h +- (void) beep +{ + // There's no way to play a standard system alert sound! + // We'd have to include our own WAV for that. Eh, fuck it. + AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); +# if TARGET_IPHONE_SIMULATOR + NSLog(@"BEEP"); // The sim doesn't vibrate. +# endif +} +#endif + + +/* We distinguish between taps and drags. + - Drags (down, motion, up) are sent to the saver to handle. + - Single-taps exit the saver. + This means a saver cannot respond to a single-tap. Only a few try to. + */ + - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + tap_time = 0; + if (xsft->event_cb && xwindow) { double s = self.contentScaleFactor; XEvent xe; @@ -1363,8 +1475,16 @@ rotate_mouse (int *x, int *y, int w, int h, int rot) xe.xbutton.y = s * p.y; rotate_mouse (&xe.xbutton.x, &xe.xbutton.y, w, h, rot_current_angle); jwxyz_mouse_moved (xdpy, xwindow, xe.xbutton.x, xe.xbutton.y); + + // Ignore return code: don't care whether the hack handled it. xsft->event_cb (xdpy, xwindow, xdata, &xe); + + // Remember when/where this was, to determine tap versus drag or hold. + tap_time = double_time(); + tap_point = p; + i++; + break; // No pinches: only look at the first touch. } } } @@ -1372,18 +1492,6 @@ rotate_mouse (int *x, int *y, int w, int h, int rot) - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - - // Double-tap means "exit" and return to selection menu. - // - for (UITouch *touch in touches) { - if ([touch tapCount] >= 2) { - if ([self isAnimating]) - [self stopAnimation]; - [self removeFromSuperview]; - return; - } - } - if (xsft->event_cb && xwindow) { double s = self.contentScaleFactor; XEvent xe; @@ -1393,6 +1501,18 @@ rotate_mouse (int *x, int *y, int w, int h, int rot) int h = s * [self frame].size.height; for (UITouch *touch in touches) { CGPoint p = [touch locationInView:self]; + + // If the ButtonRelease came less than half a second after ButtonPress, + // and didn't move far, then this was a tap, not a drag or a hold. + // Interpret it as "exit". + // + double dist = sqrt (((p.x - tap_point.x) * (p.x - tap_point.x)) + + ((p.y - tap_point.y) * (p.y - tap_point.y))); + if (tap_time + 0.5 >= double_time() && dist < 20) { + [self stopAndClose]; + return; + } + xe.xany.type = ButtonRelease; xe.xbutton.button = i + 1; xe.xbutton.x = s * p.x; @@ -1401,6 +1521,7 @@ rotate_mouse (int *x, int *y, int w, int h, int rot) jwxyz_mouse_moved (xdpy, xwindow, xe.xbutton.x, xe.xbutton.y); xsft->event_cb (xdpy, xwindow, xdata, &xe); i++; + break; // No pinches: only look at the first touch. } } } @@ -1424,6 +1545,7 @@ rotate_mouse (int *x, int *y, int w, int h, int rot) jwxyz_mouse_moved (xdpy, xwindow, xe.xmotion.x, xe.xmotion.y); xsft->event_cb (xdpy, xwindow, xdata, &xe); i++; + break; // No pinches: only look at the first touch. } } } @@ -1431,10 +1553,27 @@ rotate_mouse (int *x, int *y, int w, int h, int rot) /* We need this to respond to "shake" gestures */ -- (BOOL)canBecomeFirstResponder { +- (BOOL)canBecomeFirstResponder +{ return YES; } +- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event +{ +} + + +- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event +{ +} + +/* Shake means exit and launch a new saver. + */ +- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event +{ + [self stopAndClose:YES]; +} + - (void)setScreenLocked:(BOOL)locked { @@ -1462,7 +1601,7 @@ static PrefsReader * get_prefsReader (Display *dpy) { XScreenSaverView *view = jwxyz_window_view (XRootWindow (dpy, 0)); - if (!view) abort(); + if (!view) return 0; return [view prefsReader]; } diff --git a/OSX/bindist.rtf b/OSX/bindist.rtf index 1afbd8ea..c1677625 100644 --- a/OSX/bindist.rtf +++ b/OSX/bindist.rtf @@ -16,8 +16,8 @@ XScreenSaver\ by Jamie Zawinski\ and many others\ \ -version 5.17\ -22-Jun-2012\ +version 5.18\ +03-Jul-2012\ \ {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}} \ diff --git a/OSX/iSaverRunner.plist b/OSX/iSaverRunner.plist index 89e572fa..a296b33b 100644 --- a/OSX/iSaverRunner.plist +++ b/OSX/iSaverRunner.plist @@ -9,7 +9,7 @@ CFBundleDevelopmentRegion English CFBundleVersion - 5.17 + 5.18 NSMainNibFile iSaverRunner CFBundlePackageType @@ -19,7 +19,7 @@ UIStatusBarHidden CFBundleShortVersionString - 5.17 + 5.18 CFBundleInfoDictionaryVersion 6.0 UIRequiredDeviceCapabilities diff --git a/OSX/iSaverRunner1024.png b/OSX/iSaverRunner1024.png new file mode 100644 index 0000000000000000000000000000000000000000..a548d1c6bac889284f2015a51b3fd4b467cc50f9 GIT binary patch literal 46983 zcmdqI^;cBi7e9Q5R6tM=P>?Wa1Qiga21QAUH;o{m64DCNF{8c_K_#Rcq(NFhBnFj` zMnbx~dx&A?K4*sa=XstVzJI}YEf=_0_ug~P-mhJ+y-%Q)hSDh-HW~0FKv0E% z%Dp?f9z!dmzRz_Q6Bj%OODxn%cn$5TBkBdOg0CX)O^NUyG_Ojy1farmgEmA?LIZA9?lv~b!@T)|2fj$R@97k7+_J;=zo#=O5Thx730dO&BMKzX*xGcXo>9qhAcdHjr% z7BfT4djwqx`s`lt>hw=C;>PNNZ50x=?NH!rFIc)(o_QSkF!ZyK4&m0j)7_up9dWMi zR^<3C+TWYm99?I^c^V*+fdBDK8v7(W?p^}V)I2R@lWDm{`%HwTQu7j64ajmu0C$?( zny$_5Lq@%V z??9PW<6KpqIhh$XH+y68IR_Rd+ZWF-Ql+WB{4q-jnX5b}gUp-vC0BE7=xzL#2q9Q? z6S>rbP+QHq{o&vm)W3su#|OXsM&UkK?ZLvH!$8>fFdHiqIq7tNuZ{h|;IIWNH9n{U zZS$t-%+DVvNk>C-P$r|)*L7Tqe(|} z`i8?sXPh*%qDP#g1)>JPk#_cabLvsyySR98`G8=10Fcu(`mZtt8Bu=d zRppGjN!`zU-yT-;U6;wOhhpOkqTJfglMVjAPw>-vb?U^6Ne1XNm$U83nY}+t{;tON zbtl)g?L-yu8S}7n6jbK1PtaW!aC2LGU}f*0%<|`gFJy0DZiJe{QV&l_M~2uvygNNl zkQ5vDbQ51O7YAtapQ3>3Nve?)FaMhsOP;OD;L`W!n#0SxcUx zJv>tUerbr2Bf1%XyC1ekSF@Sb$<1^^8wLK{_|*#ip*j}x?D3(0PGQ% zjbUS7_nNnr(%js0LC@QAk%Vu*Ru^sTnJ^x1;y&vGd2^-cZiZAL{$mTd7q{gtczA7l z(@m4xTi)<{YnEpZS7PG#p;lKal2)!NXVf4+%6(|dxFP9|i~G+0ko7=w1X&)kS$7O4 z+8o9S-IoulJ-f!gw+?@cS?}~PKepd@5tI>}C%C1C2L8@sug)dE8?6?1JG>Unb_}=h z%%h-;y7Nu({mQ=(TN1#GzrQ|463fwHMx9L@`0ITGt>bUK29Agd{BiIXLVR^)W5GA5 zAmzXHr?n@(u1rFMjZa;ulkB>1D?3WoO`Uts%Z{a1oN)Zwm1xI?J^LNk0_R2F9|Mb* zH#Z>G3#6Us1AGF}{KS1N$57XxzaMp>~932SFeX3SdC=T?nh8Lo>KQ6s8M#}HgS+)hbNl3ZkZP91o8MSJ2yQsd2<#uRe* zPyLR3rsGSJ{3nuDkhfjSqV4EOxDqV3bGzPT5XpIZpwcp&XpAR zEjdWhhXYO$Vjyj=^#SVT&F$in!*N|>r;P@VHKjlTKG0^7@I5Y5XY4eEqIRF_(LjeiOp!&H^Iv*Btikd!Ex|BV`AmB^5fgSJ^vxfe9 z&MmK)G8Fsh^wCoDpUnl6!|AJ`sn3L7{w^IJEao0Bv> z@e-(CR%WX;?E$bBH25cx{t7}$vXa02CaXjy)Zk6Eb_L`1MBF9($?<0f!a(5Jv~o++ zl&$hrA3c>nCCgXv0JZ+pn!(Ab-~bW+-=-wXQZ)o<`ENwuI2d?C`0L>6x0$rI*NBr# zQb8R($=a)PIpq~XM3FrB?%&f{WSVWAv0o^Zmu>9B zPdymut;g$%Pc857RntJ|pr0T|6S~Sv%kNN8XcJxWPxbr;b=ZSD*Z#N1u=`es3=Rq5 z6Pf>Q>*gf}ir-nRT8h|zC;tD>HCQ8Vb4pTbKY=zmi@9&jTcCke&H9s0Dt}#Ag(dX! zuhrWZJnmL2C7iZ5p}RJSa-P~cX$oQpknq`GpDYjp*#5#$n%7n1>=-v(sfc`I19W-a zt?3te^>KJMbW{688R2%NNL%m(p>=&!%!uweaCkWjw?s*X14S9Qv1t7mS9QAk{BSyf z^!Bzh2`uJ=Dn{~1QE}SesS+3WyYu(i;SHnXQv#ze8e_CV2;A)Z>n`~> zBgs7e7KiluT=t$NJ+1;wSGcHDJB##eV{B2^ZQtJ{h>;iNK^iC%aP>Tk@ z{c@3mOt|*^vqnd=a9ui*MT4Ul+S@3RsRdK$7r69UI^FPm-5 z=AT)wd?`ezp-sjsoCVnwa6c*8#7sa^v?(jC_&3Z zgS!%rJXBi#6n71@{@b|u9Z)`a3YR>9yWBL*iB`+k!`%D$^Eqx1MBY683a}$XFBw$!Q z6@f^1$jy)b{<_x7Sv>rNg$dp1gV{ehc{SChBq14=Ky}43J$)OdOLdcmcL#Vv51f_2PJ~&6+)>E)V#x* zUImsYz4297rf{BFqVZZEkRv8xVB_4#sf+U0m(e}g{)(@+S(ki&J|) zK{kq*e*shY9dAf=?K+Y*N&W1$8H290H=ACdd;s#DNmb3pg>o4q_lZiXngC7IOSdIk zQPIzOU;}F$-n$*{wH`#o-6gtrbT=(@LH`1oeQy5vtllZuYq}<2s$D^pg6{k4F_3B& zr1%F0P)GRV@-dtEVfb4KdXWZX(Y4!iwBdNZr;?%qVFT-!3bm6|-*Sn2uUi|5`isco zIQb=_k?aEeJeBRDwSgAnE1Hxq`vGu|89(h_XTf9$R$vo-5D=2Q9(c5s{c=9d9Nl71 zl#ICxC}Dp}O?(CUdy1LfsiQ`3h6Y>n>4KEv_~?jTeo;%)Jd|aFsF`Aq-5$XEUrl3tXOyEi=X^H~$ZunQ_4bW5 z6T+#?x^~9>MlD4`PLM>bs=cOkE3#-Q_L)Apn%VXngE$3sjhc1&OQA`)ChVfan1MGL zLEZZUSJH*^H#G1DwJH+_{oguBHX;6PSn38BLnp7W4=(_^a_K8fegPFdh?B~fw2~t1 zKCSKN2t0c-=?4(Po=y-VEaZ*5d%ZESC2B{DtzH35sQ+4~sTg-^#O3i_`;$w*B{*a5 zajUE-COfOYgpDnq%$o*sIj0klrD;hkD59s)x|`m+T9gq0fvEP;__Y*g2sQ7S-yddv zca2uKpZB@5anS$4eeL6Pz{?YxN@jRDP^17LMKBgKW&i5FffheFJux-YweZDuQ1w#i z?ZzDG+Z8ZZH2wU-q2?9?(HHRlKpHMlj<~*;dS&&m?MPMi$0^zI4k-%mGyGWzq{o%U zR+BhRvHKvJktD5OY5s_|3Xei&Tz(b#M6HX-ATy)VoSyL&on_YA7ni<3Njo4?QH~q? z^tW+-f)5G5+z$ZdLIy!RD)tl>2Pe_fFVwp5yF&HeCC0Dk9#8;&M<=$>N>EB9gWz82 z+x@|Mx(~C(u{N(tuvzf(Z-hy!>IUX;NA*MLtA$QsbFX)OWiI=w2j5HSQTlXQfqCCn z(9Zq(u36=WWs{`I-k(2$=X2T{Yv7Fal;&Ii9)~`OVtPXpfrtEn&8T9mdmM8jUHGw! z3iaNt*lP!cOwlw`1N7P8xyr&&le?R>BS< zIFj^IhCGW>^{SP&PuJZ#qiob6_~DckGbsRF|T-MVNev?FZEfvP+X9=xFQNUzxr>CqZ%L!IuiJgZo9F9n1`5OyM# z?Xtp-daCD~eN=}ClFFmkV~^5&m=s|$qMvm>DCH3+D{1D3E<(@3=n;)+Y$~dt?xQY0 z+^uc?T{UWHbSfe7sHbOuCELx)310T44sS-%$H62o?R+T-8n8GkuZVqs2B9F%?BF9S zSz?|^Tyos|`zQHhRuK7(e-l59qB%V z&|QhOM|bH?bE+*iK%np(-u|Mwj*HNdC^Fp&VXRiEfp^Pcoj;r2nE^c1$;i6GlO*%x z(%8Lb&OWqmcgD#UORkQ4OE5$OP7Tm2kxgouL?LZ-^uF_&EEuk^UfBs7{8N;(UzD$~ z#7s+aA5*CE6)9Tbv|p=6^SP}f)h~q#1{r$8^4Pw~%)MUZf%yUBQ(xF?H*%hV;hvvO zIsfa`W546LB10>z0DN@iwVb`kagU3qZJllXa_Jtv24EKtM@2CBalU^iF#-s(1)eoE z>Jy5vO4<=CQOk9V!!n3su7yn@9V)XgfEh?;llJ|VUihZBth9A?m=JK=@d*}lR}^O^ zC4WuvK$LV&O;CokHQjuGaF$u4{;nQlcp?-eprv7j-TG~BpamGEMZd@iioD~L>6D_PIYJRaj zHl!gVebhcrhX;Gk8UYfxg?37zO0e)V19t_x0Pjhk>5&hDc}gzxek(g?wwsZ`O$W%Y zFg4M`78zzYUZp=?R-f!alm>Lo?Xc+9*Sz*cM$Nkyj1G{4AEmc#kDN~5KTh@sKul7$ zuU&tdwoUU!0S#=C=lZ#UlucAz>`^kX=xw}vGfZ;cMJiAV+s?4NkmJ!Vb@|N&-`p!D z==6Hu*(N})h>nGe!AiEAwp0hlF`{IkoGJTq6>FD#uyD$5-l&%tf)}Tm`FYyS?_zqb z?2~Eu0|?_%kk%}0A;}=|=7@`g*17si<_#%VtzTKbJZU@uc&FQ#v5C`l9g$GW&?D7R zK*KPHqq^%4%mxpTE$&@;_){La4{EuNtHlg;N4O|-{ z&IiGCgB#Xu1$brv4vSehn`Mn*#}2h?o5o=e6ovp)zj}7#YT?8Er_#@*!?rJaC+GL$ zdUyIv*$E%CSJy?H(sXe+BPcYc#mA)Qf^*qdYex;hZT~A7H!d@gprj2d0gJcJ z(Oa+`6@2DcYP1(qnX;$i0)ftod4e7l`7u2{{<)2iu z+v)^T%7Er5>-*LaA2wjp5dfly7de7)5)pr70*LC(?cA~|tJQUD1X=@8_wMoPdK4d* z1YDV}^Z&i`th*nZ}?#5uWa zGW)mMtniUl*vCYD3BtG;=5CP7z5c$QxE|&@Z9H1g!q(Yu+F$-~T8(RY7Pg;MCnH5U zxo+GzR{X`mzcJr?=3atue|`V(N4nt0EYQ7pgycS)6apr?s{!3;0d4Vhj37iPI!ryWd<<8x5w*b@8f5>$brK)wY9U34a7gKy7bSFsZ3 zk@vnpfOgC{LgXc2f(>~u7ji56Hyx<{)jZo!yxk2+ z>a{Bpm=FKi&7Dt|C%e6VhE?h!LZtjGA8r%k=0g3EtspW!S?T~dytCZ-b#n0Eovrg< z2{JnYL*wE#oGHNL$b&5Ybz3l9prnh4{8h>9wO2irEs@^4@MP~K!zDLk9B}sOy@_v5 z<=^IF*2r<&%qqk#`OX@PN~&gbl1mB5{|~#-y%b^#&6^eOGE#e>?AVoC9xm$1<(eTB zgVxE~Tm3hGlh5Oq&T@m_-jcabD!~D3Voy5$XL$B%wy$#}rzF$nr_#rMRtzz1I1D^) z);v@7hc9z&KQH&AG0N)RoVulaU>PQv5_&qMcUq$Tq9U5;aG` z{yS#<2IN0|Lk77cvJ0Jm4#lRuoO$Q_-{m944jpYmpfn(3pgG;Bfm3}a1mlszt(!T4 z2bFE@SM6xW357QFlu4-ePsw-fw)$zr80b2A+kA|$Sj>}&o0scIUZVG|Mn!w_WKOnV zJgQSM`3EZiBPbd)k2K*d*I_uf*$g;(b-8N^EgaB_=U={ZLR*&_;`8ycb(ud)1CwbG z^4ZOmer5mEKPkd<`4A-X+-d>!uN;mk_a@`z5@MFOruE1j^Q!!3TgOWQI)|VlLQ_yp zMke&&TYlqTJ}BT)a*!m0y~DMK*6fb3apX~WP_Wt{e47syc*(`3(d@Z-o|!E^*6JGd z$FtlJHz*{G>hI{fX&}B|NS2Z;ElOeV$i>RpiI>!Q;Kp-7Bt1x*qFi^zZLw9GCy<@B zb>{TYkmm1hhi#T842}gBs{689H)+Y8Z!J)AxBPpLeH9+*N5~dbwXttqmZoE8L7=An z(PI*S>=5^k9YwbA$&0X3afhCD=e(z_*B9jV#LDxw&VuhBy(tt8T!kNvHEJc@HlR{~ zO88JYoag#FI4*%eM%0dYc>cos8pkBHn%g-bA2h`eyWo(wZ-`@Szwe}tpB%}=1M zmODS#xql6zx4m`j1)1+(Ae$(%J5?vGbNN?}KmARRII!8fO0Rs!iDwF`Ep+xgvtvGR9)PxW{xp55u5H7n8*6^-<$JonZC{ z2(emTdOT-J0#GFg^evbELIW;z8}Uqg^?xvcLpkr{x<{|Lios(re)kcB`d(MjZf+hQ z3Y$H2D?It{*O9EPwCNufJD;e7E4+A~y`6>|m*89XTu5PK1ZWp5-W^)AP!c58x3JmeK{x%X1OGla6)| z^)Z_Y_TTVa3=G0%SWN8Yu&=L%ha{lBF$hCRI`Qjw0`e_Gz5259+i^#;Max(ixTUG~ zj8OuzsL#pg%BNHV^15^8qz_jjZQ&4bc@LMs-RUIfr*kwH7w-XMtK7AgT1E5CEIC0uPdo&|io%A8_P8fKn zA;b7ZJ1&;&*plAqLS2)&rOiy<*0%Q&jv`%JBGb;s!C!Ab0?iUPZw4(2I+DdHuQc*( zW~ysIz-rwyIp6KgBsll&ZGIS|uUL=exM@Qu-T!Yp!a=%-k;(G=(8k=1>ExR=Dx)UMrBq3Lo5w zD%*p#FaBo;p&lOQBIQLd#`KJx0<2vpCX1Fb18+vlvhwcA^?|nj)dPX3=R2Y#&lIHy z>JN|7yua25I>62u`B1U3&JyBM!_wz^j?RKYl&Ip<;xD84f7e|== zCj1x&i}`++mCyOll+HshEAz(*u&3}PM>rrZ0l1b^A3Ku1-N>)`>OfzNPiB&UNcz-2|M@JAAU2rHF zDeEHq`uNwTPh3|(Ogv|_ioF?zXCMmRyhh+6v|*rUYz&=_CHjCCf@CRv+~rToL5Srr zJUt&0v{&@MM`wO(J@L5a((@CcXS4p`Bd9z zpsWB%Sd!iEgY4Q6Ymw0)JHOo2Wo84ls{00IO4T;Wb4U{OA{`&f!gdvf&AHajL?F-U zqq^d8>sh8)%&+gOFd(%+ULJ3vN3w6>nD0YEEV&P3@Tl8zeaVKuXRcS`k>XN$75H^e z+fuz@So@z{!Xa~Y4+;DB7e9BvgX?z1OR+xgcO&tr1^>Fw6)?uJuk(_n9;n8~^1gRu z#D)2+-gK=ast4Dxh26X&%K2`dAqTw?B;{RzatqZ6w*rh3Z6y7UP(hMo?h>H zkgfHzOfJR#MHbN&FDl>XW~_4swr`G+JZ2a7$DEQ*;Q0O~2PM&ldnMZrd~M=2h}<$G ziWD+dzTf1aogG($$GAUT3yz)sQ#oyrDUQ_Zxv*t?7P4S~Y5KnXPsN%Ygo*;Kvbt6H zeYltGdcG}T`gaRq+`#OELL_~(;EO!XEI~FB^qez3Pu~~O?b8{+Vx~8D%vO=#lF&f6 zYJO2bieQjHOmaA(VDs3tj$V_ZT*;>zypvw)QqE%Wq^|R0mG3Q<&baZEBgu^; zJN-w7#dtU^j>c)zR1g8Z6m^dfGQvI?-i(-289lY z)@l!uYDgS2+ISM9!2XsfiF#S=UomKx?hE|Paa4wXeX4UB+iVxlwr1 zmCz~T9RVwTuGB&AOo?3Aq$5FWC;js@Xc;lBFFHOe%iXm;UIj*z*&-txOlI{8OupERf%IadibRsA zhLn6@zwN43omG{pm&{NyJ*zQWt$ ztQ_+OQeRdhyKzr6B@?#O*!DFOmlXNwiFHd;Q`8U)Ttdl-{a@@*A0x|R%hqA!Pm#6d^3yj3lNaUDMzZ6Hd?|5Nk~QB(Zq zTZUe)`1W;;`_{79?PXz*5|_rrF?gpgeCgvJ&b;p^DNYA?FGzB)zhYoA!^uVD>@NL? zhzuqFeP9=0o2vI^WS+xHxdkxLgVJlEt3IlegY}iM{#OXqYbB*jauos-rt5adAVmZzt$X`s_~ z$VB^oUn_jOL8Gv_iT-29l4XIhF(E!E7<6X!tLL;^IpVd(s0g|K@B-aPhbvi%SxngH zGp9+iGXdFfy8#^hWd*g}j=J!676UpGB^v>ZK z+!+dSa)MD%kxfpNo~ve2yM7)Fpp*3{AT}PM+1Ei|co49x4!c&ketS4{^%SIgfW!(z z%FDU=ojw;h)jlfCf56C1{2_$sI$voMz}Cnb}0;;7;ng~ zlpH2=GF74GB#!KecD#rQ{?r2hqx|^snv{8>qP)s68-wNnjc&cAW{+DN^uPD|H?zQAyjbC+8JIrYX+hyZOvJgUyf=@ZhtpkWjHti3pOC-IO^Ts1n;T#}!?_in zZns-Gu)pk*<8t?-bDd5Z*fkH0*DxGJl}8S3QlwnjLS0zWNTFwPty|tLLGy#57XaFZ zuu*K2nVv70V$FX@cpuRR*B{+YY96!R7SdYd_+UG>?%g=GHBRLE^RyU;VHzIQGxLZ& zUzzaf<#-zkQrH*X1(P2tJTcY}Yt83t=G`+hu(0P0oN)e~;*;&Tw%lh1f4Fv z;C$Y3mb-=ted`yRbnG)075K%I1?7)h;SWFVt#~;<4)NR`dbmA`hmL4A2$?m`AEp&hr1C;}iz9@JY#1_^tpbit!lXIwCa!O+2N z(UKzrQQY|BHw2{WHQuq2xy|SIZNp9#_789FZnzmwh^@?2AUZr`@;iP@TVRy5_WwSW4*JD z@^KS{_3WK-s%z>zvewf#&{*D8R*jRYIpm}SUCn;UcAb<}f?0#|=$}#B(mMXpu+$EY z*xX#PwW+`=g|nlhCQhQo=~q5IK96Rsq?FN%Oa6RpM8X*}zeB}0`w9M-^Yd1^vlyc5 z=dufhpL)Vv0f!XkiFqA_O2a|W-n*G4GKcp-D*3dJe*`E-y_q`oIWm3%m-yXDvZB~>+$Eo z+Jp9T#B9nW_lRp;OgdpKr3^XL+gF-v`L(L{-nco3NMEMkc$1N>{D!1A^=B%x z3p@JD?c{SHXaO%O{C9nPj3N=t`kcXQyN-zKVbkd#5?mMv^{7kD;CBxpG2l6O31lb^SZjxAE(=7zro1AGgQf&eGF4iV8-hl!+c|<`5l*F+_x}P{9K4gp><=`fL0UWg)m20@wuZT)@9G6$PRx?esB8_X`7M3bI^im&URd>%kZJk1Juw-@2K zr5Se%GIRfoy!#nAqtP6q7FTS?!t&nt&dghiw{pgbn&m2BHaN8y6X0unC!_n zfc(j4{=Li6;Mc`-bz7D#fN0Il+;TKi35l$^kgR?6^mZFu=_Y*!%pg!e#=H{Rpd#6?V2yZsVN||Wdu*{+|oFGYXpeVJSUn*gm-7Sl=KOjwaj%O zsDhULkXF_#^3mM^f&uWrEn5bPwp3nIzii%!{`C$NAnB}*EoWhWv;y;`;?SV&{$)>J zNz3NieK^vxK{`*Lqo$AV-NS{5yb3SSQO zF3`&q5BK+8v>#Db;fMnj+dh8JE%5y=xZ9!%n&^=iz{NCCNrLDutq3z@?{@=3V{RD< z#^#nOpmJ%%!gJ4-eRri6N2xS3nvpRRVq0z7nK)XBwu}a?8g)N6Pxih3LM^#-4@6$x z{9<$RJSy44V}cMO9!DvV+VF(t9kHj#6t4Px6V3uS$NDyY&cujqWrwx8HgI%-DTMb(uP*@J z7*UPWMI<;OT4u=1s zJ4>`6Axl2^rQ}zuB?)S#T#L81g^oS=6>;B#=)cCwzX*UKeIm)~oCYW>{O(oD=Yt@B zo7B}dIXlM%U6EL?P@yb}`LkA-D-sgZj*ghtHDn3ha-0`sBpP+ABbb5^I8a(CV2U+p zkG(PQD5`s>l(}3i-^X}!?#J7|TQR)S*&V(?-y#%?UCC($X)^Wi9w3gcbuqy&;~;NFHPh;I?3`R}@B#h+pBf zGp+#yP~7KKX;^5Kz0awrlKGU^gQ?2@mBS=+PWV#B3cS|sbX3S{1d6|~eNcwO^&WD?yKwIqU5f5lO4_}7)@+d>I82wVCuFyUM)4u@!=p;4~#1`|1 zk*Q1X#EP5cu4jNm@J zPwr21U1wNar@!76h(5}`a{Sf{p<6HVMC9fIku$G<3*mm;xvu7&m?t8ORXYo2AQT|N zt!tP`vspQ0vftq%9B+pkUv)!9f1BFx7n(~RD@5V#Uf@vC6~zfdzm;nu@3tRAO0erf zNN@PdbnPy3A~Dr0&?&#=plnE=Rf`fLzg`1z%Q6~@h30+V>7ZI)-)Hw%-R^=ZdCqw( zm`SghsVM_vn3;FkEBtbf-DGn^D*C6q45xwqz?5uUT3Nb=#P05HoX~CpJQ62ix8>`l z>T_w#r6{#5p#alsEHKW5PAxWS$0d7Aos2(1yRVNilR=uZM^+i7=o?Mai^3@>2GZ89 z)>-Zo!HUygQd2L^8l;q$|3&D2Y788gx`6SW`hgVUYO-ZlVv~NG>=CRCG1@{Y!6&Sr zCUX(8+6@TvNc^gRK79KT#!oiPQ2A27T4A(QpSYx?n%Tx;R&tP9O$H5=o@HP)3=guF z*9c%ZKBg8&%;5(`LwR`l`1I_aWL16ktK3?oOlN2F-D>7LioMITUC&jHuU*F+ETDYn zFxb#qS~6%s1P@Owp$JE-X5X~MOhOY%_WF0bmoqdZu3p`u5D^=O9V?^@p_G*hxO8@y zOj(pNJ2mykTZFtpe&J_7OxqqAnEd9jb!LPhDmFg9s!6jDMk@2ieN8-dX*`Pq6Uif9 z{pO>EUwD)Ik}He^l7nT;9Wq?~@T-%0D(78^vw#a%Kmg|W1o z@7G>9Qu-(BJQNdB@JgGnwr|vNk4aOec&>Qm#<^L{{*OG^C=j6-C-u#d0?NL(+v6_f zNKh`V=xmRdEHuM(d>>B-vlBJ=-PWHXWqK{nII};=hS`YURgn41@_+rhgKUo%+noGr z3Wau%(JY^Jg(7*wl<8!#d1iRkKm_5a6Eas&vXhufC;hFb{cZ0yqyKds> zNo0}wy8l>JF=2!H4B-Mo`^rXq6Jb9Dz9mif4Cib1$mhe$l$LvEp8Fq;;DuCoMDqzs zii%#|-lC?}zn74rU_R7Blh6_>h<;yaQUPCfc|WvvH6KdJ`|wtB{{Bg*KEA1N;cbt1 z^6qVDLF)+`wI6``?RcwrYI4__V5iw`|3U2@p!5y#@S>BZiaR|$eeK?u_e|?tD`;1z zYUmX6%59cK%tl6M3fUXQn^ozU08ECz>+NwX~+5&i8tg^<-DL@|6fk z{v>%i75S+@nt_NDkQQMnYhC7`8L8@S`tA9o0p^gIH7j(sY!Zu^rGy?ino+WZL?s8s zk!1$^Bvk$T3YskLEgSxR^*7dj<}~#C@ynOGK&gs~>F2n;9|PwR!N5~*K<0aWn~yVO z4~r$tNn$3a&T{WzF@2QKC_&$pR~-y_tmJfOq65=~Q;1z8vx6rA(ULbqbuNY7^2V+J zI5bEndu((9o97duM?ft)P3>GNo^Xp9qT7$gsv0oRlDVR_H?!981ENKyfE^^jx}fQY z6KMeHBEOKU*wgMsk_*0pV!1qz#gtJ(sy-zkRyOt{Z)83EvE2TyFHMrN?XBQ#c%A_v zpXO2OF7N)TBwU!g?(0htEg8l{4?a)%)4)3RvX<;b5mnvvl~?#ll(FwN;cF zEmW_r6Y;e?PL%f7M!Y4otyw=(9pIA2hWDZy}yraF8YZDWn(}R2dfHW&ln)lIArM z6|X>49_3>6!Qt-mheN@iTSGs|&sCpDI#=ILK0hU(dXPs6LwP zIi?>lhX&lc^a6kAy2(jT#Nk$w$MgHuIY*y_FiR#;4cB@e&70W&%+2bbd+A`%sd=@B zId!Qs+En{nCZjFlUpgD^x=jXG%>k@76*Ob>{JEA4#k2G5=^UpKkm~S!F9I5d-+u)> zG;dWV^6}uwy7KSxJk_VWYxlbb>?;ZB90`z2=D%f6lzPEPe^c7fs|(}^v=0yC$>QrN zLK129kO>PANABUGbkhE>HULQ{(4|wx`Bs(!1I}4iX{Bn{CKy{e&&BJ}gS*xH%v5BM zn&J?b$sLgRpu3q9wA6RQ8wnT9fCU9e@42m18rJ7pf9udwIuLDnqK>4-o)ZJRg^e#}pJ4Ou`!$u<>#E-hNGp2&mTr&O%-#3+^;C+A zCp_}O+7s3SlvG=nMHo$TV!=jDn81#&Tz?G%2vu^wHwkjcl_*OudQMh%Q#0kRDg9y@ ze`<5B=Skf#IPH?_w;TMFaz$mYS}AAlKjeFU0_^&et{6L07Cctt9c@=~j#sjunyGj) zLgM`&a8Gut;h!;nN~)-kuNoWIPJtRRLs_bt$psfGYS|7d2a7qOtE=#I;a66k?czIv z?;5*{axyLa6a}S9v}ovrlbf6UyWa}=_B8qP1~fn{NFxxhj9P*N^D_WC9E2kIX-dExw!5oFck&iBVN01Rm zXG6Kde_<~Cy$S8^3vFbCW!_j`MWhKkY*QTR(ZVN}IX*1Sq8&U-3S1)J3lVEuw19&~ zbn~Pc{d;yamEbnzlC!A&8g{fLjVZf?e`fU&xVNcMENO7%rc)O~M5;M4)sC^0!o$9Y-p-23DDzJnWYVq67sM{fxIdya>y|ROrAwcqbIX8ZqH!2mT-!eBtQdH7fQU{q>a% z=LRCh&=qO0ry1aSN*+ur3l<@=mm(Rbl0nmay9TXHBibrII&pe}U6kUR3Gr|XpR{Q| z_**mSOF*m623}UB;$*i&6wrDX$Rgg1*7Abs`#_-{I!bcj!ML3qH2SeVRLe>6sbE@F zn@V?GzHNqFx|vLnm3UoG@}nT)_>^egV$8Sm_!l&gFjKZ$P!Hh6p7O@O>OPVEfeg*E zd3s_$QlMrJ9AT}!dJTZ_8wFY)>Wb;_H_HSP>gJvq`;i^1f$^#wNm9V0bAZUHg_ zg5-I|S7E}vwN=>CR=&1b{r>c2)w=Qyy^7P&Oc$GMNCK7;R1R3J60ZrHu^`Hspw z#p}YCAl!4e^p`rc5$mv2pibp$u3HEU((>Mc>*>}X;2I&w8X8|+AhC}du|7CBCKl?d zZ0Q@*EuGOUdw<0BBkhLPV{UZG{xa^?o;(^m$2QwHxfJ=)5tGY^2CH#Hkn_N-Lt8~o zaO^4!`l$t@D#GAq3(SX`Wpd(#yL6rO=@Bi>nL}P6!~;b9R;ZoD&@)j&q|TGmm7AEE z&YQZw{+6}4X{NMSK3AvX{TbxuHY63ymZZMXGUtE1NSk2Fk--bu{*&mELk6!rYDX6` zEjsO!O`AfM42TH5i5t7m9x_gvoU{tH;37*npTa?Em+}4$=H2CU7QPOqO0@_mnev@C zWKt)fk`?UDK&Hp1;(n;zVT&%P9;3=llX(;L9PAJXoLQZX*Rs+4QWF+6FW7(B7h)B3 zKMIWXM^&~#9Z~)F2K=FvaIM^GGRQ1EhR$tKeR%{R-1+*>8pn>}dhl-z9)oJQB7n{s#hr?z zwFW0Jzmw9Y^lXMEhFrWhUhN=Hj`5Voy@FSK-?v+UrdXIC(PaelF+RJ@zn9>65taOz z^iWcp@{bDF&$-pNZ+DncKm-rm6yg@c-6z@QGNT?}K|^QlVM_+`QJQpfBsRsiFEk3u z-IH~#VRR0cDEZKr(TX-a8I03Hd`x-l9=zu0(i6S&e$ULX04O+Tt6w?v9PvgTH3|~% zjwW7WkP*WvzccC)Bs%Uk*!M%B@f9_ifDEXi{@x1#{r%Guc;GQMyBB52*V`PJ5-UVSe556U zPIP8@*jcE(I#ly6sH0QAlqjrf zfV#Ee$8htZMIBE{X_8x7CtYMA;C@v)kI&RAL9i#wKjl{76zZz{r1zL!+@KsUv}dIW zNA#V710y%z8SAldUwzX@MZWZDPBUbr^K9$Tk5Q@ixJ)Vnp<(zDkbn0rWfVy{jzTf{ z;+l;9?Lw)|Kg1eB8s7>AZRp8!?HjpbZZJtmWajGc=KhjC7i~os^VVaz@Lb9lClh+NjQX1{9YN_200@ z8xr)VJsr|l4$0i0)q^2XV62j8q~pzUaQ%f%?(3w)Fqmc_cA%MX*tpZiJx?61a$m+J-t_2FBXN2G&pg25Et%ut`4DIr#0 z9_6Cmxn~b7T#H@CF&xEMCDG{c5aoVAcg_pO>z%AEnrHUm@w4P|&Ew^eW7*uerNrU) znN^I}-Gx}3k=6;%9x>zLrs{iK)Bnzkg7e-hj<;oCdH6*_7C*&R_u;$8cUPI>x@TwC z?oJmx{r5As)~}={tzI|Ux|8}iH#s5!)HbrwHQDIV!mQ!t5h$q=#+kk|eMBKYT4+zDBrys-BljE{-RXQk#ToOj}34 zip8j)p$pzEhGwF$DZ-WP?~hBm1EU{vEAnBAOb=5Gq#Ro|Akb?Fuv1gcux6>5{H&t? z2-S?fpbmJmPVR+&%oYNk#ztLezmc2K`5Ec2D{YbkZRKNs-hpEJPzCBwI8M$ma_~cl+|y`|bkY2i7_HVhNK1ZU?8>y4l@ii;rk6i#ZHl13!n_3( z;&6DfpCoefNGD6AO|hW>0I|y`7Bn5MmkM-(G7@;XA2>D>K1g zB~wpdT!Z$MaEwvJ`U+Fy&<1r>!tJF<^4;I~@etSe_9NVQ@cJaSmkcrv^uEocnTrc{ z%Ztiww8Z5B@*8Fuyy<0HBGw7RVAxB(y_6(OK6^#uGuE>5JS6L*wkQ?Z^82)SI!JVx zu{9q~c^=QjS`~3pZZqt`<(^DG4M+tZ@13f;u1SBUUsdwOCa^-^AR;; z3P=Z%BMl-1*TH})mr^ax7NxEn;^uw1z<<1@TQzX&xGd3o8y+xzxJ-bw(L{m4hp}Vh zJrIW{I|5DPicepxUn&1<&|iHk_fDK4;Z*rRudo883cx~%>@>W@dhDXU^~c~z345`5 zWnJbp_DZGb69u0SF1) zhbOkjFQYgHzBVe#M`_;Vytg+YqOl2tS`|AANhdb^$zn>gUL8m*;l}<77};GP7NHWI z5->W#u+bE}(}ct4DTB#OUbA^+zv;17EJ>MTKJ4pyz31CopB|K7dZ;c6iNZ^I2^Y$} zmv!}JC=4pIu_p1{O(id_#@^DCzq`HnK91OvR_(9cV9Jb*M{~JrzXlm9dAihr@y|$0 zzzA1C1@GMuR_eWl;XSF|a#uV5ne^bz#9(Wn=M&Lb1owjqX`9{J6UXZ7@Y^y)j zok&l#Ygu>4PDa(pe-XqjIn{x5_7izjSwip64HIZ8ci^LD#jrnL4lgYf;v?_of}caN zJfBLE*bwSlM2jW_W}Bs#jgZHn`7$^Rvb)0HTu;7V17g3~V)<#eHTAT>gDY;d=WBXv z$paWOZ_8x-V9Cf4b7<~Fwjc6Di6CPw1sduN zt?tfQGuL8!LiHG8eqzBTTR0*29>`E0zaP(pfoQbX_ZCNYOAKeB#t?nK_U#T z%vzx2ET#)>+EP!Ey%WJoExw3yLbi?fo|RWr+~miBwfgY^PX= zS3$^ILLCO62KD)2{~w~tQU#;PM~4_~yg)N4G5 zq;;$b@&ko9Bfc@U0f~hd9V|OT9NiIGSn@c#q0MJsKdl$aqSOeGL2Fd|4Mt)I8^z_i!Q+= z&<*lkL}_+o>b)D0%UN6@-z-pYLOoNja*}qtmjC1O6W?8j>~TE!%4@gOl>a-9sCM$P zWIX5E`%mplqb$+#!!k$QA{`TIo&|H6EA*P;y_OSH8$A^t5_|aw zkL6DAw~e|LdKB(&EG1&f*;&OMj`%)Ar6se38`^C^e=4tV=oz5{ahUpIW)#yY^~w99 z#V|YrQ1#his*TS^L8inc8hBcq^A8Kl$D`3*#}mxmacj>ZOE2|aFkvyVg zydXJZ;xC5dlD2DGx1qfEadobj4e3*+GR~h8XhOPzJljW+qtszuG!ATF6m7@viDRiM zeHZ!x0qK;)$%4N4y0Pmd4LT&p97R;PDT1^F&#bDieilic*yc-{7)gzzyj;SKYoYIb zjPhopHns?Ial(59{e9`A`giX0bF=PCHFSy(Q6FwQ3jMNw!2CW{<~QSub~=d>W=e?S z2yGns2#)u7M&80Xb>qdlrN}&tuP2Rz#tZGxl1um%s=|-!CQgXkJ^SwA-Jin`Pt+aS zjPLTybwb2W6>irq$zx2$&!lUAOqN9yK9Xzv)(3d;SLJSO=WliFbSa=Ol(cZ@adA@&HF~o{EwM^jR%3mNLP|6L^>>D=-|pa&{u_K; z7|A6qCxC2_e!TA;$!fW~v@V!vsN&Z3ie5+0Mud*%9_NyJ?oDERRr_NjMT@!brWW(gS!_n z_^U7$tIB!3<;4B22T$^tG5$w_t76!^dnTWJp-=U~C9z}L?l58b&^2>&=|{4T)iXNY z*ZRW~jtRSjm$tKhJtSn|&tuHO0Gn;Y@yxq3m`<4}TfFeC++r?JsL_jxx#lq@IN>w4 z(#3;2KHj7LzPQ)Z)AM1aOMh9yAmv!kFjf|Kg;dFoaoy}+PmwnDJ94MiPD;!XVkdlj zOd;Kfz!>AeO2OqX3W%N9$ zsR#$wRra>s;%9xR895LEo8?es|Q|~ zG2&+mXU8-bc+wEw_6fys{_1>8`O(ovpu#<`SbSFugs32n$=Y6eSaek1mE!p8CHh>; zMrQLVUwxxyw93TXWP`)G(d3w<{?5HVZd{z#{P*G}pv6h_;9wm%jx zvamrgx-@{-P`6C;sUzg)8;EX_G&#IkAz3U)hLs^4@31Rt%_B$flYi*n;hovRd-S+PTG6mjZOum)dLlxJNqb>@wtp zl}>W%%^WK9r1A9rG)}i=eV0Gg=QXynL0LF?N7N5mVbe8K?)<^-r_tC``6Ycmn~N=P zqa$CK;W=xV`bIsQnNih^+5%>D*EbeMir%zj{j3T0ZlVtK0;BnaxVyVEGBSEy!nd@v z^x6m8201f_Bh~$}mZF!%uRdpB3F67}p_~M~Mj@u(%zEzH?!DLIFI^_}f|adB}WW@+j`od;Wwq^KhJ>G^w8 zL>BZ4Lf)Q%A?*PyaNd}~05Ldi{dCc02PWkvf^|nt+SJA!KJ-XE%0u7I@j3&``@`{0 zNP=*TCj(Xo?^qtHn#^l0NSDYue4;j6b4ihUpNzpy()>+eb^9HKXV2M6 zdo`F`$K%L`JAy0zgw)44xSip?ty|b)l~tNOK=itV%s2%G22Kb{Y2LDQE~1M=Ihoas z`7fM(Z)#H6J#+aOH`(SuaMry*Dor|#v-G&OP?!CU_PG0KF`kK0o&~GC^O|rj0u^n) z)WAgD$%^^p&LGW)?qoH;T`(b?_~c$^3eC!ktNO;Aoa7}GN1D6;)*Vv~c6~1&NwuSw zzdOZ;DDg4*{c3u*)R|6{k$!UdAJ> z<{9BM)`#+Y5{+;z@{eL4tgx$N!ddC2UO4i1Q|cHWT80Jt@Y6xo!Cuar z87o77PtD2_3xZa2`(it%rd<5qS^-qNJK4Rgw|9{>WGLXB?#z?@Gvdu(Uqa!m&aY%F z2gSBxAHHKjH05arX#}6MjftR@$k42KiTzUiH+j9E%qF$*u3ImQ_%yjd97}% zy0=bv*z>Z5%v$`qZX7f>^3Q$_Bb}>j!57YnbXtEyNhG2GPyE}5pA>eyWyL-eWu%FW zLhWr_eA;z#=JYjad5KlmgXdTF@r5P2>B0{Y4mib?L zFh?>nj#5XOARLJb^DDAk4D(H8HLK#Qnh6f{s?uX%QRTxwBT$*AxE)YI*AfH|=uWbX zOn-gLKm{;}{Iw}qrzP$hyqsqlssCaEsu*r(q)Xk%Zt1i6NLtB}0^>gRLv>>Te``)C zQf-XiJT;4{4|9c=Kqc%$F*`5d;l=c2aI>`tSounx!p~EAq@%UcAJ+ zH^ylPKHUC{)~h#o-O25<=;v`gF$pkRK+WGA%1Nx>@N1`2H+4H!A1?~N%(WIRYZtp~qu@u6 znxzLdX~N}4L}3rZj@&k|E81zH=gkQ@FOC|EzDEYoq@#$;Ct6&BG4|%>DuYBU9(AW+#x*odm7*k*FF?`H}PI%u99#Q}HQ)07qvSYR3We86b zI;)KW!a`U=c^i+%Y=~RI(K>6@Tsb^r?)Vkdm&^mk{pK3Re#7fGgQTAy0&+`byD6O; z``gagSqa}emte>Iv^3^_sIy0FjyX75#rdf2cItAQ6=R+`Emm#36oZDd-;~ou5t)Y{ z8+_33wxcS{7Pp+S+&HNpGMRwfi(@Or=$$Sy2st*y0Qa3~z({R8%W&B1{ZCT{7Qf1C zz3;L%Jbhwbf2|$>L<=_RHf5~2m2Z%Z4l{Kiudc{zR9!oYc(D}`2k+Ou^vjQih(o&P z>F-l4RZ@P8)gbvl*Sln#+0Em3R(I)j%#nIQ`~jNpM5+9HvlXmhVWtcO_GMXiGW~q6 z8B2*cYRPrwwIGmnOz|M*78Z27IHL_E3SB)9WxcS!@Aw5)8g4LNxz6DKXXK-o zz~s%3{n~G9PWk}+w7l2w+l})w3Yak83W=qpz$3`f%Q0wtA`Fgh6ZcdK+FL!7PSG^iafSQF6lxW_=GqXlw9`536MSgqq zTTDuJEqWBO5}TN$tuiO%PG zy)V}A7;8|(XsM^G2%*W0t4zY`>8mLAwNizv$2uCU4KP{J_MIm?o)X<;vxh{^oID6N~Lhbt9r+S)yp37gUw;_QxY$}vTmddL7;+|(?m4lx4$213zl*|Zn zh>MXmrzb>YdM_UqNWJw%=!eT&Eq>4b8kkJ)B#zSkt9!LR%%LFIJG}n)p91M)mSQw} zKNo|zj!`)rOF}i2Q$z)PI~{i|!Yw(^+s%<~$<6(Hv9PkPy#&r*IIb;9>mIkZJ7h9>@f%Y^zSfyx-djScH4 z-JD`bC&EoSP|ZDtw*NJA!*7~9KXOZyDXdB*vEly-3ZNT|W!QA;>U|11e;E(DmfX12 zzITOBFW4xJ8%J}%DEdwkea8FMABv+aBd>Zi6FMwssP#Bm$U9#Mk+GxnwDQY1WmkJ5 zS7qeX7c^_v$!4^kugx;uTSQ~#?c+PZ`m9qj$*(mQS=22 z9b6Y<$`vaUJs(JuJ_HYsPZRD4QRLkeB<8&cId+xP*x7k<>dVW+%sg~1XemnPWmox= zJlNk?_Li!I(vQiyX|QAF`^)t0B!iTv$60W<=Stk`FT!)gwEU9bN6T=KD@|>LmKYA= zFg4PXwO!m)_s5OY-_VNIdn=GN)7LE@&0zsSMh#EI%Oi3SWWffarlJbd#ve7}ip*1e z&2OwfM`#hmw}=VtFJsJLi(GMwywro;wVo>j6O=Cms!x{&FT8O<(VC^gz8f4f*wXED z3iQiPIx_bAVB~Jw3)4tFSvf_U~Bu`j{o{z4QId$;@2 z$NuphyN%LP{%H5hbu|FY_d@Ye>+Nuj@S{SJ4 z?dhQlN4`bQ-LMEp#LYtXO%E@8bfy0UAv1ri0odD^gLj-%vErz6MVfbyWZ0e?yeYEk zgcS5jG$8fX-LFSMjO247R~v88feaK zS+e!H*&JnPGUjCli23n1&30yymN}}w+}&oPWn==n%}z%wl?tG<7$~sxH01R#wLbk! zP3kIqnil=XrHww5X*K*#G|EkwH@KXaBuR@#v)i49Y0+kWqpovs9JF^ zYuxieMH9gqN3BmqUK=?@LR`;4Jgm{AH@x z)6jE*MuZQKTOwz!KmGYm|9$XfjYvss`oTN&tJ?wFYYSgd$o-U~g2HH90I+JK9VhL* z2j_q21wUaIqLXHYH7Dab=4664{uI9i6F{(T=`w?U@!edoeP^ET=apBk#8H}?T{USL zvyBNs5)u;F{a^g07Cw5wbzSU6Jq5Xd}{tanp9hz%->317dLFZoDTi^GxMZgYF;c2>;gzFcUtx|?S%cQ z5x@J(gIWoXzo6jB$$4JpSASOj z%E^a=JGqueWno0Ys%5~0Vpy6u4PO|5Ik@{~+D4GfrbFse9vz~Qfk37DyYl4yrOXtm zZ-O6;X^Db(HvpKS;>6~HEOSgq06YUQYJvTsPmDk97rF!l_7REZ;j!??m~0)~Uue8=j1C(@ah`MTu3kt&(0$cc?FApUuI>$|c+zwp z;+@=k=a$z|zH3@;wz4I1zOm`IU)MW!cRD4CPSUPSw@|Q4!h_JK`+>%1cU#sel1|$% z04Xf4ADw{CY+#_8+I#oBrr4({M*1Clu-?mtid3=AjoxLUudf=d$HlF2^j+u3u}@({ zOPnI5s8l)oMoXcovP&MIsA=Zf{aI>pN`!-h<7xQdu)=p{!;DkST*0IF)YFZIwki#r zCGmXHtUvQR%4yF;dS$A`?BB>)Ngf;I6ugP@3C`1p{CDH7*p`S=+RXebK5=y*GDg&`n#uY@Bv z_l&?_PG%?XH2?Qw4Rbz+;*WoA?e{Ll-R0-F1zN#uQhvMMF@1&93zO z{iBsIaYp~c`)!Bg7vh{1K9U-?uD|r;QoQli?qc+yj~G?N_8FjpUI#_Wvk}`=8)~!` z!V!a2eT8z0Nfw-a5v*crPxX0aueuswc@!uh*11=lc_nE)Sf`Ty8Zn6AyS9CtXS zy$CC<(cKwDgQZM1VBEa0X9z&GuFtrOOSNl%jg%yi_(b->740TKnYBK52D+#4Bb0* z&D$XvU#j_IoUo#;WSwl?>Z6r}|(REc1>BUI;|i(X8T zPPw)mTK9bw3;R@0s+Mb(g*fU7)aKNyvFq&w^Q{iD8LJ{mRqRPm$stqBxpSQu^Y)Y! z!E-L|UhQvKap|YVwN^2cEX4Vj4c5t;wWn1HmsxD+_y!zs*-T1N+WWRLwy0>ff+P%x ztzq~t#%SY#nDF)SX(J7cvk(Wv?u&rSv zv**t?;jqgtH)-%cKI}kFrBS2uhMVzf3M~;XrFFycdSoW-zOGsf1m{p6wQ5U5vo{JN zK56M5=fc*s5pmQ?)LhSHgW>VIJMt_8V-No=o^aiFxi%g|cw7*F+bNkVO&M_GOQm&k zG}X=Sgz9E`CdTzYLSMhO*JNqqnJ*RN<6DqqLy<2y6!{tlolEu#j{FoPz8t;?DL;Sxrr}ML?H)~V`TJ5)4Ni)ItM;tBeje!q= z0X_(E*VfFPb5g_JtEuUTiYSt@Z;7hg3!(>O4`8!;j0R z6K~~?3!sgu8NlFlW0udgwtfY|<+6n)S{xNt7p{%SAJ}S4uAQ~qyzDk^RcmUde@rjr z*2>B`YE?ZEW!Q$ArqpD?%iprbdHCvzY@GEI`z6}UHF0w$6s$}*k|etqpNLMqwfUWy za2(pgnYJ!!YP9BZ`5nRcYKX1e$%jCC)klb)28$pJA5&7E(vhAlf6j}&pF;tJiF{M) z*K}gjyNz!c!>C;x^JWBV)N*p;q4`ee#X}(sACwIr_GSVtxa2}6Iiu`zgJ=q|ezkyc zNmg`u7pOd85_M0;WI?)HUUZIRkKB))Pkm2`2Q8WkFc}Qw3K4@KhbcZ|EctQ8{E=me z5*3O&`)uNcEMGEEZj_01aL>#OSTd_Cz(;nzGU*Oi9upC#*NvD{6gzhdV9-8rl_QsW zfAyrmTfg)L=EbFkOLcdyM#VC_EOlT(-Fu>Wr%sIt)wa_g`TO9_dHOO*?7}XNhsGiK zmw7WfHbp1>k~VmFnAaSfSLz;3eQwXC9u`zB)e@S3WAFpl+%{3%~|})f;dyj z(_wG;P&jh*C<8^r7v97H^H;e(BrDI@AcDU-Oa(!{cDVh#+86>Vb>y+;eyWojcq~cp z2%a7Bq(K&5HazR$5$ec)a!s64{e()NGUsK#TY}O+Jbgx+s-Pe#fc1=VJD85&RZyJIrcm-=hshgDN}jXPPzHL9S&ZPv?!Ze3I){V)eq^2Vk$1LHts;b*?&d{NyzF< zm~E&P;3E;<-O3ci!TC0cXBy@LG%*?Qm4f79{fI2C1WD{n?Hhk*i@^fW^TN{j#0g!( zk6%c2XS)!3wSX$9NYH+!XI`re+!irDN77<5_cug|{=1)h%3k=R&I*nx7vp^(FtV*Y z5TkKB<#t9Cm9i_ z%Vr@*W+|u1?$6llF~q@L3$#(kFfprWr~L;YMuh1QYJb(bS13eToPSP#)EXWD5b(q6 zfRpw|3%e~O7a>RqNAmKI!HU2Vwva6Yc~GK004%_Vokwd|MAc>HCEIkmz%+2k*K)Z8>2-tHUK_qyxKUCYGn%hE#(HQhNg zE;(ev9NvM^?S*~?(p861;Sg=)CJPhFMG|MpqscF;r2J7wrZ%rNT7}`{vD^g<6%_DK z^m3|v06j9Q%Lf#*+fq`N^n%P4{tW%Ki@JnLd-dZ@IR%8{`|&u~>~ZNT>!`QnFmERB z>~C*kQ~&IkTdwV)ueO!S{Ou-GWIz94;C>;EW7m!A?Uzvh*yo`;<58Q#6K`3G@h+;- z7bf%ER1lh2=xN+c`jvZIYgv^>uNDuU7Zye(lAj*y@hkHU5Fm}>4NtHBO=TS1kG{ng z$`WSdI zvfvPaObGi2SwqskJoi`lb27La9>IdlsObOR;25TF8W&J=4;;)0qUlsVbouORal2Dw zbs+X2?Zt{0UJmdc5zNb*LNRdY&K2_0k0lOD-=sg@h=_Z+D9K$`yHyj2U7Q!zKxNr* z)G_tV_!QrOgJO(rFAYjQ_Go{IoBd9N!o>5A+YJ!T?LrkKsa3E6d9pYctrlqdME=OD zor`lsSx4S2}e5@g8LIRQF50r?(keUWVv-@IHN#s}G|(;PrFcU576& z{T=GN``GGM?#&eYmzgV>f0G%3kpM5Bw0pUje?ow+B`D5P@?xDmYhj&D5IeTvxqLg- z=`q?bxWh)zyJ+zP3od-z@EVCYa>27MHM90`jNY^Im2JDqNDUjULtpna#ZhfjQfJOa zzBN}rEa{$;wG#Ycc>4)yv6lYC?<>zN*`4*IOZo~pij89&wB$RRbsc6lo%YW;-JvSm zF4U%*^xc2eaQe$%`OKeyk>fYo>&Y7|Iyzc8SU)N%YCkgr4DEVWQ{NYhFU`)26&c$6 z{d7vTYp(E(jG3s?!`-{WRtXK_!A%i2sPuS%qd}(g)h4bSaDj4)AGyL@yk2wSF1^Li zo+fu#)W7E_Sle0PlL>PcrjJlg-635WhM2V8*X*>q0?h>)3EEzTdnv{JlNAg?jGuD! z$2%}n6l4eCpac};{og^-t_PX(Oc_sh6d|TNL_wT5yw#dXQDw88+sm|OddrDvi=`YT zuGKak55-ZBpuWY#07u811860ez8a9(1>RrEoOo?Kd%v;Ezz6?7O;XXO2{JhUz#yxg z!(tAga;Z30%`jfi?2LQ|WVhGa-%G*~k?hznX@TF1-so*6kSk8_2(y<^Q*kux0W>3Y z%V95mJgdm!Fn!MjJw3W*?)qosQ}Knwvkj)mfc zWT-FfM=izj#&-nqhqx<{Sq5&cB-b4Qqlj4PR^&>ChI@||==#U_Vmq!xwLX2hcV<$D0DNYBIA0*L?@p{*CiEBD1(ZnO?&3EHcwPe)E{i2pEu^`83@ijRpJjzN8HMZmM_ z*2Z*gBmd9UB!UN4H+J@u3ZR*{eQ_vmvCWw)#|=nVL2!Z&0UFrJ`|z&Fn6V6GYCkc^eK}-50>!sqj7PQI zQ&Staa!lW8`L6n!D|$UU`1>`Z{#JVVv8GFQi-7v#pmK2^;Pg|19IJhCk{0bF9FMvf zaSmg}AIyu0{IkJts1CF1vcx5c50~uQWE>aNCUvk-$*s`Aj9P8XxLkjr2QPI z+WY=#>oC85V1Cb0^#!)Dxoz`Xg1Uk%VX@g%j>lM7Slk$@QC=>*cG9Q5x1$6zt!qcs z`9otbkOzTjS15!aZHRE{%wNVsnTzppR+M#L31F_1hOt085ucJ%{H8dt|My^>w6RJ2 zS$-KZlpKU%gM~mMs>_{LUPhCbfu;!-<(>R=`Pt-1ZsA6Zf?>D zxD=TVCPLyZy>0|XE&&z?7M;1s0*=sTjg`D{Nviqx#O;f-Rc>EOI6q@l;W4ZpeiwoL z_9-Gfld4l6D9IsFNmDA^zZ-ZgNw{AOHC|DwJDcB#_YYpZA{l)5ovs)U%$1{i?3iulpRK*$hcEIRHng89uD_bTRrt2R;25{ZLr)LqOhb(rCl6Uv{ z)AvAbTzaF*De;RA;* zT{Mt+C5j(R@+``S9+CXojocWL#=ty406QN=CFN1NSjtidsB1Jm5}&k$ykcQ5vfq7U zJ)SLO@J2=FNbqTNiyy;DEoNKX5&S!Tvi7^VhG26yaDQy2pU5j(r;i$Up- zDarBYy%D|H5$Bt(p?2rb$aN1oI&0jo)6{;ZNNrxpxhtsqsv#L-y{OwhK7~$Xc%%8X zbDf2&55l0-md}ayCaFwoPTC**g*x;0=E};-6ciMe5xl7bt^%+K2Gr5rm&K+bkY3?J z!9&)tjpzMW4;q}f+eosPN>YmzzP!Br$5FHi9Rv5L7k9>q@uv7R0bdI;xU)_q54Q?Q zN(T5pFlNb9=g))iDVAoX@t{YW_z40$q#fN|r!YALC$MZtaML)BNeCKBP*2^@b#%=U z+=~sTov|k;_~*a;eN@y#-b5U%m@b#+G{W)d+fm`7t5iOM(U@&V#R$_Lfq#fpiQpv( z4J@ks*BAW?T6_xEiuD~+u_bXYdh`T41l$T^>;X?wBhyHxeRvCFz-&UDA@1tTZizhP| zt(pQ~gt$KMhK}^jIAo5U0j6+8LtF$6#%CT7MKD&xrBf5=ic-4oFqQw?HRI)Wr`+A8ta11QH&D%U_`~DG9LvW4&j49@kWNYO z0}G{6Y;>Ww?{*d(=bvA=LKn|Uw!F0>czV=nmI@{-xBmwrCEM}W`XP=zj!Pg^cql~^ zZNmTnkS)hK0szXpcmV3$+?sx&aX~BOfnF zsO3$9F#|MVDh{_vyXp?N;A;k8(}$Im#~iW5H#x;tHjwIAf*?TDfI5K8Xw>~`doB+u z*Pdm2_F}x!1j=XQ)7v%%?Zhz}ZO5#x2VAuq{fX-2ick`e_n$!dj&TRDB{-ZBM%->ZT{Da5{P6L zPC7}c>+N`z7jH@z16rpB$f~ekMJWv*zbbb&nw$U;fD~1hSQ!*UI_}VnfKYF4?lALn zDn!^00Of%3M$^TuuNGT(XYs%R?jM*0dL6$2mUIB|s}7mneiO|HR!NUyD0QAw$J|-& zBK;A?mu`n6OHF}5^^;?g(_)_WgVI!@dGYpD{vzzEJjACj-^m@k(+J-Z!6QEtoDGK; z>y#4E@fpdKpJ?}^PrT_!Saz}1eJ4ER(xZl>-qMN_i4yS)?R~6}@l>Sp z=Z$^9@_~qoGG3`D4%J@0Q)H|8>n;tJ0$F%%(!;0gio_^KvJ;N~XyhQwh%kB8?-sQ zEF<1Ar*Xguxl@>HA13GgGVE?Ir$I0nu5;BZ{iQS^CsXGMjHrrisx+6a&ff#l!X z#cS?U?v38fO~!>`uzl>wKEWAkk1;gg%ajIRveQA)AgvW6*?Snzk+8l9g&7atoToOl>zbk9l z?FX+^X%-fS;N=kP#~x=RQk(Bua4?0XiSEB8P64s0?O`^uO40hX#e`$BHvU1np8dfS z^bx0V_@R)%Z$pFyUr$i|3GbJ64*MsXI;hpK{$w>*qA=!RxVtj_wNgrF;ui7MxTXcS zZkmF%#in)vDJa}NogK@I0*8rjZ;xW~jV`i3SIWbTDpya*Tqy%Ei>|e@w&vNaR6E{6 zhk3|e!8W}+2ha<@mt8nm-6SNOvL%Rv=xsK^+N)0HhFGB$bz9mM>{ArZN5r@wSZ)Wk z@9G?k87R9Ok|j|6{ryhwBWO?%ljA}^tA?BodIl45VQCscZep7yfWDsBa(=76Pm++N z;!upohsEATM-dK?c?fQp?la1QUHZn10ua+nCl=M>`Jj?3C<5O8^Bg`sbrPo4nvz*w zViuK%2scAsBo7lRC*P|sCqG}RJTju@fHBwopE#!<-Q$Dvng31-R6#Weg8IzWpxnMG zi2R2Sp@@SohkkBBT>stJ_y6(v)bi)ipEM{U_-Q4jG2F??4vrx@j{?v!r}r~EZoXaI zt=B;`gm_B!g9wc?8A(~Q#r-+^?hE|?sU9>6;_X00!UYM--HR3Cd%r&}_|o5Ixqlir zbT+3tE^9cm12rJ~~zMVBL20dKm0F5agPZ8IFeh+}VX*I)wS8*Vt z1(1I}Mf+6a-U`!@M%DJW-B^Y*H?~rPYtPN(*4TNZaT78!j(XR^gju}ow|_fr35u7A zwGes#2U0V4v-B{9^k-^D{Rtmh7JNO1Kd4Co1mksBT|&xsjj1o%v6CpI%b!cba^Q^k z(9>@~dFt(>-}y%nKT#&KK#qR{M?t^!;^j-Q!ZTVTow_{#%VhYV)Yocg4e5&j&qfG!38y>FH^l-hcR?H%{d4n=L5yjzNm(aY_Wepgu_pz`=z{ zGx&}v#N+MAQXuBTw}>34p8r1qz)c^H`2PTrpa<>js?qNaM@3KAJ-Zz-)6Bv=={stt z$^0*V6zWY}uX#7}T1lhdpZ;kA-=k5d_~ZzhK{uuD7yt8!yLs`HI{k;py8?jIpX{iv zj*!!#ox)TouY|&O%wu(^OuhI+6ko3TaRwnoAY_n>h1}TxhnvK))}*1yR<@A(21K0l zBf@Y>%t?fjTp)T3L~kwR+hk{C34Y~iG!E{bEO6aQEO~&}6ir8zUm0>z|Nl?PRsW*} zR%9SIx?F7x1qqNLhzBn4T8pFcpR7c#QTUvHh8Er}6%VBC-Z#()SmLk1FKpg1DF|Nv zu^u1X!1f>ge1RejgJMS2rL~A)5GwEUMYFAH6)GaXZ^6WJ*ddi` zj9^YLGxL34OH4PsL~SY)2RhiBNj?S^Os9yrvHaF(x(4Y%?x?#LO}I&CV)to1nRoA& zSi%t%Xy4eBzWLU76E1ORc$k045yTg7d<8iVN>Fh>GChnn1a(o&XI88;z+=Ucf|y&K ztw7OLH-;wO`_P<_?T=ra?>VAXHEL)h+e*o;x7xB1g&(|eA`-(bAcE-Hf~O8N$IQ)I znM|4~Z`Pl3Tqm^-hAy9@zedUZ=$PQZeR{WM$B8Tl}*6EsZ2LOEgC3EPo%2& zaUN9JB-tHsAkA*u&%(41CMPQ$A8b{bo`dl5`B+`t+E)Flg0(Va0ujshIBBhQsoSKa zo!6%1^cufpg29{LcCEZZfA*+9S=&4NQQ&>(-p#l776eHzB(M3M=H%eTe+c_C@KfNH z-31e!eYgJE&C}ayxU*J6=XORoxvnrH(1X&YgN#@ z%(w=aS%nwwoS1PsfZ*Q0Fl}f%yI)Dh(n98TjPijsHPZPm*^iv?$9!A6vsg@n5cs3W z=#H%_3qNhNu|@tx){R?+gLD5k9qiZ{(l#{a1UvculcnG{fDpKH$iSxyrcvT1%9H?eL!*ZKad#0&}!Cjh4z$>Pjf4u z{!7PW{|muT&-(_D1=)+2>Jpt%$PqxYrdq>&hC!G*{J*cDRjVrwzv_S(`wf&f4(tEh z9A_^9^h2WjG~9Mv5QZnD5n55H@VaXYOht_U1=Y{VG3s6n9GN9*N`tUJK(Ub{9Gsk+ zt1AKKa+G5C!Qose{6g$^aUP>`;sJbAUVKUrW-_*G|7QN_H72lW$} zxmQ6qEjt-?9vd@4c3I@{=TIved#X}vuenLjPu)>(oH)H77k&QK{Pgg0_~MqoEtIa& zSPlk5!*d=>92a)O#9lEQ?-y}CXO@?*LAzqCy&Esw6MmESglc^3-4DzNJ1@mo8XEF- zOmE&Sso{lS#ox6u+!^I?W9V~MZ03uEt0Mmr8^p{@iBC(Y^Mht18j(?sG9!KnPEFen z-;>S(y+&@)ATw;2P)L%^uRGt|nbL(*WfBYt-^d9xu2{u;f(HJV7VT?IPhiX~zOr*S zT?qBhY^~2*So{XjY0&*5Fg1SU@o9AnX@tgXmf|0uEnEbx5RQ_>+@bf9^vK^T;g_hp z!8h$+D2ykHa?tMkIh;3JP6$vyVfJx|16qsHv+MyI0vFhiX|PodJoGpr7Nq+r7t)un ze^u`a6Ee#_OCgE|vIU>kJ2-gJ#N>cqpTeR36L+4#(;r(9G_L>(-WF-o@uJw-yy2^a3tnH$nVVz+;y&Q9`WN>om$hz3^{wd5?(llefq z%>7bl8y=2yxn=E}mR*EkAD_m-{&a9*3Ll3odszZzO30uVKW$8o_|QY^j&grp`2!O& zN9b?^>HshV?wP&d0UBJfDwo>$-AiTXw|o0m#DW)=`?VwBwoU^7qq5C0yae4wSFc^OcEm$KbI|d4 z(n>(-=kA7LM3)l;we9?is?%2U+^7$ygx>PwTM3iV(gSZt0i*CW2l@Q zgMpbTq`&n`A0W~YPxTxjqHd7LM2%a+QFQHW?EsYjoe}QAhflNKa~Lq{m)-pitYcHb zhPnFapV9xI41dKBb{?^fiBHMc%#6)Xmwc&21CtMSV(>kTEIM=x3`zBD=tfYM?fCy`d^D( zCy7b7^_jm?P5l{cU=ZcWLI>-mOAA>AXCtO=wzjnxk>P#4b9-)FakXPOu;p#nidp|I zC`yZS$ftY+8u1jqrMr?Zi)oS5o~}ybq|9u)d{W2DU$x@y!Szxko-KOVH`%#B&P~(x zPt3fL5Jf=lwz$BX`r%c9-Cn?ab58BiL-KT5%#&OE*>) zNcm5Gi3LtQb`NF}P;Vnj!(HN%bqH&n)43RS4AMEAPW%G~t=<8GTPVYg1x*o~Kkf6c zdtEDRfIBi$gceJ(Z`qA370OoG#~RtmHW)L{ zd!PCK&hMP}{LcHH_n+4}{@{6@&*y&b=YH;f@8^D)wd0IC^wppQfS>mW-5`NQP?DG` zzP0c59KDe}*xI-`f$X<$rDvvn_7JW4>Ntr?jK^=chpFwaa%H)V``dJ|fHfmSN0xaM zm@mPhAu%_xx#UYNqI(!xj?#)QjddKzM>}2kFsIoJUDwqqmkFX4kq0Bln>pVKZYN>d zI~+pnukK#lBZ%YdgbhF5Pw|agZ+L}PU zS78kpEmwpy*V1xsY2$V-L^rBFtJlYzWzf}$?h|G4yV_#DwQu;zOOy>|KIeGLZKL-v zP)IkLudsHc8+1xx1Ef};=DqdHt99cXoF7qxtFuzD-eT8rP$5lNk1KtJA$dJJ1Sp46 z_#{TKQKj5n8S&R;E}-RKALcSl6;`}Q5+dbSz`uojyKrkSr34Rx0;tB;4pHPaZOrgt zkl`4d=yUbbHH7q(y;}s!ZQBN(Us1((vB*g`4HKsG-@ZM9vs;C| zC*j;v=H2$yCS;tL(jGm99>nkhp>J2^Qy z7^4QGwSpv$)%j?TPa^&XgF4}1SUODyZYsh8E`*4hIXR^$Z+Ui~ga`~i%%Ezhh~GA| ziprY5Zm~FUFZd}a{YLCDb#uWPEWe6ZncV&KujxBiluEZW`h5}5*QZ1Tik1TRim$L# zg!LOdu6zYHYRjuvPY!ow?kENoYH>iV!K6nuA7UrMJ^! zcnF>1A!VcDVehHZd<;el;MhmT8m1@EO>(R<*76ug2Sq%9iPy4~0Ls5$!#|`w|xSu0EfEo+g5)9Z`YeZKIDCy+N}(yyG5l2^R=mB zn`aV)tq!EOEF>i+4uN8kirGo=qHne&SwWo{OqNlX0nyA7b)q1MuJqUF1?!BJ69<<5 zw24&$cMU7s!6V0l+|21KP|S^RF*O}rTtr`T>QS2<`MF6tr?`yrsF2JAIbW6qdx{3Q z^3>Kk(yh(SUl(Vj2Wyw*!;6nXF1y8z)NgAIr*gLkUt533_hf8nsB zYw?!53rxxI4E4K<*R-{{To>6)4`R3bl$A+AuGXftrmse^CgAmR>8Fg8ZoFND~tiT>PxoeLdG1 z_d{?yFvZa-!xOZ~$IB5AApNU5pkA&-b#pL|X z?{(O0i4Y$6>0sZV^;|0f*P9=^8@_P-8$!Nv?)=YAmhRLIph|^;bH;6M)4f_&`+!pL z%fB*w>~eAVk9&q|)6*WC;*2(H@{HvCM}m&N`^h#72f%S26>zMqE!f!B=J5U{X+$ha zS%QQ%YVbbfP|(LQ@@&p7w5Q0#F#S$(8s|&|&Z+LMKHO}fUQDJygV1(x89+2NIy!pI zdftb=TvbA=WOxzd#uP5kM_Ja*)Uz*r5=os>BWV`=x8n1!&tQ_2BwAuM1)c*VLqnMJ z7D#v++57XBwK{@G{7e0NeV*Q>Gdn$;icb7!2)n|NDb+i{@EJK}(Xs3{Ahq^VHaEq? zJ`uOj8ET7+^g!mq?L_3q?CEE&6Ju+4f4IboKSis%HP>|9Tpa;}IC16!J$>h}{TAd$ zs0TVz7KdPD|9(1%WQ&w{Ev)Gdr8BWU5fmH+hbX7P>`ZMH6pKpW)p^@Gdir8;_6kVo z)97XPrMk`F^^Csbx{eFku02Y?SiK(U6tpZ1_$dFjhZvgVe-q3qFh_opF`;zX z!^M3%zX~CSxbZN#XECPka1%@^L1dfKRMo8?M6qO)&FOdZwyEjPAVFa-4`0AM*6f?} z+CkZvdYBP+6AAGbDT>>?iD^9dm^)|EC;>^h||n4fS^!lo?@ zS_fYT-o!9QGJ=e%d%LHq4(M~>s>(ijfl8N(bw)+}6EswcVDLQ%iCcxq4ew%ryrGeQ zlsmKGfL1!tpiYZW%ti(bY|_ruCwTw!HO%^9oaMNL;SSk@lut@wAa2{n>oDVv#SS~%qQk(A{6&KE8--&^%U>}Ce_r)kUgY`LJ6iS~hGRlE?uu&RsC`de| zjExG%Rpf{@owfByx*;SmH_Uz8KwfXaq6WIyk)gg~|k@(@DYJXM)Zm|IU2xTek)+OiWhumPle1@A;8NOdDgZ98*!vJsAHp( zKHz%e7&N)NOhq32Vp@_@V16_kx#bUE^14WgPugsuD1({MQWgO9_Yv%SG=6jpOt8{0 zf~t7ngQbJAmmSqrv#z0~Oh|_tA6|H$)!|CL{8J3ujO6~VVf@94plk>FYQP0?2jsuC z_%QZQXa!#ZT7O5A!`@QZ(IpwyLeyQ?7t+Jjrki2ic@blEUI+1lQrDne>rU2hoI5ik z00SUp`CysbeNxVXG%paEHSFDp65TD3xD6Sa9WAGkCp|;w*t>TWNLGOt6iqt?k`Vn6 zlMZ(gwAMj?1=y2C@I12$dzho;7a}-oCXGo23!NFzm_U(z*KO3N;*4;TH@sl-r9r z0)xV)sb-&EmSZ>qCA8-SR?sDGCfKZ>0!T`T+@!|hxOX?Dw_!I4I#37Q)p^H-;GgFD z>Zs9KbXScFm$+>>^puj)ytjxjILD=-diDIp7w48LL0fL&t{H?#(KEc_s;R1ixg&Sx zy2;f6^lXdBFtN*-M=6)b8^Bx*5MIiGp=^m)4P_&#ufMRdf-+9Ds~+$JZ6JjmhI|4 zbLVeWA|q1lGBn`so0KZP4y1IV1m6u-lqa4Tg!M4@R2lRf`r7Vlc@!QRl^9E&iuTUOwNKNvvK? zshJl!S0ja)GTW84aE*;_50**quQJumT3H z*Kw2Q+zyt%_*ZLL^5S%*aL#sRU#QMGKE)KXL2_N0YN@rXj8=Ws)OsK2sR7B0X1j^$ zpxas@_;D%H-gx9imsw(766yP11FuD!>(~GKZQNN@Tx`B6YP(<%Yst>#Q+$4f~LGIoaC2LZae=c;?zJ24-znwq~zk zec#Wyte%t`t<)0b0hDp`ZxTwsF*5Ll?g^Zy|9qD1qY}!gjy!>a&EQD4)nbs9zjoKJc#3x4B^n znlg2Cb^?AD_7fyKFcaE$2H96Ag45h{cK*%W>X|g^@9(o#=b6Z;qNu*M_JfsLH9NvZ zbF3cw;)|Be;nYQjg`Bjhq}O=X zV<79e{-@rwua({1-GQ3R^0@d%(#BsQF*mlhhTL(*ULoZE&f&-fX7i-ALg(@9tlAyU zOi*|qN(ntXIj%7!J0R8A-{&hO>Vkq!hI*8r<}!rJ?j5$9^!gu8whe@tCFvtI#;jm|9l_E7CIAhlM={33A0dUVIkGve~EEaf?;dc z!SrH=DsF#$41Qqu?$V`dzXp4tb1XSfkC=fU^CJVg!mURpCYW%QfUobSw+~Ik>V?in z#vG3+w-xxaWGS?Gxr_d#bWp0rq<(M+rG2u+(lMY7|V^%-$F zEho~Yx77!aMj8-{uYGB#tv%7VOlCOMC8%-$BJVA(i^89Se^It8xhfuRGWjLSNl1N)?VzIB3&!QY*>FMDK zUm5}W&8YC2(f+y~(I7@S@!KG4)o|}?vv2Huef$&uR>>9LaD z=)hnK>*SH0Z`>GruS`}_HwIC0`!s+p0cW$K*c9D|Po zDWe1Y3AEEoQOdH$%H=nRf<`Fa*tHN8a8H;5qc= zL9-6kO;IIpgzi)`BzDy-e3$cbLK?ZNsJlS3L_M1kc09u!jYEM&mEaW=WA+Xt-JT)4 zznc-uWgOkEPswzx^=T=+I-#9Ucxtf`Zwdkmrp^2Kar+Qqn{)6~L$2Q@r@Z!cG<;pJai_ljCB8^4V z^Xlr*LOy8x4u6Y#+WVw7n8D)ODF=AS!Ho-JuT5MBm#pn-xRM)ETDc=A~To3pMq z;d4$gJYb~fiq~6gQdocEmTQO3fHb&KWB<8( zxl?fs0X>-(XeLQnUV>9_Fd{SN{vN$UEQV53NqA-9PRA)OPDHV))6aWjlCN$py24ASr`prt#+bbjw>8=9;Ln zjMILbWjH98sy$6XLj_HevM%jOJzN$!alUrIkoD)o+C z%jeN9U_sTV>1q|a8Mki~S`wHe27_6$;p|M8azjzxYA8iPltD8)rA-@{_H%=g*0uWg5?XP9UDzPy&y0>Js){;#yrU>fF=u14 zD5L`u4;+Um=Eu3If=}h(ST=8cau9A36BHJ%^Sy7*70X90o|)isx}A)f7f1{^3NtPg zf1c~P9r9<@>QBUi{J>m>+NqC${E>CCar`Td69)g4T`U8Va?lmf)uy^jEsTxV z`+VIBLD%s5^@#EY7xbdh>c78%bp+d^uCe2PK{r1TSCoJZKLHH49JP0Rz(_1=&IWaNe?CNT7p7}n0)hx(vF)QDHTF+CC z{h97oWGviY@yp!BC0YZ$GzWKSCCHl`c*==wgBgh)N_IKsTxhx5)YDUK=Yy)XZ@=5c zF7*3|)p1e)K+!tw3vp&#v0p3UioGl3U|k3dLb=lyHS{P%#;_4Ys+qgDE+s+vdx!P5 zC=q0CVL?ao^7FuR7Z|4h;8HQOt)8$AB`Te^H$kP;IXUofOdgruoUk5@A?vd41=w!5 zCpmfGyMr>erc9FL=<-p`1^pSgg)d}PWQ^C3s_`>_q@usZ;d zZ$?8=*1Ak#ZcexhQDG<71E{szZTeG!;_HIWf0|0q+{?B%cl!YL^^d=8P9-c4%NV0J z@^NHVp`l=A(LfLQZi#>&w|1t|Y;Ii!#8pC;g}IhN%NeXjK>G!?QULNvFtb$@^tD>Q zSZYm%C3KB~JF!v)1?6#qKH#saVjo@7WHCym-aO(nI7x%9e6r<+urf__#ce4Z%%!Jn zGApDE+MyM5g1J>{bT`6G%Zp%GxbA_H$z$Bb8;!l` zN|u-C!fsy>o(K8hc!Hy#dyG)FBxggHTE*SQl-X!YnSQ1mJtZ{8h2OK6e=|LkA8`*m zIE4C+p-#7ZOe-d>JLG6(-qG{-YMuoK_7vT$+ar5p&momL;uMvB$VVdgcg|4^!BOV* z4&?8xQ=)=2KN|DLEZ6)|lVnTn?EGyZR$NwmtKdr8(XmDx4$UFyDPobf?(sx`Y5EYb0t z2G&A8HA_=htFp2ZN-KPN@A2Jmb4wy?7zCsZ7or=qz;XZSIs_`O!>RfGrjxvJH)wVS z1ZHk=arC^_jvO;Z$aFiR9&|}QziR#~_1Ta}_EAKXUk=jzx7z1YM?0vGryOb@g|Zk7 zhPiZn!8IrR$b*oO^-J^Pjg1d9Oz)d7x$|*m8Xkb2Bf}?(V}Rj=?AP33=~-wAhvDED z*VpP@tApl5QkU-hB0RS{Z!V4P{}W|fp9RynT9W7140&!okoEKf zn~(*o`brDo{6z$GZA|Cmyr)E6$u2F8k>$*l-?8IEMn;jhRieiKpEN#Yw zx820yM-qx zVD?-vSHBUNMgW%q{*~Czyth6FTxIKcu+wf-%}lpr?hdyAL&UBO7TdxiWR{wJys4Y6uRG6S{ObGVl+;v{r`+I)Dzln5$X$a)U~zZoXeb#a_YbXPPVp)G z>f*zKXQ}9$r#Lq6F+|@@Occ;Ds(sPNL()0qG5)0VK$r#O3Wo7u`3!=8Kwzyf(>BcP z{5H+0Y;j%S5mmvvKRP=u>i}`)?JAsd68MOu$+!OT7Gxt);n&_wSE2+jdPB!i9N#sG zZF*>9isKJI-mNDRqzBgudZ^GvC1NfVFB{(#DC0H#vtC`o{mCZIj(GgfkH#S+{>y%? zLZ246r|KK*y{Tmlb!{L-y46&XE5hrz{PzW%?|mUHG>_6m~_9ScYE*2-7yS42Zpq1LH%4_x8xmF>) zQk!?Bqh{$15n5}H8pU%^ETUYtq@7E#LQ4|_#ac=PaW}sEm%onsU{4eCoeDMhJn%QK zcm)|s`E|tx$Ey`|_g2CD&|-Ib9|q?ib9&_iSH=*sa;(QRU&v$O8^?|B>+tfa4S`m2 z!kirODm3H%B-ig8+(?j7Xmc}b*3){Dx|bhcI&%3&W{%o*RQPwC4AJne|GUsH)&!SV zRfBcGj)>a+wz~)0x-?41hNNJf-Kmxm;pt`DaHIe|$C^h3!^5&N6x3Jv22xIj!$yQ( z?08_@0inPz#$z$^U~5Deh5z?g{^utYc=bO&{yz@;?~ngu!hb)(!|<4f_1|Io-=U>o k-~7ib|4%UW3a_juA=LCXNn4f?hEhcD*y*F`M@aYo3-mFlAOHXW literal 0 HcmV?d00001 diff --git a/OSX/iosgrabimage.m b/OSX/iosgrabimage.m new file mode 100644 index 00000000..faf23480 --- /dev/null +++ b/OSX/iosgrabimage.m @@ -0,0 +1,125 @@ +/* xscreensaver, Copyright (c) 1992-2012 Jamie Zawinski + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + */ + +/* This iOS code to choose and return a random image from the user's + * photo gallery. + * + * Much of the following written by: + * + * Created by David Oster on 6/23/12. + * Copyright (c) 2012 Google. All rights reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef USE_IPHONE // whole file + +#import +#import "grabscreen.h" +#import "yarandom.h" + +/* ALAssetsLibrary is an async API, so we need to fire it off and then + call a callback when it's done. Fortunately, this fits the same + interaction model already used in xscreensaver by load_image_async(), + so it works out nicely. + */ + +typedef struct { + void (*callback) (void *uiimage, const char *fn, void *closure); + void *closure; + + ALAssetsLibrary *library; + NSMutableArray *assets; + +} ios_loader_data; + + +static void +ios_random_image_done (ios_loader_data *d, BOOL ok) +{ + UIImage *img = 0; + const char *fn = 0; + int n = ok ? [d->assets count] : 0; + if (n > 0) { + ALAsset *asset = [d->assets objectAtIndex: random() % n]; + ALAssetRepresentation *rep = [asset defaultRepresentation]; + + // "fullScreenImage" returns a smaller image than "fullResolutionImage", + // but this function still takes a significant fraction of a second, + // causing a visible glitch in e.g. "glslideshow". + CGImageRef cgi = [rep fullScreenImage]; + if (cgi) { + UIImageOrientation orient = (UIImageOrientation) + [[asset valueForProperty:ALAssetPropertyOrientation] intValue]; + img = [UIImage imageWithCGImage: cgi + scale: 1 + orientation: orient]; + if (img) + fn = [[rep filename] cStringUsingEncoding:NSISOLatin1StringEncoding]; + } + } + + [d->assets release]; + [d->library release]; + + d->callback (img, fn, d->closure); + free (d); +} + + +void +ios_load_random_image (void (*callback) (void *uiimage, const char *fn, + void *closure), + void *closure) +{ + ios_loader_data *d = (ios_loader_data *) calloc (1, sizeof(*d)); + d->callback = callback; + d->closure = closure; + + d->library = [[[ALAssetsLibrary alloc] init] retain]; + d->assets = [[NSMutableArray array] retain]; + + // The closures passed in here are called later, after we have returned. + // + [d->library enumerateGroupsWithTypes: ALAssetsGroupAll + usingBlock: ^(ALAssetsGroup *group, BOOL *stop) { + NSString *name = [group valueForProperty:ALAssetsGroupPropertyName]; + if ([name length]) { + [group enumerateAssetsUsingBlock: ^(ALAsset *asset, NSUInteger index, + BOOL *stop) { + if ([[asset valueForProperty: ALAssetPropertyType] + isEqual: ALAssetTypePhoto]) { + [d->assets addObject:asset]; + } + }]; + } + + if (! group) { // done + ios_random_image_done (d, YES); + } + } failureBlock:^(NSError *error) { + // E.g., ALAssetsLibraryErrorDomain: "The user has denied the + // application access to their media." + NSLog(@"reading Photo Library: %@", error); + ios_random_image_done (d, NO); + }]; +} + +#endif // USE_IPHONE - whole file diff --git a/OSX/iostextclient.m b/OSX/iostextclient.m index 646436c3..09c62985 100644 --- a/OSX/iostextclient.m +++ b/OSX/iostextclient.m @@ -38,15 +38,6 @@ struct text_data { }; -void -textclient_reshape (text_data *d, - int pix_w, int pix_h, - int char_w, int char_h) -{ - d->columns = char_w; -} - - text_data * textclient_open (Display *dpy) { @@ -405,6 +396,7 @@ wrap_text (char *body, int columns) { int col = 0, last_col = 0; char *last_space = 0; + if (! body) return; for (char *p = body; *p; p++) { if (*p == '\r' || *p == '\n' || *p == ' ' || *p == '\t') { if (col > columns && last_space) { @@ -425,6 +417,23 @@ wrap_text (char *body, int columns) } +static void +rewrap_text (char *body, int columns) +{ + if (! body) return; + for (char *p = body; *p; p++) { + if (*p == '\n') { + if (p[1] == '\n') + p++; + else + *p = ' '; + } + } + wrap_text (body, columns); +} + + + static void strip_backslashes (char *s) { @@ -553,4 +562,14 @@ textclient_putc (text_data *d, XKeyEvent *k) return False; } + +void +textclient_reshape (text_data *d, + int pix_w, int pix_h, + int char_w, int char_h) +{ + d->columns = char_w; + rewrap_text (d->buf, d->columns); +} + #endif /* USE_IPHONE -- whole file */ diff --git a/OSX/jwxyz-timers.m b/OSX/jwxyz-timers.m index 6e478f61..be31b2dc 100644 --- a/OSX/jwxyz-timers.m +++ b/OSX/jwxyz-timers.m @@ -48,6 +48,12 @@ # define LOGI(str,arg1,arg2,arg3) #endif +#define ASSERT_RET(C,S) do { \ + if (!(C)) { \ + jwxyz_abort ("jwxyz-timers: %s",(S)); \ + return; \ + }} while(0) + XtAppContext XtDisplayToApplicationContext (Display *dpy) @@ -96,7 +102,7 @@ jwxyz_timer_release (const void *arg) struct jwxyz_XtIntervalId *data = (struct jwxyz_XtIntervalId *) arg; data->refcount--; LOGT(@"timer 0x%08X: release %d", (unsigned int) data, data->refcount); - if (data->refcount < 0) abort(); + ASSERT_RET (data->refcount >= 0, "double free"); if (data->refcount == 0) free (data); } @@ -117,7 +123,7 @@ jwxyz_source_release (const void *arg) data->refcount--; LOGI(@"source 0x%08X %2d: release %d", (unsigned int) data, data->fd, data->refcount); - if (data->refcount < 0) abort(); + ASSERT_RET (data->refcount >= 0, "double free"); if (data->refcount == 0) { # ifdef USE_COCOA_SOURCES if (data->socket) @@ -165,8 +171,8 @@ jwxyz_source_cb (CFSocketRef s, CFSocketCallBackType type, { struct jwxyz_XtInputId *data = (struct jwxyz_XtInputId *) info; - if (type != kCFSocketReadCallBack) abort(); - if (call_data != 0) abort(); // not used for kCFSocketRead + ASSERT_RET (type == kCFSocketReadCallBack, "unnknown type"); + ASSERT_RET (!call_data, "no call data"); // not used for kCFSocketRead // We are sometimes called when there is not, in fact, data available! // So don't call data->cb if we're being fed a pack of lies. @@ -218,9 +224,8 @@ void XtRemoveTimeOut (XtIntervalId id) { LOGT(@"timer 0x%08X: remove", (unsigned int) id, 0); - if (id->refcount <= 0) abort(); - if (!id->cftimer) abort(); - + ASSERT_RET (id->refcount > 0, "already freed"); + ASSERT_RET (id->cftimer, "timers corrupted"); CFRunLoopRemoveTimer (CFRunLoopGetCurrent(), id->cftimer, kCFRunLoopCommonModes); CFRunLoopTimerInvalidate (id->cftimer); @@ -253,8 +258,8 @@ static void jwxyz_source_select (XtInputId id) { jwxyz_sources_data *td = display_sources_data (app_to_display (id->app)); - if (id->fd <= 0 || id->fd >= FD_SETSIZE) abort(); - if (td->ids[id->fd]) abort(); + ASSERT_RET (id->fd > 0 && id->fd < FD_SETSIZE, "fd out of range"); + ASSERT_RET (td->ids[id->fd] == 0, "sources corrupted"); td->ids[id->fd] = id; td->count++; } @@ -263,9 +268,9 @@ static void jwxyz_source_deselect (XtInputId id) { jwxyz_sources_data *td = display_sources_data (app_to_display (id->app)); - if (td->count <= 0) abort(); - if (id->fd <= 0 || id->fd >= FD_SETSIZE) abort(); - if (td->ids[id->fd] != id) abort(); + ASSERT_RET (td->count > 0, "sources corrupted"); + ASSERT_RET (id->fd > 0 && id->fd < FD_SETSIZE, "fd out of range"); + ASSERT_RET (td->ids[id->fd] == id, "sources corrupted"); td->ids[id->fd] = 0; td->count--; } @@ -288,14 +293,14 @@ jwxyz_sources_run (jwxyz_sources_data *td) } } - if (!max) abort(); + ASSERT_RET (max > 0, "no fds"); if (0 < select (max+1, &fds, NULL, NULL, &tv)) { for (i = 0; i < FD_SETSIZE; i++) { if (FD_ISSET (i, &fds)) { XtInputId id = td->ids[i]; - if (!id || !id->cb) abort(); - if (id->fd != i) abort(); + ASSERT_RET (id && id->cb, "sources corrupted"); + ASSERT_RET (id->fd == i, "sources corrupted"); id->cb (id->closure, &id->fd, &id); } } @@ -353,10 +358,10 @@ void XtRemoveInput (XtInputId id) { LOGI(@"source 0x%08X %2d: remove", (unsigned int) id, id->fd, 0); - if (id->refcount <= 0) abort(); + ASSERT_RET (id->refcount > 0, "sources corrupted"); # ifdef USE_COCOA_SOURCES - if (! id->cfsource) abort(); - if (! id->socket) abort(); + ASSERT_RET (id->cfsource, "sources corrupted"); + ASSERT_RET (id->socket, "sources corrupted"); CFRunLoopRemoveSource (CFRunLoopGetCurrent(), id->cfsource, kCFRunLoopCommonModes); @@ -375,7 +380,7 @@ void jwxyz_XtRemoveInput_all (Display *dpy) { # ifdef USE_COCOA_SOURCES - abort(); + ASSERT_RET (0, "unimplemented"); # else /* !USE_COCOA_SOURCES */ jwxyz_sources_data *td = display_sources_data (dpy); diff --git a/OSX/jwxyz.h b/OSX/jwxyz.h index 58d17fe4..c8607e7d 100644 --- a/OSX/jwxyz.h +++ b/OSX/jwxyz.h @@ -19,6 +19,9 @@ #ifndef __JWXYZ_H__ #define __JWXYZ_H__ +extern void jwxyz_abort(const char *fmt, ...) __dead2; +#define abort() jwxyz_abort("abort in %s:%d", __FUNCTION__, __LINE__) + typedef int Bool; typedef int Status; typedef void * XPointer; @@ -449,6 +452,7 @@ extern int visual_class (Screen *, Visual *); // also declared in utils/grabclient.h extern Bool use_subwindow_mode_p (Screen *, Window); + struct jwxyz_Visual { VisualID visualid; /* visual id of this visual */ int class; /* class of screen (monochrome, etc.) */ diff --git a/OSX/jwxyz.m b/OSX/jwxyz.m index 7643c440..b7e99525 100644 --- a/OSX/jwxyz.m +++ b/OSX/jwxyz.m @@ -23,6 +23,7 @@ # import # import # import +# import # define NSView UIView # define NSRect CGRect # define NSPoint CGPoint @@ -41,13 +42,10 @@ #import "jwxyz.h" #import "jwxyz-timers.h" +#import "yarandom.h" #undef Assert -#define Assert(C,S) do { \ - if (!(C)) { \ - NSLog(@"%s",S); \ - abort(); \ - }} while(0) +#define Assert(C,S) do { if (!(C)) jwxyz_abort ("%s",(S)); } while(0) # undef MAX # undef MIN @@ -111,12 +109,38 @@ struct jwxyz_Font { }; +/* Instead of calling abort(), throw a real exception, so that + XScreenSaverView can catch it and display a dialog. + */ +void +jwxyz_abort (const char *fmt, ...) +{ + char s[10240]; + if (!fmt || !*fmt) + strcpy (s, "abort"); + else + { + va_list args; + va_start (args, fmt); + vsprintf (s, fmt, args); + va_end (args); + } + [[NSException exceptionWithName: NSInternalInconsistencyException + reason: [NSString stringWithCString: s + encoding:NSUTF8StringEncoding] + userInfo: nil] + raise]; + abort(); // not reached +} + + Display * jwxyz_make_display (void *nsview_arg, void *cgc_arg) { CGContextRef cgc = (CGContextRef) cgc_arg; NSView *view = (NSView *) nsview_arg; - if (!view) abort(); + Assert (view, "no view"); + if (!view) return 0; Display *d = (Display *) calloc (1, sizeof(*d)); d->screen = (Screen *) calloc (1, sizeof(Screen)); @@ -393,7 +417,7 @@ push_gc (Drawable d, GC gc) case GXxor: CGContextSetBlendMode (cgc, kCGBlendModeDifference); break; case GXor: CGContextSetBlendMode (cgc, kCGBlendModeLighten); break; case GXand: CGContextSetBlendMode (cgc, kCGBlendModeDarken); break; - default: abort(); break; + default: Assert(0, "unknown gcv function"); break; } if (gc->gcv.clip_mask) @@ -782,7 +806,8 @@ XCopyArea (Display *dpy, Drawable src, Drawable dst, GC gc, // No cgi means src == dst, and both are Windows. # ifdef USE_IPHONE - abort(); // No NSCopyBits on iOS, but shouldn't be reached anyway. + Assert (0, "NSCopyBits unimplemented"); // shouldn't be reached anyway + return 0; # else // !USE_IPHONE NSRect nsfrom; nsfrom.origin.x = src_rect.origin.x; // NSRect != CGRect on 10.4 @@ -1174,8 +1199,8 @@ static void set_gcv (GC gc, XGCValues *from, unsigned long mask) { if (! mask) return; - if (! gc) abort(); - if (! from) abort(); + Assert (gc && from, "no gc"); + if (!gc || !from) return; if (mask & GCFunction) gc->gcv.function = from->function; if (mask & GCForeground) gc->gcv.foreground = from->foreground; @@ -1196,17 +1221,18 @@ set_gcv (GC gc, XGCValues *from, unsigned long mask) if (mask & GCBackground) validate_pixel (from->background, gc->depth, gc->gcv.alpha_allowed_p); - if (mask & GCLineStyle) abort(); - if (mask & GCPlaneMask) abort(); - if (mask & GCFillStyle) abort(); - if (mask & GCTile) abort(); - if (mask & GCStipple) abort(); - if (mask & GCTileStipXOrigin) abort(); - if (mask & GCTileStipYOrigin) abort(); - if (mask & GCGraphicsExposures) abort(); - if (mask & GCDashOffset) abort(); - if (mask & GCDashList) abort(); - if (mask & GCArcMode) abort(); + Assert ((! (mask & (GCLineStyle | + GCPlaneMask | + GCFillStyle | + GCTile | + GCStipple | + GCTileStipXOrigin | + GCTileStipYOrigin | + GCGraphicsExposures | + GCDashOffset | + GCDashList | + GCArcMode))), + "unimplemented gcvalues mask"); } @@ -1453,7 +1479,7 @@ XInitImage (XImage *ximage) ximage->f.put_pixel = ximage_putpixel_32; ximage->f.get_pixel = ximage_getpixel_32; } else { - abort(); + Assert (0, "unknown depth"); } return 1; } @@ -2141,12 +2167,12 @@ static void query_font (Font fid) { if (!fid || !fid->nsfont) { - NSLog(@"no NSFont in fid"); - abort(); + Assert (0, "no NSFont in fid"); + return; } if (![fid->nsfont fontName]) { - NSLog(@"broken NSFont in fid"); - abort(); + Assert(0, @"broken NSFont in fid"); + return; } int first = 32; @@ -2176,7 +2202,13 @@ query_font (Font fid) # ifndef USE_IPHONE NSBezierPath *bpath = [NSBezierPath bezierPath]; -# endif +# else // USE_IPHONE + CTFontRef ctfont = + CTFontCreateWithName ((CFStringRef) [fid->nsfont fontName], + [fid->nsfont pointSize], + NULL); + Assert (ctfont, @"no CTFontRef for UIFont"); +# endif // USE_IPHONE for (i = first; i <= last; i++) { unsigned char str[2]; @@ -2185,8 +2217,8 @@ query_font (Font fid) NSString *nsstr = [NSString stringWithCString:(char *) str encoding:NSISOLatin1StringEncoding]; - NSPoint advancement; - NSRect bbox; + NSPoint advancement = { 0, }; + NSRect bbox = {{ 0, }, }; # ifndef USE_IPHONE @@ -2235,33 +2267,35 @@ query_font (Font fid) # else // USE_IPHONE - UIFont *ff = fid->nsfont; - CGSize size = [nsstr sizeWithFont:ff]; - - /* sizeWithFont gives us a character's "width" and "height". - There is no way to get a character's "lbearing", "rbearing", - or "descent". We do have the font's overall "descent", though. - - drawAtPoint (to an offscreen CGContext) returns "width" and the - "ascent" of the font (not of the glyph, I think) so that doesn't - help. + /* There is no way to get "lbearing", "rbearing" or "descent" out of + NSFont. 'sizeWithFont' gives us "width" and "height" only. + Likewise, 'drawAtPoint' (to an offscreen CGContext) gives us the + width of the character and the ascent of the font. - CGFontGetGlyphBBoxes might help (if it actually returns a bounding - box and not just the ascent/width again, which I don't know) but - we can't use it anyway because there is no way to map a unichar to - a CGGlyph. - - Fuck you sideways, Apple. + Maybe we could use CGFontGetGlyphBBoxes() and avoid linking in + the CoreText library, but there's no non-CoreText way to turn a + unichar into a CGGlyph. */ - - bbox.origin.x = 0; - bbox.origin.y = [ff descender]; - bbox.size.width = size.width; - bbox.size.height = size.height; - - advancement.x = size.width; - advancement.y = 0; - + UniChar uchar = [nsstr characterAtIndex: 0]; + CGGlyph cgglyph = 0; + + if (CTFontGetGlyphsForCharacters (ctfont, &uchar, &cgglyph, 1)) + { + bbox = CTFontGetBoundingRectsForGlyphs (ctfont, + kCTFontDefaultOrientation, + &cgglyph, NULL, 1); + CGSize adv = { 0, }; + CTFontGetAdvancesForGlyphs (ctfont, kCTFontDefaultOrientation, + &cgglyph, &adv, 1); + advancement.x = adv.width; + advancement.y = adv.height; + + // Seems to be clipping by a pixel or two. Add a margin to be safe. + bbox.origin.x -= 2; + bbox.origin.y -= 2; + bbox.size.width += 4; + bbox.size.height += 4; + } # endif // USE_IPHONE /* Now that we know the advancement and bounding box, we can compute @@ -2304,6 +2338,10 @@ query_font (Font fid) (int) advancement.x, (int) advancement.y); #endif } + +# ifdef USE_IPHONE + CFRelease (ctfont); +# endif } @@ -2651,7 +2689,8 @@ XLoadFont (Display *dpy, const char *name) // We should never return NULL for XLFD fonts. if (!fid->nsfont) { - abort(); + Assert (0, "no font"); + return 0; } CFRetain (fid->nsfont); // needed for garbage collection? diff --git a/OSX/osxgrabscreen.m b/OSX/osxgrabscreen.m index 9dc5001c..8de3a09c 100644 --- a/OSX/osxgrabscreen.m +++ b/OSX/osxgrabscreen.m @@ -253,7 +253,7 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, /* What a hack! On iOS, our application delegate, SaverRunner, grabs an image - of itself as a UIImage before creating the XScreenSaverView. + of itself as a UIImage before mapping the XScreenSaverView. In this code, we ask SaverRunner for that UIImage, then copy it to the root window. */ @@ -262,18 +262,12 @@ Bool osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, XRectangle *geom_ret) { - - /* Just for a little variety, let's return colorbars every other time. */ - static int counter = 0; - if (counter++ & 1) - return False; - SaverRunner *s = (SaverRunner *) [[UIApplication sharedApplication] delegate]; if (! s) return False; if (! [s isKindOfClass:[SaverRunner class]]) - abort(); + return False; UIImage *img = [s screenshot]; if (! img) return False; @@ -444,16 +438,7 @@ osx_load_image_file (Screen *screen, Window xwindow, Drawable drawable, # else /* USE_IPHONE */ - /* It would be nice to select a random image from the Photo Album and - load that, but that looks like a gigantic pain in the ass, because - it's an asynchronous API, and might require manual authorization - by the user. (ALAssetsLibrary, enumerateGroupsWithTypes.) - - Possibly useful sample code to check out: - http://www.fiveminutes.eu/accessing-photo-library-using-assets-library-framework-on-iphone/ - - So, in the meantime, return False, acquire colorbars. - */ + /* This is handled differently: see grabclient.c and iosgrabimage.m. */ return False; # endif /* USE_IPHONE */ diff --git a/README b/README index dfc9e388..48860ab4 100644 --- a/README +++ b/README @@ -38,6 +38,16 @@ XScreenSaver has an extensive manual -- please read it! =============================================================================== +Changes since 5.17: * iOS responds to shake gestures to randomize. + * iOS can load images from your Photo Library. + * iOS has clickable Wikipedia links in Settings panels. + * Made `pipes' be ridiculously less efficient, but spin. + * Added better mouse control to `rubik', `cube21', + `crackberg', and `julia'. + * Cosmetic improvements to `queens' and `endgame'. + * `sonar' can now ping local subnet on DHCP. + * Most savers now resize/rotate properly. + * Various fixes. Changes since 5.16: * More iOS tweaks. * Fixed some compilation problems. * Enlarged the texture image for `lament'. diff --git a/config.h.in b/config.h.in index 0905154d..c11d0e63 100644 --- a/config.h.in +++ b/config.h.in @@ -103,6 +103,9 @@ /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD +/* Define this if you have the getifaddrs() function. */ +#undef HAVE_GETIFADDRS + /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE diff --git a/configure b/configure index 70097080..04b03280 100755 --- a/configure +++ b/configure @@ -2213,6 +2213,9 @@ echo "command line was: $0 $@" + + + @@ -2377,6 +2380,7 @@ fi + ############################################################################### # # Some utility functions to make checking for X things easier. @@ -6243,6 +6247,68 @@ $as_echo "$ac_cv_have_icmphdr" >&6; } _ACEOF fi +{ $as_echo "$as_me:$LINENO: checking for getifaddrs" >&5 +$as_echo_n "checking for getifaddrs... " >&6; } +if test "${ac_cv_have_getifaddrs+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + #include + #include +int +main () +{ +struct ifaddrs *ifa; + getifaddrs (&ifa); + ifa->ifa_next = 0; + ifa->ifa_addr->sa_family = 0; + ; + return 0; +} +_ACEOF +rm -rf conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -rf conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_getifaddrs=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_getifaddrs=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_getifaddrs" >&5 +$as_echo "$ac_cv_have_getifaddrs" >&6; } + if test "$ac_cv_have_getifaddrs" = yes ; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_GETIFADDRS 1 +_ACEOF + + fi for ac_header in crypt.h sys/select.h @@ -17409,7 +17475,7 @@ if test "${ac_cv_mesagl_version_string+set}" = set; then $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext < #ifndef MESA_MAJOR_VERSION diff --git a/configure.in b/configure.in index 85703d44..11ba5c19 100644 --- a/configure.in +++ b/configure.in @@ -299,6 +299,9 @@ AH_TEMPLATE([HAVE_ICMPHDR], [Define this if you do pings with a `struct icmphdr' and an `un.echo.id' slot.]) +AH_TEMPLATE([HAVE_GETIFADDRS], + [Define this if you have the getifaddrs() function.]) + AH_TEMPLATE([HAVE_FORKPTY], [Define this if you have the 'forkpty' function: This allows 'phosphor' and 'apple2' to run curses-based @@ -973,6 +976,21 @@ AC_DEFUN(AC_X_RANDOM_PATHS, ;; esac]) +AC_DEFUN(AC_CHECK_GETIFADDRS, + [AC_CACHE_CHECK([for getifaddrs], ac_cv_have_getifaddrs, + [AC_TRY_COMPILE([#include + #include + #include + #include ], + [struct ifaddrs *ifa; + getifaddrs (&ifa); + ifa->ifa_next = 0; + ifa->ifa_addr->sa_family = 0;], + [ac_cv_have_getifaddrs=yes], + [ac_cv_have_getifaddrs=no])]) + if test "$ac_cv_have_getifaddrs" = yes ; then + AC_DEFINE(HAVE_GETIFADDRS) + fi]) ############################################################################### @@ -1171,6 +1189,7 @@ AC_CHECK_FUNCS(sigaction syslog realpath setrlimit) AC_CHECK_FUNCS(setlocale) AC_CHECK_ICMP AC_CHECK_ICMPHDR +AC_CHECK_GETIFADDRS AC_CHECK_HEADERS(crypt.h sys/select.h) AC_PROG_PERL diff --git a/driver/Makefile.in b/driver/Makefile.in index ccf98ea2..e071dac5 100644 --- a/driver/Makefile.in +++ b/driver/Makefile.in @@ -673,11 +673,13 @@ update_ad_version:: files="XScreenSaver.ad.in ../hacks/config/README ../OSX/bindist.rtf" ; \ U=$(UTILS_SRC)/version.h ; \ V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' < $$U` ; \ + Y=`date '+%Y'` ; \ D=`date '+%d-%b-%Y'` ; \ for S in $$files ; do \ T=/tmp/xs.$$$$ ; \ sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*[ab]*[0-9]*\(.*\)/\1$$V\2/" \ -e "s/\([0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9][0-9]*\)/$$D/" \ + -e "s/\( [0-9][0-9][0-9][0-9]-\)[0-9][0-9][0-9][0-9] /\1$$Y /" \ < $$S > $$T ; \ if cmp -s $$S $$T ; then \ true ; \ diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in index 29517ceb..bdfc2dc2 100644 --- a/driver/XScreenSaver.ad.in +++ b/driver/XScreenSaver.ad.in @@ -4,8 +4,8 @@ ! a screen saver and locker for the X window system ! by Jamie Zawinski ! -! version 5.17 -! 22-Jun-2012 +! version 5.18 +! 03-Jul-2012 ! ! See "man xscreensaver" for more info. The latest version is always ! available at http://www.jwz.org/xscreensaver/ @@ -415,7 +415,7 @@ XScreenSaver.bourneShell: /bin/sh *passwd.uname: True *splash.heading.label: XScreenSaver %s -*splash.body.label: Copyright © 1991-2010 by +*splash.body.label: Copyright © 1991-2012 by *splash.body2.label: Jamie Zawinski *splash.demo.label: Settings *splash.help.label: Help diff --git a/driver/XScreenSaver_ad.h b/driver/XScreenSaver_ad.h index 824da10b..d9162135 100644 --- a/driver/XScreenSaver_ad.h +++ b/driver/XScreenSaver_ad.h @@ -288,7 +288,7 @@ "*passwd.asterisks: True", "*passwd.uname: True", "*splash.heading.label: XScreenSaver %s", -"*splash.body.label: Copyright © 1991-2010 by", +"*splash.body.label: Copyright © 1991-2012 by", "*splash.body2.label: Jamie Zawinski ", "*splash.demo.label: Settings", "*splash.help.label: Help", diff --git a/driver/subprocs.c b/driver/subprocs.c index fb621cde..2a8f163e 100644 --- a/driver/subprocs.c +++ b/driver/subprocs.c @@ -1,5 +1,5 @@ /* subprocs.c --- choosing, spawning, and killing screenhacks. - * xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski + * xscreensaver, Copyright (c) 1991-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -484,6 +484,7 @@ static RETSIGTYPE sigchld_handler (int sig) { saver_info *si = global_si_kludge; /* I hate C so much... */ + in_signal_handler_p++; if (si->prefs.debug_p) { @@ -510,6 +511,7 @@ sigchld_handler (int sig) } init_sigchld(); + in_signal_handler_p--; } #endif /* SIGCHLD */ diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index 95f6b2b1..ed5bf303 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1991-2011 Jamie Zawinski +/* xscreensaver, Copyright (c) 1991-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -299,14 +299,28 @@ xscreensaver %s, copyright (c) 1991-2008 by Jamie Zawinski \n\ } +Bool in_signal_handler_p = 0; /* I hate C so much... */ + char * timestring (void) { - time_t now = time ((time_t *) 0); - char *str = (char *) ctime (&now); - char *nl = (char *) strchr (str, '\n'); - if (nl) *nl = 0; /* take off that dang newline */ - return str; + if (in_signal_handler_p) + { + /* Turns out that ctime() and even localtime_r() call malloc() on Linux! + So we can't call them from inside SIGCHLD. WTF. + */ + static char buf[30]; + strcpy (buf, "... ... .. signal ...."); + return buf; + } + else + { + time_t now = time ((time_t *) 0); + char *str = (char *) ctime (&now); + char *nl = (char *) strchr (str, '\n'); + if (nl) *nl = 0; /* take off that dang newline */ + return str; + } } static Bool blurb_timestamp_p = True; /* kludge */ diff --git a/driver/xscreensaver.h b/driver/xscreensaver.h index 26d9fcd3..98aa4450 100644 --- a/driver/xscreensaver.h +++ b/driver/xscreensaver.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1993-2011 Jamie Zawinski +/* xscreensaver, Copyright (c) 1993-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -189,6 +189,7 @@ extern void restart_process (saver_info *si); extern int saver_ehandler (Display *dpy, XErrorEvent *error); extern int BadWindow_ehandler (Display *dpy, XErrorEvent *error); extern Bool window_exists_p (Display *dpy, Window window); +extern Bool in_signal_handler_p; extern char *timestring (void); extern Bool display_is_on_console_p (saver_info *si); extern Visual *get_best_gl_visual (saver_info *si, Screen *screen); diff --git a/hacks/Makefile.in b/hacks/Makefile.in index 0d6c8000..da0c9c46 100644 --- a/hacks/Makefile.in +++ b/hacks/Makefile.in @@ -1078,6 +1078,7 @@ apple2.o: $(UTILS_SRC)/visual.h apple2.o: $(UTILS_SRC)/xshm.h apple2.o: $(UTILS_SRC)/yarandom.h asm6502.o: $(srcdir)/asm6502.h +asm6502.o: $(UTILS_SRC)/yarandom.h attraction.o: ../config.h attraction.o: $(srcdir)/fps.h attraction.o: $(srcdir)/screenhackI.h diff --git a/hacks/abstractile.c b/hacks/abstractile.c index 9d7e968c..647b7aab 100644 --- a/hacks/abstractile.c +++ b/hacks/abstractile.c @@ -64,8 +64,6 @@ #define WAVES 6 #define STRETCHES 8 -const double PI = 3.1415926535; - struct lineStruct { unsigned int x, y, len, obj, color, ndol; int deo; @@ -171,10 +169,10 @@ _wave(struct state *st, int x, int h, int l, int wave) l+=1; switch(wave) { case 0: /* cos wave*/ - return((int)(cos((double)x*PI/l)*h)); + return((int)(cos((double)x*M_PI/l)*h)); case 1: /* double wave*/ case 2: /* double wave*/ - return((int)(cos((double)x*PI/l)*h)+(int)(sin((double)x*PI/l/st->cs1[1])*h)); + return((int)(cos((double)x*M_PI/l)*h)+(int)(sin((double)x*M_PI/l/st->cs1[1])*h)); case 3: /* zig zag */ return(abs((x%(l*2)-l))*h/l); case 4: /* giant zig zag */ @@ -774,10 +772,10 @@ _pattern(struct state *st, int x, int y, int n) x+=_wave(st,st->gridy-y,st->gridy/(1+st->cs1[n]),st->gridy,0); break; case 4: /* U curves */ - x+=_wave(st,y,st->cs1[n]*st->csw[n]/2,st->gridy*2/PI,0); + x+=_wave(st,y,st->cs1[n]*st->csw[n]/2,st->gridy*2/M_PI,0); break; case 5: - x-=_wave(st,y,st->cs1[n]*st->csw[n]/2,st->gridy*2/PI,0); + x-=_wave(st,y,st->cs1[n]*st->csw[n]/2,st->gridy*2/M_PI,0); break; } switch(st->wsy[0]) { @@ -794,10 +792,10 @@ _pattern(struct state *st, int x, int y, int n) y+=_wave(st,st->gridx-ox,st->gridx/(1+st->cs1[n]),st->gridx,0); break; case 4: /* U curves */ - y+=_wave(st,ox,st->cs1[n]*st->csw[n]/2,st->gridy*2/PI,0); + y+=_wave(st,ox,st->cs1[n]*st->csw[n]/2,st->gridy*2/M_PI,0); break; case 5: - y-=_wave(st,ox,st->cs1[n]*st->csw[n]/2,st->gridy*2/PI,0); + y-=_wave(st,ox,st->cs1[n]*st->csw[n]/2,st->gridy*2/M_PI,0); break; } switch(st->pattern[n]) { diff --git a/hacks/anemone.c b/hacks/anemone.c index 0cf342ea..f69e0967 100644 --- a/hacks/anemone.c +++ b/hacks/anemone.c @@ -380,11 +380,20 @@ static void anemone_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { - /* need to re-make pixmaps too... struct state *st = (struct state *) closure; st->scrWidth = w; st->scrHeight = h; - */ +#if 0 + if (st->dbuf) { + XWindowAttributes wa; + XGetWindowAttributes(dpy, window, &wa); + if (st->ba) XFreePixmap (dpy, st->ba); + if (st->bb) XFreePixmap (dpy, st->bb); + st->ba = XCreatePixmap (dpy, window, st->scrWidth, st->scrHeight, wa.depth); + st->bb = XCreatePixmap (dpy, window, st->scrWidth, st->scrHeight, wa.depth); + st->b = st->ba; + } +#endif } static Bool diff --git a/hacks/apollonian.c b/hacks/apollonian.c index ab34e04a..be2e6ab4 100644 --- a/hacks/apollonian.c +++ b/hacks/apollonian.c @@ -74,7 +74,6 @@ static const char sccsid[] = "@(#)apollonian.c 5.02 2001/07/01 xlockmore"; "*fpsSolid: true \n" \ # define refresh_apollonian 0 -# define reshape_apollonian 0 # define apollonian_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" @@ -822,6 +821,13 @@ draw_apollonian (ModeInfo * mi) } } +ENTRYPOINT void +reshape_apollonian(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_apollonian (mi); +} + ENTRYPOINT void release_apollonian (ModeInfo * mi) { diff --git a/hacks/apple2-main.c b/hacks/apple2-main.c index facde4c0..0e1508ff 100644 --- a/hacks/apple2-main.c +++ b/hacks/apple2-main.c @@ -915,6 +915,9 @@ a2_vt100_printc (apple2_sim_t *sim, struct terminal_controller_data *state, } break; case 10: /* LF */ +# ifndef HAVE_FORKPTY + state->cursor_x = 0; /* No ptys on iPhone; assume CRLF. */ +# endif case 11: /* VT */ case 12: /* FF */ if (state->cursor_y < rows - 1) diff --git a/hacks/asm6502.c b/hacks/asm6502.c index 3a8fe1a8..c3aa2a34 100644 --- a/hacks/asm6502.c +++ b/hacks/asm6502.c @@ -34,10 +34,15 @@ #include #include +#include "yarandom.h" #include "asm6502.h" -#ifdef DEBUGGER +/*#ifdef DEBUGGER # define random rand +#endif*/ + +#ifndef USE_IPHONE +# define READ_FILES #endif typedef enum{ @@ -68,7 +73,7 @@ typedef BOOL (*CharTest) (char); /*typedef void (*JumpFunc) (machine_6502* AddrMode);*/ typedef struct { - AddrMode type; + m6502_AddrMode type; Bit32 value[MAX_PARAM_VALUE]; unsigned int vp; /*value pointer, index into the value table.*/ char *label; @@ -259,7 +264,7 @@ static Bit8 nibble(Bit8 value, Side side){ /* used for tracing. XXX: combined with function getvalue */ -static BOOL peekValue(machine_6502 *machine, AddrMode adm, Pointer *pointer, Bit16 PC){ +static BOOL peekValue(machine_6502 *machine, m6502_AddrMode adm, Pointer *pointer, Bit16 PC){ Bit8 zp; pointer->value = 0; pointer->addr = 0; @@ -324,7 +329,7 @@ static BOOL peekValue(machine_6502 *machine, AddrMode adm, Pointer *pointer, Bit /* Figure out how to get the value from the addrmode and get it.*/ -static BOOL getValue(machine_6502 *machine, AddrMode adm, Pointer *pointer){ +static BOOL getValue(machine_6502 *machine, m6502_AddrMode adm, Pointer *pointer){ Bit8 zp; pointer->value = 0; pointer->addr = 0; @@ -385,7 +390,8 @@ static BOOL getValue(machine_6502 *machine, AddrMode adm, Pointer *pointer){ } -static void dismem(machine_6502 *machine, AddrMode adm, char *output){ +#if 0 +static void dismem(machine_6502 *machine, m6502_AddrMode adm, char *output){ Bit8 zp; Bit16 n; switch(adm){ @@ -442,6 +448,7 @@ static void dismem(machine_6502 *machine, AddrMode adm, char *output){ break; } } +#endif /* manZeroNeg - Manage the negative and zero flags */ static void manZeroNeg(machine_6502 *machine, Bit8 value){ @@ -455,7 +462,7 @@ static void warnValue(BOOL isValue){ } } -static void jmpADC(machine_6502 *machine, AddrMode adm){ +static void jmpADC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; Bit16 tmp; Bit8 c = bitOn(machine->regP, CARRY_FL); @@ -506,7 +513,7 @@ static void jmpADC(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine,machine->regA); } -static void jmpAND(machine_6502 *machine, AddrMode adm){ +static void jmpAND(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -514,7 +521,7 @@ static void jmpAND(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine,machine->regA); } -static void jmpASL(machine_6502 *machine, AddrMode adm){ +static void jmpASL(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); if (isValue){ @@ -533,7 +540,7 @@ static void jmpASL(machine_6502 *machine, AddrMode adm){ } -static void jmpBIT(machine_6502 *machine, AddrMode adm){ +static void jmpBIT(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -550,7 +557,7 @@ static void jumpBranch(machine_6502 *machine, Bit16 offset){ machine->regPC = machine->regPC + offset; } -static void jmpBPL(machine_6502 *machine, AddrMode adm){ +static void jmpBPL(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -559,7 +566,7 @@ static void jmpBPL(machine_6502 *machine, AddrMode adm){ } -static void jmpBMI(machine_6502 *machine, AddrMode adm){ +static void jmpBMI(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -568,7 +575,7 @@ static void jmpBMI(machine_6502 *machine, AddrMode adm){ } -static void jmpBVC(machine_6502 *machine, AddrMode adm){ +static void jmpBVC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -576,7 +583,7 @@ static void jmpBVC(machine_6502 *machine, AddrMode adm){ jumpBranch(machine, ptr.addr); } -static void jmpBVS(machine_6502 *machine, AddrMode adm){ +static void jmpBVS(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -584,7 +591,7 @@ static void jmpBVS(machine_6502 *machine, AddrMode adm){ jumpBranch(machine, ptr.addr); } -static void jmpBCC(machine_6502 *machine, AddrMode adm){ +static void jmpBCC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -592,7 +599,7 @@ static void jmpBCC(machine_6502 *machine, AddrMode adm){ jumpBranch(machine, ptr.addr); } -static void jmpBCS(machine_6502 *machine, AddrMode adm){ +static void jmpBCS(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -600,7 +607,7 @@ static void jmpBCS(machine_6502 *machine, AddrMode adm){ jumpBranch(machine, ptr.addr); } -static void jmpBNE(machine_6502 *machine, AddrMode adm){ +static void jmpBNE(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -608,7 +615,7 @@ static void jmpBNE(machine_6502 *machine, AddrMode adm){ jumpBranch(machine, ptr.addr); } -static void jmpBEQ(machine_6502 *machine, AddrMode adm){ +static void jmpBEQ(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -621,28 +628,28 @@ static void doCompare(machine_6502 *machine, Bit16 reg, Pointer *ptr){ manZeroNeg(machine,(reg - ptr->value)); } -static void jmpCMP(machine_6502 *machine, AddrMode adm){ +static void jmpCMP(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); doCompare(machine,machine->regA,&ptr); } -static void jmpCPX(machine_6502 *machine, AddrMode adm){ +static void jmpCPX(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); doCompare(machine,machine->regX,&ptr); } -static void jmpCPY(machine_6502 *machine, AddrMode adm){ +static void jmpCPY(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); doCompare(machine,machine->regY,&ptr); } -static void jmpDEC(machine_6502 *machine, AddrMode adm){ +static void jmpDEC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -654,7 +661,7 @@ static void jmpDEC(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine,ptr.value); } -static void jmpEOR(machine_6502 *machine, AddrMode adm){ +static void jmpEOR(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -662,35 +669,35 @@ static void jmpEOR(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine, machine->regA); } -static void jmpCLC(machine_6502 *machine, AddrMode adm){ +static void jmpCLC(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, CARRY_FL, 0); } -static void jmpSEC(machine_6502 *machine, AddrMode adm){ +static void jmpSEC(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, CARRY_FL, 1); } -static void jmpCLI(machine_6502 *machine, AddrMode adm){ +static void jmpCLI(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, INTERRUPT_FL, 0); } -static void jmpSEI(machine_6502 *machine, AddrMode adm){ +static void jmpSEI(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, INTERRUPT_FL, 1); } -static void jmpCLV(machine_6502 *machine, AddrMode adm){ +static void jmpCLV(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); } -static void jmpCLD(machine_6502 *machine, AddrMode adm){ +static void jmpCLD(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, DECIMAL_FL, 0); } -static void jmpSED(machine_6502 *machine, AddrMode adm){ +static void jmpSED(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, DECIMAL_FL, 1); } -static void jmpINC(machine_6502 *machine, AddrMode adm){ +static void jmpINC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -699,14 +706,14 @@ static void jmpINC(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine,ptr.value); } -static void jmpJMP(machine_6502 *machine, AddrMode adm){ +static void jmpJMP(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regPC = ptr.addr; } -static void jmpJSR(machine_6502 *machine, AddrMode adm){ +static void jmpJSR(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; /* Move past the 2 byte parameter. JSR is always followed by absolute address. */ @@ -718,7 +725,7 @@ static void jmpJSR(machine_6502 *machine, AddrMode adm){ machine->regPC = ptr.addr; } -static void jmpLDA(machine_6502 *machine, AddrMode adm){ +static void jmpLDA(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -726,7 +733,7 @@ static void jmpLDA(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine, machine->regA); } -static void jmpLDX(machine_6502 *machine, AddrMode adm){ +static void jmpLDX(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -734,7 +741,7 @@ static void jmpLDX(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine, machine->regX); } -static void jmpLDY(machine_6502 *machine, AddrMode adm){ +static void jmpLDY(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -742,7 +749,7 @@ static void jmpLDY(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine, machine->regY); } -static void jmpLSR(machine_6502 *machine, AddrMode adm){ +static void jmpLSR(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); if (isValue){ @@ -764,11 +771,11 @@ static void jmpLSR(machine_6502 *machine, AddrMode adm){ } } -static void jmpNOP(machine_6502 *machine, AddrMode adm){ +static void jmpNOP(machine_6502 *machine, m6502_AddrMode adm){ /* no operation */ } -static void jmpORA(machine_6502 *machine, AddrMode adm){ +static void jmpORA(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -776,17 +783,17 @@ static void jmpORA(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine,machine->regA); } -static void jmpTAX(machine_6502 *machine, AddrMode adm){ +static void jmpTAX(machine_6502 *machine, m6502_AddrMode adm){ machine->regX = machine->regA; manZeroNeg(machine,machine->regX); } -static void jmpTXA(machine_6502 *machine, AddrMode adm){ +static void jmpTXA(machine_6502 *machine, m6502_AddrMode adm){ machine->regA = machine->regX; manZeroNeg(machine,machine->regA); } -static void jmpDEX(machine_6502 *machine, AddrMode adm){ +static void jmpDEX(machine_6502 *machine, m6502_AddrMode adm){ if (machine->regX > 0) machine->regX--; else @@ -794,23 +801,23 @@ static void jmpDEX(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine, machine->regX); } -static void jmpINX(machine_6502 *machine, AddrMode adm){ +static void jmpINX(machine_6502 *machine, m6502_AddrMode adm){ Bit16 value = machine->regX + 1; machine->regX = value & 0xFF; manZeroNeg(machine, machine->regX); } -static void jmpTAY(machine_6502 *machine, AddrMode adm){ +static void jmpTAY(machine_6502 *machine, m6502_AddrMode adm){ machine->regY = machine->regA; manZeroNeg(machine, machine->regY); } -static void jmpTYA(machine_6502 *machine, AddrMode adm){ +static void jmpTYA(machine_6502 *machine, m6502_AddrMode adm){ machine->regA = machine->regY; manZeroNeg(machine, machine->regA); } -static void jmpDEY(machine_6502 *machine, AddrMode adm){ +static void jmpDEY(machine_6502 *machine, m6502_AddrMode adm){ if (machine->regY > 0) machine->regY--; else @@ -818,13 +825,13 @@ static void jmpDEY(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine, machine->regY); } -static void jmpINY(machine_6502 *machine, AddrMode adm){ +static void jmpINY(machine_6502 *machine, m6502_AddrMode adm){ Bit16 value = machine->regY + 1; machine->regY = value & 0xff; manZeroNeg(machine, machine->regY); } -static void jmpROR(machine_6502 *machine, AddrMode adm){ +static void jmpROR(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; Bit8 cf; BOOL isValue = getValue(machine, adm, &ptr); @@ -849,7 +856,7 @@ static void jmpROR(machine_6502 *machine, AddrMode adm){ } } -static void jmpROL(machine_6502 *machine, AddrMode adm){ +static void jmpROL(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; Bit8 cf; BOOL isValue = getValue(machine, adm, &ptr); @@ -874,12 +881,12 @@ static void jmpROL(machine_6502 *machine, AddrMode adm){ } } -static void jmpRTI(machine_6502 *machine, AddrMode adm){ +static void jmpRTI(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = stackPop(machine); machine->regPC = stackPop(machine); } -static void jmpRTS(machine_6502 *machine, AddrMode adm){ +static void jmpRTS(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); Bit16 nr = stackPop(machine); @@ -888,7 +895,7 @@ static void jmpRTS(machine_6502 *machine, AddrMode adm){ machine->regPC = (nl << 8) | nr; } -static void jmpSBC(machine_6502 *machine, AddrMode adm){ +static void jmpSBC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; /*Bit8 vflag;*/ Bit8 c = bitOn(machine->regP, CARRY_FL); @@ -944,48 +951,48 @@ static void jmpSBC(machine_6502 *machine, AddrMode adm){ manZeroNeg(machine,machine->regA); } -static void jmpSTA(machine_6502 *machine, AddrMode adm){ +static void jmpSTA(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); memStoreByte(machine,ptr.addr,machine->regA); } -static void jmpTXS(machine_6502 *machine, AddrMode adm){ +static void jmpTXS(machine_6502 *machine, m6502_AddrMode adm){ stackPush(machine,machine->regX); } -static void jmpTSX(machine_6502 *machine, AddrMode adm){ +static void jmpTSX(machine_6502 *machine, m6502_AddrMode adm){ machine->regX = stackPop(machine); manZeroNeg(machine, machine->regX); } -static void jmpPHA(machine_6502 *machine, AddrMode adm){ +static void jmpPHA(machine_6502 *machine, m6502_AddrMode adm){ stackPush(machine, machine->regA); } -static void jmpPLA(machine_6502 *machine, AddrMode adm){ +static void jmpPLA(machine_6502 *machine, m6502_AddrMode adm){ machine->regA = stackPop(machine); manZeroNeg(machine, machine->regA); } -static void jmpPHP(machine_6502 *machine, AddrMode adm){ +static void jmpPHP(machine_6502 *machine, m6502_AddrMode adm){ stackPush(machine,machine->regP); } -static void jmpPLP(machine_6502 *machine, AddrMode adm){ +static void jmpPLP(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = stackPop(machine); machine->regP = setBit(machine->regP, FUTURE_FL, 1); } -static void jmpSTX(machine_6502 *machine, AddrMode adm){ +static void jmpSTX(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); memStoreByte(machine,ptr.addr,machine->regX); } -static void jmpSTY(machine_6502 *machine, AddrMode adm){ +static void jmpSTY(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); @@ -995,7 +1002,7 @@ static void jmpSTY(machine_6502 *machine, AddrMode adm){ /* OPCODES */ -static void assignOpCodes(Opcodes *opcodes){ +static void assignOpCodes(m6502_Opcodes *opcodes){ #define SETOP(num, _name, _Imm, _ZP, _ZPX, _ZPY, _ABS, _ABSX, _ABSY, _INDX, _INDY, _SNGL, _BRA, _func) \ {opcodes[num].name[3] = '\0'; \ @@ -1117,7 +1124,7 @@ static void buildIndexCache(machine_6502 *machine){ /* opIndex() - Search the opcode table for a match. If found return the index into the optable and the address mode of the opcode. If the opcode is not found then return -1. */ -static int opIndex(machine_6502 *machine, Bit8 opcode, AddrMode *adm){ +static int opIndex(machine_6502 *machine, Bit8 opcode, m6502_AddrMode *adm){ /* XXX could catch errors by setting a addressmode of error or something */ *adm = machine->opcache[opcode].adm; return machine->opcache[opcode].index; @@ -1663,6 +1670,7 @@ static AsmLine *parseAssembly(machine_6502 *machine, BOOL *codeOk, const char *c return listp; } +#ifdef READ_FILES /* fileToBuffer() - Allocates a buffer and loads all of the file into memory. */ static char *fileToBuffer(const char *filename){ const int defaultSize = 1024; @@ -1695,6 +1703,7 @@ static char *fileToBuffer(const char *filename){ buffer[i+1] = '\0'; return buffer; } +#endif /* Routines */ @@ -1724,7 +1733,7 @@ static void reset(machine_6502 *machine){ } /* hexDump() - Dump the memory to output */ -void hexDump(machine_6502 *machine, Bit16 start, Bit16 numbytes, FILE *output){ +void m6502_hexDump(machine_6502 *machine, Bit16 start, Bit16 numbytes, FILE *output){ Bit32 address; Bit32 i; for( i = 0; i < numbytes; i++){ @@ -1756,7 +1765,7 @@ void hexDump(machine_6502 *machine, Bit16 start, Bit16 numbytes, FILE *output){ /* fclose(ofp); */ /* } */ -static BOOL translate(Opcodes *op,Param *param, machine_6502 *machine){ +static BOOL translate(m6502_Opcodes *op,Param *param, machine_6502 *machine){ switch(param->type){ case SINGLE: if (op->SNGL) @@ -1940,7 +1949,7 @@ static BOOL compileLine(AsmLine *asmline, void *args){ else{ int i; char *command = asmline->command; - Opcodes op; + m6502_Opcodes op; for(i = 0; i < NUM_OPCODES; i++){ if (strcmp(machine->opcodes[i].name, command) == 0){ op = machine->opcodes[i]; @@ -2069,7 +2078,7 @@ static BOOL compileCode(machine_6502 *machine, const char *code){ static void execute(machine_6502 *machine){ Bit8 opcode; - AddrMode adm; + m6502_AddrMode adm; int opidx; if(!machine->codeRunning) return; @@ -2090,7 +2099,7 @@ static void execute(machine_6502 *machine){ } } -machine_6502 *build6502(){ +machine_6502 *m6502_build(void){ machine_6502 *machine; machine = ecalloc(1, sizeof(machine_6502)); assignOpCodes(machine->opcodes); @@ -2099,14 +2108,14 @@ machine_6502 *build6502(){ return machine; } -void destroy6502(machine_6502 *machine){ +void m6502_destroy6502(machine_6502 *machine){ free(machine); machine = NULL; } -void trace(machine_6502 *machine, FILE *output){ +void m6502_trace(machine_6502 *machine, FILE *output){ Bit8 opcode = memReadByte(machine,machine->regPC); - AddrMode adm; + m6502_AddrMode adm; Pointer ptr; int opidx = opIndex(machine,opcode,&adm); int stacksz = STACK_TOP - machine->regSP; @@ -2132,15 +2141,16 @@ void trace(machine_6502 *machine, FILE *output){ fprintf(output,"\n"); } fprintf(output,"STACK:"); - hexDump(machine,(STACK_TOP - stacksz) + 1, stacksz, output); + m6502_hexDump(machine,(STACK_TOP - stacksz) + 1, stacksz, output); } +#if 0 void disassemble(machine_6502 *machine, FILE *output){ /* Read the opcode increment the program counter print the opcode loop until end of program. */ - AddrMode adm; + m6502_AddrMode adm; Bit16 addr; Bit8 opcode; int opidx; @@ -2161,9 +2171,11 @@ void disassemble(machine_6502 *machine, FILE *output){ free(mem); machine->regPC = opc; } +#endif -void eval_file(machine_6502 *machine, const char *filename, Plotter plot, void *plotterState){ +#ifdef READ_FILES +void m6502_eval_file(machine_6502 *machine, const char *filename, m6502_Plotter plot, void *plotterState){ char *code = NULL; machine->plot = plot; @@ -2186,7 +2198,7 @@ void eval_file(machine_6502 *machine, const char *filename, Plotter plot, void * }while(machine->codeRunning); } -void start_eval_file(machine_6502 *machine, const char *filename, Plotter plot, void *plotterState){ +void m6502_start_eval_file(machine_6502 *machine, const char *filename, m6502_Plotter plot, void *plotterState){ char *code = NULL; reset(machine); @@ -2203,9 +2215,10 @@ void start_eval_file(machine_6502 *machine, const char *filename, Plotter plot, machine->codeRunning = TRUE; execute(machine); } +#endif /* READ_FILES */ -void start_eval_string(machine_6502 *machine, const char *code, - Plotter plot, void *plotterState){ +void m6502_start_eval_string(machine_6502 *machine, const char *code, + m6502_Plotter plot, void *plotterState){ reset(machine); machine->plot = plot; @@ -2239,7 +2252,7 @@ void start_eval_string(machine_6502 *machine, const char *code, /* execute(machine); */ /* } */ -void next_eval(machine_6502 *machine, int insno){ +void m6502_next_eval(machine_6502 *machine, int insno){ int i = 0; for (i = 1; i < insno; i++){ if (machine->codeRunning){ diff --git a/hacks/asm6502.h b/hacks/asm6502.h index 6f64d218..79b13a2b 100644 --- a/hacks/asm6502.h +++ b/hacks/asm6502.h @@ -56,7 +56,7 @@ typedef enum{ ZERO, ZERO_X, ZERO_Y, ABS_VALUE, ABS_OR_BRANCH, ABS_X, ABS_Y, ABS_LABEL_X, ABS_LABEL_Y, DCB_PARAM -} AddrMode; +} m6502_AddrMode; typedef struct machine_6502 machine_6502; @@ -73,14 +73,14 @@ typedef struct { Bit8 INDY; Bit8 SNGL; Bit8 BRA; - void (*func) (machine_6502*, AddrMode); -} Opcodes; + void (*func) (machine_6502*, m6502_AddrMode); +} m6502_Opcodes; /* Used to cache the index of each opcode */ typedef struct { Bit8 index; - AddrMode adm; -} OpcodeIndex; + m6502_AddrMode adm; +} m6502_OpcodeIndex; /* Plotter is a function that will be called everytime a pixel needs to be updated. The first two parameter are the x and y @@ -108,7 +108,7 @@ typedef struct { parameter. You can use this parameter to store state information. */ -typedef void (*Plotter) (Bit8, Bit8, Bit8, void*); +typedef void (*m6502_Plotter) (Bit8, Bit8, Bit8, void*); struct machine_6502 { BOOL codeCompiledOK; @@ -124,54 +124,54 @@ struct machine_6502 { int labelPtr; BOOL codeRunning; int myInterval; - Opcodes opcodes[NUM_OPCODES]; + m6502_Opcodes opcodes[NUM_OPCODES]; int screen[32][32]; int codeLen; - OpcodeIndex opcache[0xff]; - Plotter plot; + m6502_OpcodeIndex opcache[0xff]; + m6502_Plotter plot; void *plotterState; }; /* build6502() - Creates an instance of the 6502 machine */ -machine_6502 *build6502(void); +machine_6502 *m6502_build(void); /* destroy6502() - compile the file and exectue it until the program is finished */ -void destroy6502(machine_6502 *machine); +void m6502_destroy6502(machine_6502 *machine); /* eval_file() - Compiles and runs a file until the program is finished */ -void eval_file(machine_6502 *machine, const char *filename, - Plotter plot, void *plotterState); +void m6502_eval_file(machine_6502 *machine, const char *filename, + m6502_Plotter plot, void *plotterState); /* start_eval_file() - Compile the file and execute the first instruction */ -void start_eval_file(machine_6502 *machine, const char *filename, - Plotter plot, void *plotterState); +void m6502_start_eval_file(machine_6502 *machine, const char *filename, + m6502_Plotter plot, void *plotterState); /* XXX -void start_eval_binary(machine_6502 *machine, Bit8 *program, +void m6502_start_eval_binary(machine_6502 *machine, Bit8 *program, unsigned int proglen, Plotter plot, void *plotterState); */ -void start_eval_string(machine_6502 *machine, const char *code, - Plotter plot, void *plotterState); +void m6502_start_eval_string(machine_6502 *machine, const char *code, + m6502_Plotter plot, void *plotterState); /* next_eval() - Execute the next insno of machine instructions */ -void next_eval(machine_6502 *machine, int insno); +void m6502_next_eval(machine_6502 *machine, int insno); /* hexDump() - Dumps memory to output */ -void hexDump(machine_6502 *machine, Bit16 start, +void m6502_hexDump(machine_6502 *machine, Bit16 start, Bit16 numbytes, FILE *output); /* Disassemble() - Prints the assembly code for the program currently loaded in memory.*/ -void disassemble(machine_6502 *machine, FILE *output); +void m6502_disassemble(machine_6502 *machine, FILE *output); /* trace() - Prints to output the current value of registers, the current nmemonic, memory address and value. */ -void trace(machine_6502 *machine, FILE *output); +void m6502_trace(machine_6502 *machine, FILE *output); /* save_program() - Writes a binary file of the program loaded in memory. */ diff --git a/hacks/barcode.c b/hacks/barcode.c index 7e15d0d4..d6592163 100644 --- a/hacks/barcode.c +++ b/hacks/barcode.c @@ -1898,6 +1898,9 @@ static void barcode_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->windowWidth = w; + st->windowHeight = h; } static void diff --git a/hacks/bouboule.c b/hacks/bouboule.c index 15bf2278..081ba485 100644 --- a/hacks/bouboule.c +++ b/hacks/bouboule.c @@ -87,7 +87,6 @@ static const char sccsid[] = "@(#)bouboule.c 4.00 97/01/01 xlockmore"; "*fpsSolid: true \n" # define SMOOTH_COLORS -# define reshape_bouboule 0 # define bouboule_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -838,6 +837,24 @@ release_bouboule(ModeInfo * mi) } } +ENTRYPOINT void +reshape_bouboule(ModeInfo * mi, int width, int height) +{ + StarField *sp = &starfield[MI_SCREEN(mi)]; + sp->width = width; + sp->height = height; + sininit(&sp->x, + sp->x.alpha, sp->x.step, + ((double) sp->width) / 4.0, + 3.0 * ((double) sp->width) / 4.0, + POSCANRAND); + sininit(&sp->y, + sp->y.alpha, sp->y.step, + ((double) sp->height) / 4.0, + 3.0 * ((double) sp->height) / 4.0, + POSCANRAND); +} + ENTRYPOINT void refresh_bouboule(ModeInfo * mi) { diff --git a/hacks/braid.c b/hacks/braid.c index 20eeed8a..9ba52c14 100644 --- a/hacks/braid.c +++ b/hacks/braid.c @@ -40,7 +40,6 @@ static const char sccsid[] = "@(#)braid.c 5.00 2000/11/01 xlockmore"; "*fpsSolid: true \n" \ # define UNIFORM_COLORS -# define reshape_braid 0 # define braid_handle_event 0 # include "xlockmore.h" # include "erase.h" @@ -447,6 +446,13 @@ draw_braid(ModeInfo * mi) } } +ENTRYPOINT void +reshape_braid(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_braid (mi); +} + ENTRYPOINT void release_braid(ModeInfo * mi) { diff --git a/hacks/bsod.c b/hacks/bsod.c index 5bfc225b..ce2e4969 100644 --- a/hacks/bsod.c +++ b/hacks/bsod.c @@ -2452,7 +2452,7 @@ hppa_linux (Display *dpy, Window window) { -1, "Soft power switch enabled, polling @ 0xf0400804.\n" }, { -1, "pty: 256 Unix98 ptys configured\n" }, { -1, "Generic RTC Driver v1.07\n" }, - { -1, "Serial: 8250/16550 driver $Revision: 1.96 $ 13 ports, " + { -1, "Serial: 8250/16550 driver $Revision: 1.97 $ 13 ports, " "IRQ sharing disabled\n" }, { -1, "ttyS0 at I/O 0x3f8 (irq = 0) is a 16550A\n" }, { -1, "ttyS1 at I/O 0x2f8 (irq = 0) is a 16550A\n" }, @@ -3922,6 +3922,8 @@ bsod_event (Display *dpy, Window window, void *closure, XEvent *event) /* pick a new mode and restart when mouse clicked, or certain keys typed. */ if (event->type == ButtonPress) + return True; + else if (event->type == ButtonRelease) reset_p = True; else if (event->type == KeyPress) { diff --git a/hacks/ccurve.c b/hacks/ccurve.c index 9e7e2de3..6f547bea 100644 --- a/hacks/ccurve.c +++ b/hacks/ccurve.c @@ -813,6 +813,14 @@ static void ccurve_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + XWindowAttributes xgwa; + st->width = w; + st->height = h; + XGetWindowAttributes (st->dpy, st->window, &xgwa); + XFreePixmap (dpy, st->pixmap); + st->pixmap = XCreatePixmap (st->dpy, st->window, st->width, st->height, + xgwa.depth); } static Bool diff --git a/hacks/check-configs.pl b/hacks/check-configs.pl index 231d8f7b..165af089 100755 --- a/hacks/check-configs.pl +++ b/hacks/check-configs.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2008-2011 Jamie Zawinski +# Copyright © 2008-2012 Jamie Zawinski # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -19,7 +19,7 @@ use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my $version = q{ $Revision: 1.4 $ }; $version =~ s/^[^\d]+([\d.]+).*/$1/; +my $version = q{ $Revision: 1.5 $ }; $version =~ s/^[^\d]+([\d.]+).*/$1/; my $verbose = 0; @@ -32,6 +32,12 @@ $xlockmore_default_opts .= "{\"-wireframe\", \".wireframe\", XrmoptionNoArg, \"true\"},\n" . "{\"-3d\", \".use3d\", XrmoptionNoArg, \"true\"},\n"; +my $analogtv_default_opts = ''; +foreach (qw(color tint brightness contrast)) { + $analogtv_default_opts .= "{\"-tv-$_\", \".TV$_\", XrmoptionSepArg, 0},\n"; +} + + # Returns two tables: # - A table of the default resource values. @@ -56,12 +62,13 @@ sub parse_src($) { close IN; $file =~ s@^.*/@@; + my $xlockmore_p = 0; + my $analogtv_p = ($body =~ m/ANALOGTV_DEFAULTS/); + $body =~ s@/\*.*?\*/@@gs; $body =~ s@^#\s*(if|ifdef|ifndef|elif|else|endif).*$@@gm; $body =~ s/ANALOGTV_(DEFAULTS|OPTIONS)//gs; - my $xlockmore_p = 0; - print STDERR "$progname: $file: defaults:\n" if ($verbose > 2); my %res_to_val; if ($body =~ m/_defaults\s*\[\]\s*=\s*{(.*?)}\s*;/s) { @@ -116,9 +123,11 @@ sub parse_src($) { $switch_to_res{-fps} = 'doFPS: true'; my ($ign, $opts) = ($body =~ m/(_options|\bopts)\s*\[\]\s*=\s*{(.*?)}\s*;/s); - if ($xlockmore_p || $opts) { + if ($xlockmore_p || $analogtv_p || $opts) { $opts = '' unless $opts; $opts .= ",\n$xlockmore_default_opts" if ($xlockmore_p); + $opts .= ",\n$analogtv_default_opts" if ($analogtv_p); + foreach (split (/,\s*\n/, $opts)) { s/^\s*//s; s/\s*$//s; @@ -277,7 +286,10 @@ sub check_config($) { error ("$saver: unparsable xml claim: $_") unless $compare; my $sval = $src_opts->{$res}; - if (!defined($sval)) { + if ($res =~ m/^TV/) { + print STDERR "$progname: $saver: OK: skipping \"$res\"\n" + if ($verbose > 1); + } elsif (!defined($sval)) { print STDERR "$progname: $saver: $res: not in source\n"; } elsif ($compare eq '!=' ? $sval eq $xval diff --git a/hacks/compass.c b/hacks/compass.c index 5b9ba499..415e7c0a 100644 --- a/hacks/compass.c +++ b/hacks/compass.c @@ -933,6 +933,11 @@ static void compass_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + XGetWindowAttributes (st->dpy, st->window, &st->xgwa); + st->size2 = MIN(st->xgwa.width, st->xgwa.height); + st->x = st->xgwa.width/2; + st->y = st->xgwa.height/2; } static Bool diff --git a/hacks/config/README b/hacks/config/README index 393addef..d1a1815a 100644 --- a/hacks/config/README +++ b/hacks/config/README @@ -4,8 +4,8 @@ a screen saver and locker for the X window system by Jamie Zawinski - version 5.17 - 22-Jun-2012 + version 5.18 + 03-Jul-2012 http://www.jwz.org/xscreensaver/ diff --git a/hacks/config/antspotlight.xml b/hacks/config/antspotlight.xml index 409fa39b..368d24a1 100644 --- a/hacks/config/antspotlight.xml +++ b/hacks/config/antspotlight.xml @@ -14,8 +14,7 @@ <_description> -Draws an ant (with a headlight) who walks on top of an -image of your desktop or other image. +Draws an ant (with a headlight) who walks around on top of a loaded image. Written by Blair Tennessy; 2003. diff --git a/hacks/config/boxfit.xml b/hacks/config/boxfit.xml index 19a1340a..a7d35bf9 100644 --- a/hacks/config/boxfit.xml +++ b/hacks/config/boxfit.xml @@ -45,11 +45,10 @@ <_description> -Packs the screen with growing squares or circles, colored according to a -horizontal or vertical gradient, or according to the colors of the -desktop or a loaded image file. The objects grow until they touch, -then stop. When the screen is full, they shrink away and the process -restarts. +Packs the screen with growing squares or circles, colored according to +a horizontal or vertical gradient, or according to the colors of a +loaded image. The objects grow until they touch, then stop. When the +screen is full, they shrink away and the process restarts. Written by Jamie Zawinski; 2005. diff --git a/hacks/config/bumps.xml b/hacks/config/bumps.xml index dc0c0f62..5c49021c 100644 --- a/hacks/config/bumps.xml +++ b/hacks/config/bumps.xml @@ -25,8 +25,7 @@ <_description> -A spotlight roams across an embossed version of your desktop or -other picture. +A spotlight roams across an embossed version of a loaded image. Written by Shane Smit; 1999. diff --git a/hacks/config/dnalogo.xml b/hacks/config/dnalogo.xml index 3694be53..9942905e 100644 --- a/hacks/config/dnalogo.xml +++ b/hacks/config/dnalogo.xml @@ -1,6 +1,6 @@ - + diff --git a/hacks/config/flipscreen3d.xml b/hacks/config/flipscreen3d.xml index 4d5ec3d0..662f8ff2 100644 --- a/hacks/config/flipscreen3d.xml +++ b/hacks/config/flipscreen3d.xml @@ -16,7 +16,7 @@ <_description> -Grabs an image of the desktop and spins and deforms it in 3D. +Spins and deforms an image. Written by Ben Buxton and Jamie Zawinski; 2001. diff --git a/hacks/config/gleidescope.xml b/hacks/config/gleidescope.xml index f9a4de44..025fec88 100644 --- a/hacks/config/gleidescope.xml +++ b/hacks/config/gleidescope.xml @@ -28,7 +28,7 @@ <_description> -A kaleidoscope that operates on your desktop image, or other pictures. +A kaleidoscope that operates on a loaded image. http://en.wikipedia.org/wiki/Kaleidoscope diff --git a/hacks/config/jigsaw.xml b/hacks/config/jigsaw.xml index e74396c9..6e665499 100644 --- a/hacks/config/jigsaw.xml +++ b/hacks/config/jigsaw.xml @@ -22,7 +22,7 @@ + low="50" high="300" default="100"/> @@ -37,8 +37,7 @@ <_description> -This grabs a screen image, carves it up into a jigsaw puzzle, -shuffles it, and then solves the puzzle. +This carves an image up into a jigsaw puzzle, shuffles it, and solves it. http://en.wikipedia.org/wiki/Jigsaw_puzzle http://en.wikipedia.org/wiki/Tessellation diff --git a/hacks/config/pedal.xml b/hacks/config/pedal.xml index eae2c850..6f084720 100644 --- a/hacks/config/pedal.xml +++ b/hacks/config/pedal.xml @@ -21,6 +21,9 @@ <_description> A demonstration of the even-odd winding rule. +http://en.wikipedia.org/wiki/Even-odd_rule +http://en.wikipedia.org/wiki/Nonzero-rule + Written by Dale Moore; 1995. diff --git a/hacks/config/pipes.xml b/hacks/config/pipes.xml index 946eb1d7..2fa82e23 100644 --- a/hacks/config/pipes.xml +++ b/hacks/config/pipes.xml @@ -24,14 +24,18 @@

- +
+ +
+ +
<_description> A growing plumbing system, with bolts and valves. diff --git a/hacks/config/ripples.xml b/hacks/config/ripples.xml index 7ea18c7a..9d750f3d 100644 --- a/hacks/config/ripples.xml +++ b/hacks/config/ripples.xml @@ -43,8 +43,8 @@ <_description> -This draws rippling interference patterns like splashing water, -overlayed on the desktop or an image. +Rippling interference patterns reminiscent of splashing water +distort a loaded image. Written by Tom Hammersley; 1999. diff --git a/hacks/config/rotzoomer.xml b/hacks/config/rotzoomer.xml index 86696699..c2d5d8c5 100644 --- a/hacks/config/rotzoomer.xml +++ b/hacks/config/rotzoomer.xml @@ -30,7 +30,7 @@ <_description> -Creates a collage of rotated and scaled portions of the screen. +Distorts an image by rotating and scaling random sections of it. Written by Claudio Matsuoka; 2001. diff --git a/hacks/config/sonar.xml b/hacks/config/sonar.xml index 2c006c76..21fcc28f 100644 --- a/hacks/config/sonar.xml +++ b/hacks/config/sonar.xml @@ -16,6 +16,8 @@ low="0.1" high="8.0" default="1.0"/> @@ -67,7 +74,8 @@ milliseconds respectively. Alternately, it can run a simulation that doesn't involve hosts. -(If pinging doesn't work, you may need to make the executable be setuid.) +(If pinging doesn't work on Linux, you may need to make the executable +be setuid.) http://en.wikipedia.org/wiki/Ping#History diff --git a/hacks/config/spotlight.xml b/hacks/config/spotlight.xml index e77480bd..8c283a39 100644 --- a/hacks/config/spotlight.xml +++ b/hacks/config/spotlight.xml @@ -22,8 +22,8 @@ <_description> -Draws a spotlight scanning across a black screen, illuminating the -underlying desktop (or a picture) when it passes. +A spotlight scanning across a black screen, illuminating a loaded +image when it passes. Written by Rick Schultz and Jamie Zawinski; 1999. diff --git a/hacks/coral.c b/hacks/coral.c index 7b4e4820..62df14cd 100644 --- a/hacks/coral.c +++ b/hacks/coral.c @@ -261,6 +261,8 @@ static void coral_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + init_coral(st); } static Bool diff --git a/hacks/crystal.c b/hacks/crystal.c index 491577a2..a1c501d8 100644 --- a/hacks/crystal.c +++ b/hacks/crystal.c @@ -76,7 +76,6 @@ static const char sccsid[] = "@(#)crystal.c 4.12 98/09/10 xlockmore"; "*ncolors: 100 \n" \ "*fpsSolid: true \n" \ -# define reshape_crystal 0 # define crystal_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -1270,4 +1269,11 @@ init_crystal(ModeInfo * mi) XSetFunction(display, cryst->gc, GXcopy); } +ENTRYPOINT void +reshape_crystal(ModeInfo * mi, int width, int height) +{ + release_crystal(mi); + init_crystal(mi); +} + XSCREENSAVER_MODULE ("Crystal", crystal) diff --git a/hacks/decayscreen.c b/hacks/decayscreen.c index cfb2a0a4..42f8149a 100644 --- a/hacks/decayscreen.c +++ b/hacks/decayscreen.c @@ -40,6 +40,9 @@ struct state { Display *dpy; Window window; + XWindowAttributes xgwa; + Pixmap saved; + int saved_w, saved_h; int sizex, sizey; int delay; @@ -79,6 +82,7 @@ decayscreen_load_image (struct state *st) st->sizex = xgwa.width; st->sizey = xgwa.height; if (st->img_loader) abort(); + st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->window, 0, 0); } @@ -88,7 +92,6 @@ decayscreen_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; - XWindowAttributes xgwa; long gcflags; unsigned long bg; char *s; @@ -125,15 +128,15 @@ decayscreen_init (Display *dpy, Window window) st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); if (st->duration < 1) st->duration = 1; - XGetWindowAttributes (st->dpy, st->window, &xgwa); + XGetWindowAttributes (st->dpy, st->window, &st->xgwa); gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; - bg = get_pixel_resource (st->dpy, xgwa.colormap, "background", "Background"); + bg = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); gcv.foreground = bg; gcflags = GCForeground | GCFunction; - if (use_subwindow_mode_p(xgwa.screen, st->window)) /* see grabscreen.c */ + if (use_subwindow_mode_p(st->xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; st->gc = XCreateGC (st->dpy, st->window, gcflags, &gcv); @@ -181,6 +184,16 @@ decayscreen_draw (Display *dpy, Window window, void *closure) if (st->mode == MELT || st->mode == STRETCH) /* make sure screen eventually turns background color */ XDrawLine (st->dpy, st->window, st->gc, 0, 0, st->sizex, 0); + + if (!st->saved) { + st->saved = XCreatePixmap (st->dpy, st->window, + st->sizex, st->sizey, + st->xgwa.depth); + st->saved_w = st->sizex; + st->saved_h = st->sizey; + } + XCopyArea (st->dpy, st->window, st->saved, st->gc, 0, 0, + st->sizex, st->sizey, 0, 0); } return st->delay; } @@ -316,6 +329,11 @@ decayscreen_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; + XClearWindow (st->dpy, st->window); + XCopyArea (st->dpy, st->saved, st->window, st->gc, + 0, 0, st->saved_w, st->saved_h, + (w - st->saved_w) / 2, + (h - st->saved_h) / 2); st->sizex = w; st->sizey = h; } diff --git a/hacks/demon.c b/hacks/demon.c index ab7a19b9..3d35dca5 100644 --- a/hacks/demon.c +++ b/hacks/demon.c @@ -59,7 +59,6 @@ static const char sccsid[] = "@(#)demon.c 5.00 2000/11/01 xlockmore"; "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ -# define reshape_demon 0 # define demon_handle_event 0 # define UNIFORM_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ @@ -947,6 +946,14 @@ draw_demon (ModeInfo * mi) } +ENTRYPOINT void +reshape_demon(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_demon (mi); +} + + ENTRYPOINT void release_demon (ModeInfo * mi) { diff --git a/hacks/discrete.c b/hacks/discrete.c index 34c17671..1746f726 100644 --- a/hacks/discrete.c +++ b/hacks/discrete.c @@ -40,7 +40,6 @@ static const char sccsid[] = "@(#)discrete.c 5.00 2000/11/01 xlockmore"; "*fpsSolid: true \n" \ # define SMOOTH_COLORS -# define reshape_discrete 0 # define discrete_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" @@ -423,6 +422,15 @@ draw_discrete (ModeInfo * mi) } +ENTRYPOINT void +reshape_discrete(ModeInfo * mi, int width, int height) +{ + discretestruct *hp = &discretes[MI_SCREEN(mi)]; + hp->maxx = width; + hp->maxy = height; + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); +} + ENTRYPOINT void release_discrete(ModeInfo * mi) { diff --git a/hacks/distort.c b/hacks/distort.c index 4e4c809e..92cc0de3 100644 --- a/hacks/distort.c +++ b/hacks/distort.c @@ -781,6 +781,12 @@ static void distort_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + XGetWindowAttributes (st->dpy, st->window, &st->xgwa); + /* XClearWindow (dpy, window); */ + /* Why doesn't this work? */ + XPutImage (st->dpy, st->window, st->gc, st->orig_map, + 0, 0, st->orig_map->width, st->orig_map->height, 0, 0); } static Bool diff --git a/hacks/drift.c b/hacks/drift.c index 56e89b0a..711bc09e 100644 --- a/hacks/drift.c +++ b/hacks/drift.c @@ -38,7 +38,6 @@ static const char sccsid[] = "@(#)drift.c 5.00 2000/11/01 xlockmore"; "*fpsSolid: true \n" \ # define SMOOTH_COLORS -# define reshape_drift 0 # define drift_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" @@ -684,6 +683,13 @@ release_drift(ModeInfo * mi) } } +ENTRYPOINT void +reshape_drift(ModeInfo * mi, int width, int height) +{ + MI_CLEARWINDOW(mi); + init_drift (mi); +} + ENTRYPOINT void refresh_drift(ModeInfo * mi) { diff --git a/hacks/eruption.c b/hacks/eruption.c index 03b9645e..5749aa6d 100644 --- a/hacks/eruption.c +++ b/hacks/eruption.c @@ -449,6 +449,21 @@ static void eruption_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { +#if 0 + struct state *st = (struct state *) closure; + int i; + for (i = 0; i < st->iWinHeight; ++i) + free (st->fire[i]); + + st->iWinWidth = w; + st->iWinHeight = h; + + free (st->fire); + st->fire = calloc( st->iWinHeight, sizeof(unsigned char*)); + for (i = 0; i < st->iWinHeight; ++i) + st->fire[i] = calloc( st->iWinWidth, sizeof(unsigned char)); + st->draw_i = -1; +#endif } static Bool diff --git a/hacks/euler2d.c b/hacks/euler2d.c index bb3054d1..2a3700bf 100644 --- a/hacks/euler2d.c +++ b/hacks/euler2d.c @@ -48,7 +48,6 @@ static const char sccsid[] = "@(#)euler2d.c 5.00 2000/11/01 xlockmore"; "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ -# define reshape_euler2d 0 # define euler2d_handle_event 0 # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ @@ -857,6 +856,13 @@ draw_euler2d (ModeInfo * mi) } +ENTRYPOINT void +reshape_euler2d(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_euler2d (mi); +} + ENTRYPOINT void release_euler2d (ModeInfo * mi) { diff --git a/hacks/fadeplot.c b/hacks/fadeplot.c index babec31c..9fa65f8f 100644 --- a/hacks/fadeplot.c +++ b/hacks/fadeplot.c @@ -38,7 +38,6 @@ static const char sccsid[] = "@(#)fadeplot.c 5.00 2000/11/01 xlockmore"; # define BRIGHT_COLORS # define UNIFORM_COLORS -# define reshape_fadeplot 0 # define fadeplot_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -212,10 +211,20 @@ draw_fadeplot (ModeInfo * mi) } } +ENTRYPOINT void +reshape_fadeplot(ModeInfo * mi, int width, int height) +{ + fadeplotstruct *fp = &fadeplots[MI_SCREEN(mi)]; + fp->width = width; + fp->height = height; + fp->min = MAX(MIN(fp->width, fp->height) / 2, 1); + fp->factor.x = MAX(fp->width / (2 * fp->min), 1); + fp->factor.y = MAX(fp->height / (2 * fp->min), 1); +} + ENTRYPOINT void refresh_fadeplot (ModeInfo * mi) { - MI_CLEARWINDOW(mi); } ENTRYPOINT void diff --git a/hacks/flag.c b/hacks/flag.c index 1cd68094..351ca000 100644 --- a/hacks/flag.c +++ b/hacks/flag.c @@ -268,7 +268,7 @@ make_flag_bits(ModeInfo *mi) # if defined(_AIX) sprintf(text, "%s\n%s %s.%s", uts.nodename, uts.sysname, uts.version, uts.release); -# elif defined(__APPLE__) /* MacOS X + XDarwin */ +# elif defined(__APPLE__) && !defined(USE_IPHONE) /* MacOS X + XDarwin */ { const char *file = "/System/Library/CoreServices/SystemVersion.plist"; diff --git a/hacks/flame.c b/hacks/flame.c index 46570ea9..eed6287c 100644 --- a/hacks/flame.c +++ b/hacks/flame.c @@ -434,6 +434,9 @@ static void flame_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->width = w; + st->height = h; } static Bool diff --git a/hacks/flow.c b/hacks/flow.c index a2c81991..794776f1 100644 --- a/hacks/flow.c +++ b/hacks/flow.c @@ -104,7 +104,6 @@ static const char sccsid[] = "@(#)flow.c 5.00 2000/11/01 xlockmore"; "*cycles: 10000 \n" \ "*ncolors: 200 \n" -# define reshape_flow 0 # define flow_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -1201,6 +1200,13 @@ draw_flow (ModeInfo * mi) } } +ENTRYPOINT void +reshape_flow(ModeInfo * mi, int width, int height) +{ + init_flow (mi); +} + + ENTRYPOINT void release_flow (ModeInfo * mi) { diff --git a/hacks/galaxy.c b/hacks/galaxy.c index 6a72738e..43a0b5bf 100644 --- a/hacks/galaxy.c +++ b/hacks/galaxy.c @@ -47,7 +47,6 @@ static const char sccsid[] = "@(#)galaxy.c 4.04 97/07/28 xlockmore"; "*fpsSolid: true \n" \ # define UNIFORM_COLORS -# define reshape_galaxy 0 # define galaxy_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -440,6 +439,13 @@ draw_galaxy(ModeInfo * mi) startover(mi); } +ENTRYPOINT void +reshape_galaxy(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_galaxy (mi); +} + ENTRYPOINT void release_galaxy(ModeInfo * mi) { diff --git a/hacks/glx/Makefile.in b/hacks/glx/Makefile.in index 36a0bb18..9f256641 100644 --- a/hacks/glx/Makefile.in +++ b/hacks/glx/Makefile.in @@ -203,7 +203,7 @@ HDRS = atlantis.h bubble3d.h buildlwo.h e_textures.h xpm-ximage.h \ texfont.h tangram_shapes.h sproingies.h extrusion.h \ glschool.h glschool_gl.h glschool_alg.h topblock.h \ involute.h teapot.h sonar.h dropshadow.h starwars.h \ - jwzgles.h jwzglesI.h + jwzgles.h jwzglesI.h teapot2.h dnapizza.h GL_MEN = atlantis.man boxed.man bubble3d.man cage.man circuit.man \ cubenetic.man dangerball.man engine.man extrusion.man \ flipscreen3d.man gears.man gflux.man \ @@ -525,9 +525,9 @@ MOEBIUS_OBJS=sphere.o tube.o xpm-ximage.o $(HACK_TRACK_OBJS) moebius: moebius.o $(MOEBIUS_OBJS) $(CC_HACK) -o $@ $@.o $(MOEBIUS_OBJS) $(HACK_LIBS) $(XPM_LIBS) -PIPE_OBJS=pipeobjs.o buildlwo.o sphere.o teapot.o -pipes: pipes.o $(PIPE_OBJS) $(HACK_OBJS) - $(CC_HACK) -o $@ $@.o $(PIPE_OBJS) $(HACK_OBJS) $(HACK_LIBS) +PIPE_OBJS=pipeobjs.o buildlwo.o sphere.o teapot.o normals.o +pipes: pipes.o $(PIPE_OBJS) $(HACK_TRACK_OBJS) + $(CC_HACK) -o $@ $@.o $(PIPE_OBJS) $(HACK_TRACK_OBJS) $(HACK_LIBS) superquadrics: superquadrics.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) @@ -535,8 +535,8 @@ superquadrics: superquadrics.o $(HACK_OBJS) morph3d: morph3d.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) -rubik: rubik.o $(HACK_OBJS) - $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) +rubik: rubik.o $(HACK_TRACK_OBJS) + $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) stairs: stairs.o sphere.o xpm-ximage.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o sphere.o xpm-ximage.o $(HACK_TRACK_OBJS) \ @@ -580,7 +580,8 @@ SW_OBJS=starwars.o glut_stroke.o glut_swidth.o \ starwars: $(SW_OBJS) $(CC_HACK) -o $@ $(SW_OBJS) $(HACK_LIBS) $(TEXT_LIBS) -GLT_OBJS=gltext.o glut_stroke.o glut_swidth.o tube.o $(TEXT) $(HACK_TRACK_OBJS) +GLT_OBJS=gltext.o glut_stroke.o glut_swidth.o tube.o sphere.o \ + $(TEXT) $(HACK_TRACK_OBJS) gltext: $(GLT_OBJS) $(CC_HACK) -o $@ $(GLT_OBJS) $(HACK_LIBS) $(TEXT_LIBS) @@ -746,8 +747,8 @@ crackberg: crackberg.o $(HACK_OBJS) glhanoi: glhanoi.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) -cube21: cube21.o $(HACK_OBJS) - $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) +cube21: cube21.o $(HACK_TRACK_OBJS) + $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) TIMETUNNEL_OBJS = xpm-ximage.o $(HACK_TRACK_OBJS) timetunnel: timetunnel.o $(TIMETUNNEL_OBJS) @@ -791,7 +792,8 @@ SONAR_OBJS=sonar-sim.o sonar-icmp.o ${FONT_OBJS} $(HACK_TRACK_OBJS) sonar: sonar.o $(SONAR_OBJS) $(CC_HACK) -o $@ $@.o $(SONAR_OBJS) $(HACK_LIBS) -JIGSAW_OBJS=normals.o $(UTILS_BIN)/spline.o $(HACK_TRACK_GRAB_OBJS) +JIGSAW_OBJS=normals.o $(UTILS_BIN)/spline.o \ + ${FONT_OBJS} $(HACK_TRACK_GRAB_OBJS) jigsaw: jigsaw.o $(JIGSAW_OBJS) $(CC_HACK) -o $@ $@.o $(JIGSAW_OBJS) $(HACK_LIBS) @@ -823,8 +825,10 @@ tronbit: $(TBIT_OBJS) antinspect.o: ../../config.h antinspect.o: $(HACK_SRC)/fps.h antinspect.o: $(srcdir)/gltrackball.h +antinspect.o: $(srcdir)/jwzglesI.h antinspect.o: $(srcdir)/jwzgles.h antinspect.o: $(HACK_SRC)/screenhackI.h +antinspect.o: $(srcdir)/sphere.h antinspect.o: $(UTILS_SRC)/colors.h antinspect.o: $(UTILS_SRC)/grabscreen.h antinspect.o: $(UTILS_SRC)/hsv.h @@ -839,9 +843,12 @@ antmaze.o: $(srcdir)/ants.h antmaze.o: ../../config.h antmaze.o: $(HACK_SRC)/fps.h antmaze.o: $(srcdir)/gltrackball.h +antmaze.o: $(srcdir)/jwzglesI.h antmaze.o: $(srcdir)/jwzgles.h antmaze.o: $(srcdir)/rotator.h antmaze.o: $(HACK_SRC)/screenhackI.h +antmaze.o: $(srcdir)/sphere.h +antmaze.o: $(srcdir)/tube.h antmaze.o: $(UTILS_SRC)/colors.h antmaze.o: $(UTILS_SRC)/grabscreen.h antmaze.o: $(UTILS_SRC)/hsv.h @@ -857,9 +864,12 @@ antspotlight.o: ../../config.h antspotlight.o: $(HACK_SRC)/fps.h antspotlight.o: $(srcdir)/gltrackball.h antspotlight.o: $(srcdir)/grab-ximage.h +antspotlight.o: $(srcdir)/jwzglesI.h antspotlight.o: $(srcdir)/jwzgles.h antspotlight.o: $(srcdir)/rotator.h antspotlight.o: $(HACK_SRC)/screenhackI.h +antspotlight.o: $(srcdir)/sphere.h +antspotlight.o: $(srcdir)/tube.h antspotlight.o: $(UTILS_SRC)/colors.h antspotlight.o: $(UTILS_SRC)/grabscreen.h antspotlight.o: $(UTILS_SRC)/hsv.h @@ -874,6 +884,7 @@ atlantis.o: $(srcdir)/atlantis.h atlantis.o: ../../config.h atlantis.o: $(HACK_SRC)/fps.h atlantis.o: $(HACK_SRC)/images/sea-texture.xpm +atlantis.o: $(srcdir)/jwzglesI.h atlantis.o: $(srcdir)/jwzgles.h atlantis.o: $(HACK_SRC)/screenhackI.h atlantis.o: $(UTILS_SRC)/colors.h @@ -895,6 +906,7 @@ atunnel.o: $(HACK_SRC)/images/tunnel2.xpm atunnel.o: $(HACK_SRC)/images/tunnel3.xpm atunnel.o: $(HACK_SRC)/images/tunnel4.xpm atunnel.o: $(HACK_SRC)/images/tunnel5.xpm +atunnel.o: $(srcdir)/jwzglesI.h atunnel.o: $(srcdir)/jwzgles.h atunnel.o: $(HACK_SRC)/screenhackI.h atunnel.o: $(srcdir)/tunnel_draw.h @@ -912,6 +924,7 @@ atunnel.o: $(srcdir)/xpm-ximage.h b_draw.o: $(srcdir)/bubble3d.h b_draw.o: ../../config.h b_draw.o: $(HACK_SRC)/fps.h +b_draw.o: $(srcdir)/jwzglesI.h b_draw.o: $(srcdir)/jwzgles.h b_draw.o: $(HACK_SRC)/screenhackI.h b_draw.o: $(UTILS_SRC)/colors.h @@ -925,6 +938,7 @@ b_draw.o: $(UTILS_SRC)/yarandom.h b_draw.o: $(HACK_SRC)/xlockmoreI.h blinkbox.o: ../../config.h blinkbox.o: $(HACK_SRC)/fps.h +blinkbox.o: $(srcdir)/jwzglesI.h blinkbox.o: $(srcdir)/jwzgles.h blinkbox.o: $(HACK_SRC)/screenhackI.h blinkbox.o: $(srcdir)/sphere.h @@ -941,6 +955,7 @@ blinkbox.o: $(HACK_SRC)/xlockmore.h b_lockglue.o: $(srcdir)/bubble3d.h b_lockglue.o: ../../config.h b_lockglue.o: $(HACK_SRC)/fps.h +b_lockglue.o: $(srcdir)/jwzglesI.h b_lockglue.o: $(srcdir)/jwzgles.h b_lockglue.o: $(HACK_SRC)/screenhackI.h b_lockglue.o: $(UTILS_SRC)/colors.h @@ -956,6 +971,7 @@ b_lockglue.o: $(HACK_SRC)/xlockmore.h blocktube.o: ../../config.h blocktube.o: $(HACK_SRC)/fps.h blocktube.o: $(HACK_SRC)/images/blocktube.xpm +blocktube.o: $(srcdir)/jwzglesI.h blocktube.o: $(srcdir)/jwzgles.h blocktube.o: $(HACK_SRC)/screenhackI.h blocktube.o: $(UTILS_SRC)/colors.h @@ -972,6 +988,7 @@ blocktube.o: $(srcdir)/xpm-ximage.h boing.o: ../../config.h boing.o: $(HACK_SRC)/fps.h boing.o: $(srcdir)/gltrackball.h +boing.o: $(srcdir)/jwzglesI.h boing.o: $(srcdir)/jwzgles.h boing.o: $(HACK_SRC)/screenhackI.h boing.o: $(UTILS_SRC)/colors.h @@ -988,6 +1005,7 @@ bouncingcow.o: ../../config.h bouncingcow.o: $(HACK_SRC)/fps.h bouncingcow.o: $(srcdir)/gllist.h bouncingcow.o: $(srcdir)/gltrackball.h +bouncingcow.o: $(srcdir)/jwzglesI.h bouncingcow.o: $(srcdir)/jwzgles.h bouncingcow.o: $(srcdir)/rotator.h bouncingcow.o: $(HACK_SRC)/screenhackI.h @@ -1005,6 +1023,7 @@ bouncingcow.o: $(srcdir)/xpm-ximage.h boxed.o: $(srcdir)/boxed.h boxed.o: ../../config.h boxed.o: $(HACK_SRC)/fps.h +boxed.o: $(srcdir)/jwzglesI.h boxed.o: $(srcdir)/jwzgles.h boxed.o: $(HACK_SRC)/screenhackI.h boxed.o: $(UTILS_SRC)/colors.h @@ -1020,6 +1039,7 @@ boxed.o: $(HACK_SRC)/xlockmore.h b_sphere.o: $(srcdir)/bubble3d.h b_sphere.o: ../../config.h b_sphere.o: $(HACK_SRC)/fps.h +b_sphere.o: $(srcdir)/jwzglesI.h b_sphere.o: $(srcdir)/jwzgles.h b_sphere.o: $(HACK_SRC)/screenhackI.h b_sphere.o: $(UTILS_SRC)/colors.h @@ -1034,6 +1054,7 @@ b_sphere.o: $(HACK_SRC)/xlockmoreI.h bubble3d.o: $(srcdir)/bubble3d.h bubble3d.o: ../../config.h bubble3d.o: $(HACK_SRC)/fps.h +bubble3d.o: $(srcdir)/jwzglesI.h bubble3d.o: $(srcdir)/jwzgles.h bubble3d.o: $(HACK_SRC)/screenhackI.h bubble3d.o: $(UTILS_SRC)/colors.h @@ -1046,9 +1067,13 @@ bubble3d.o: $(UTILS_SRC)/xshm.h bubble3d.o: $(UTILS_SRC)/yarandom.h bubble3d.o: $(HACK_SRC)/xlockmoreI.h buildlwo.o: $(srcdir)/buildlwo.h +buildlwo.o: ../../config.h +buildlwo.o: $(srcdir)/jwzglesI.h +buildlwo.o: $(srcdir)/jwzgles.h cage.o: ../../config.h -cage.o: $(srcdir)/e_textures.h cage.o: $(HACK_SRC)/fps.h +cage.o: $(HACK_SRC)/images/wood.xpm +cage.o: $(srcdir)/jwzglesI.h cage.o: $(srcdir)/jwzgles.h cage.o: $(HACK_SRC)/screenhackI.h cage.o: $(UTILS_SRC)/colors.h @@ -1061,10 +1086,12 @@ cage.o: $(UTILS_SRC)/xshm.h cage.o: $(UTILS_SRC)/yarandom.h cage.o: $(HACK_SRC)/xlockmoreI.h cage.o: $(HACK_SRC)/xlockmore.h +cage.o: $(srcdir)/xpm-ximage.h carousel.o: ../../config.h carousel.o: $(HACK_SRC)/fps.h carousel.o: $(srcdir)/gltrackball.h carousel.o: $(srcdir)/grab-ximage.h +carousel.o: $(srcdir)/jwzglesI.h carousel.o: $(srcdir)/jwzgles.h carousel.o: $(srcdir)/rotator.h carousel.o: $(HACK_SRC)/screenhackI.h @@ -1080,9 +1107,13 @@ carousel.o: $(UTILS_SRC)/yarandom.h carousel.o: $(HACK_SRC)/xlockmoreI.h carousel.o: $(HACK_SRC)/xlockmore.h chessmodels.o: $(srcdir)/chessmodels.h +chessmodels.o: ../../config.h +chessmodels.o: $(srcdir)/jwzglesI.h +chessmodels.o: $(srcdir)/jwzgles.h circuit.o: ../../config.h circuit.o: $(srcdir)/font-ximage.h circuit.o: $(HACK_SRC)/fps.h +circuit.o: $(srcdir)/jwzglesI.h circuit.o: $(srcdir)/jwzgles.h circuit.o: $(HACK_SRC)/screenhackI.h circuit.o: $(UTILS_SRC)/colors.h @@ -1095,12 +1126,19 @@ circuit.o: $(UTILS_SRC)/xshm.h circuit.o: $(UTILS_SRC)/yarandom.h circuit.o: $(HACK_SRC)/xlockmoreI.h circuit.o: $(HACK_SRC)/xlockmore.h +companion_disc.o: ../../config.h companion_disc.o: $(srcdir)/gllist.h +companion_disc.o: $(srcdir)/jwzglesI.h +companion_disc.o: $(srcdir)/jwzgles.h +companion_heart.o: ../../config.h companion_heart.o: $(srcdir)/gllist.h +companion_heart.o: $(srcdir)/jwzglesI.h +companion_heart.o: $(srcdir)/jwzgles.h companion.o: ../../config.h companion.o: $(HACK_SRC)/fps.h companion.o: $(srcdir)/gllist.h companion.o: $(srcdir)/gltrackball.h +companion.o: $(srcdir)/jwzglesI.h companion.o: $(srcdir)/jwzgles.h companion.o: $(srcdir)/rotator.h companion.o: $(HACK_SRC)/screenhackI.h @@ -1115,15 +1153,37 @@ companion.o: $(UTILS_SRC)/yarandom.h companion.o: $(HACK_SRC)/xlockmoreI.h companion.o: $(HACK_SRC)/xlockmore.h companion.o: $(srcdir)/xpm-ximage.h +companion_quad.o: ../../config.h companion_quad.o: $(srcdir)/gllist.h +companion_quad.o: $(srcdir)/jwzglesI.h +companion_quad.o: $(srcdir)/jwzgles.h +cow_face.o: ../../config.h cow_face.o: $(srcdir)/gllist.h +cow_face.o: $(srcdir)/jwzglesI.h +cow_face.o: $(srcdir)/jwzgles.h +cow_hide.o: ../../config.h cow_hide.o: $(srcdir)/gllist.h +cow_hide.o: $(srcdir)/jwzglesI.h +cow_hide.o: $(srcdir)/jwzgles.h +cow_hoofs.o: ../../config.h cow_hoofs.o: $(srcdir)/gllist.h +cow_hoofs.o: $(srcdir)/jwzglesI.h +cow_hoofs.o: $(srcdir)/jwzgles.h +cow_horns.o: ../../config.h cow_horns.o: $(srcdir)/gllist.h +cow_horns.o: $(srcdir)/jwzglesI.h +cow_horns.o: $(srcdir)/jwzgles.h +cow_tail.o: ../../config.h cow_tail.o: $(srcdir)/gllist.h +cow_tail.o: $(srcdir)/jwzglesI.h +cow_tail.o: $(srcdir)/jwzgles.h +cow_udder.o: ../../config.h cow_udder.o: $(srcdir)/gllist.h +cow_udder.o: $(srcdir)/jwzglesI.h +cow_udder.o: $(srcdir)/jwzgles.h crackberg.o: ../../config.h crackberg.o: $(HACK_SRC)/fps.h +crackberg.o: $(srcdir)/jwzglesI.h crackberg.o: $(srcdir)/jwzgles.h crackberg.o: $(HACK_SRC)/screenhackI.h crackberg.o: $(UTILS_SRC)/colors.h @@ -1138,6 +1198,8 @@ crackberg.o: $(HACK_SRC)/xlockmoreI.h crackberg.o: $(HACK_SRC)/xlockmore.h cube21.o: ../../config.h cube21.o: $(HACK_SRC)/fps.h +cube21.o: $(srcdir)/gltrackball.h +cube21.o: $(srcdir)/jwzglesI.h cube21.o: $(srcdir)/jwzgles.h cube21.o: $(HACK_SRC)/screenhackI.h cube21.o: $(UTILS_SRC)/colors.h @@ -1153,6 +1215,7 @@ cube21.o: $(HACK_SRC)/xlockmore.h cubenetic.o: ../../config.h cubenetic.o: $(HACK_SRC)/fps.h cubenetic.o: $(srcdir)/gltrackball.h +cubenetic.o: $(srcdir)/jwzglesI.h cubenetic.o: $(srcdir)/jwzgles.h cubenetic.o: $(srcdir)/rotator.h cubenetic.o: $(HACK_SRC)/screenhackI.h @@ -1169,6 +1232,7 @@ cubenetic.o: $(HACK_SRC)/xlockmore.h cubestorm.o: ../../config.h cubestorm.o: $(HACK_SRC)/fps.h cubestorm.o: $(srcdir)/gltrackball.h +cubestorm.o: $(srcdir)/jwzglesI.h cubestorm.o: $(srcdir)/jwzgles.h cubestorm.o: $(srcdir)/rotator.h cubestorm.o: $(HACK_SRC)/screenhackI.h @@ -1185,6 +1249,7 @@ cubestorm.o: $(HACK_SRC)/xlockmore.h cubicgrid.o: ../../config.h cubicgrid.o: $(HACK_SRC)/fps.h cubicgrid.o: $(srcdir)/gltrackball.h +cubicgrid.o: $(srcdir)/jwzglesI.h cubicgrid.o: $(srcdir)/jwzgles.h cubicgrid.o: $(srcdir)/rotator.h cubicgrid.o: $(HACK_SRC)/screenhackI.h @@ -1201,6 +1266,7 @@ cubicgrid.o: $(HACK_SRC)/xlockmore.h dangerball.o: ../../config.h dangerball.o: $(HACK_SRC)/fps.h dangerball.o: $(srcdir)/gltrackball.h +dangerball.o: $(srcdir)/jwzglesI.h dangerball.o: $(srcdir)/jwzgles.h dangerball.o: $(srcdir)/rotator.h dangerball.o: $(HACK_SRC)/screenhackI.h @@ -1217,8 +1283,10 @@ dangerball.o: $(UTILS_SRC)/yarandom.h dangerball.o: $(HACK_SRC)/xlockmoreI.h dangerball.o: $(HACK_SRC)/xlockmore.h dnalogo.o: ../../config.h +dnalogo.o: $(srcdir)/dnapizza.h dnalogo.o: $(HACK_SRC)/fps.h dnalogo.o: $(srcdir)/gltrackball.h +dnalogo.o: $(srcdir)/jwzglesI.h dnalogo.o: $(srcdir)/jwzgles.h dnalogo.o: $(srcdir)/normals.h dnalogo.o: $(srcdir)/rotator.h @@ -1237,6 +1305,8 @@ dnalogo.o: $(HACK_SRC)/xlockmore.h dolphin.o: $(srcdir)/atlantis.h dolphin.o: ../../config.h dolphin.o: $(HACK_SRC)/fps.h +dolphin.o: $(srcdir)/jwzglesI.h +dolphin.o: $(srcdir)/jwzgles.h dolphin.o: $(HACK_SRC)/screenhackI.h dolphin.o: $(UTILS_SRC)/colors.h dolphin.o: $(UTILS_SRC)/grabscreen.h @@ -1245,12 +1315,16 @@ dolphin.o: $(UTILS_SRC)/resources.h dolphin.o: $(UTILS_SRC)/usleep.h dolphin.o: $(UTILS_SRC)/visual.h dolphin.o: $(UTILS_SRC)/yarandom.h +dropshadow.o: ../../config.h dropshadow.o: $(srcdir)/dropshadow.h +dropshadow.o: $(srcdir)/jwzglesI.h +dropshadow.o: $(srcdir)/jwzgles.h endgame.o: $(srcdir)/chessgames.h endgame.o: $(srcdir)/chessmodels.h endgame.o: ../../config.h endgame.o: $(HACK_SRC)/fps.h endgame.o: $(srcdir)/gltrackball.h +endgame.o: $(srcdir)/jwzglesI.h endgame.o: $(srcdir)/jwzgles.h endgame.o: $(HACK_SRC)/screenhackI.h endgame.o: $(UTILS_SRC)/colors.h @@ -1267,9 +1341,11 @@ engine.o: ../../config.h engine.o: $(HACK_SRC)/fps.h engine.o: $(srcdir)/gltrackball.h engine.o: $(srcdir)/glxfonts.h +engine.o: $(srcdir)/jwzglesI.h engine.o: $(srcdir)/jwzgles.h engine.o: $(srcdir)/rotator.h engine.o: $(HACK_SRC)/screenhackI.h +engine.o: $(srcdir)/texfont.h engine.o: $(UTILS_SRC)/colors.h engine.o: $(UTILS_SRC)/grabscreen.h engine.o: $(UTILS_SRC)/hsv.h @@ -1282,16 +1358,25 @@ engine.o: $(HACK_SRC)/xlockmoreI.h engine.o: $(HACK_SRC)/xlockmore.h extrusion-helix2.o: ../../config.h extrusion-helix2.o: $(srcdir)/extrusion.h +extrusion-helix2.o: $(srcdir)/jwzglesI.h +extrusion-helix2.o: $(srcdir)/jwzgles.h extrusion-helix3.o: ../../config.h extrusion-helix3.o: $(srcdir)/extrusion.h +extrusion-helix3.o: $(srcdir)/jwzglesI.h +extrusion-helix3.o: $(srcdir)/jwzgles.h extrusion-helix4.o: ../../config.h extrusion-helix4.o: $(srcdir)/extrusion.h +extrusion-helix4.o: $(srcdir)/jwzglesI.h +extrusion-helix4.o: $(srcdir)/jwzgles.h extrusion-joinoffset.o: ../../config.h extrusion-joinoffset.o: $(srcdir)/extrusion.h +extrusion-joinoffset.o: $(srcdir)/jwzglesI.h +extrusion-joinoffset.o: $(srcdir)/jwzgles.h extrusion.o: ../../config.h extrusion.o: $(srcdir)/extrusion.h extrusion.o: $(HACK_SRC)/fps.h extrusion.o: $(srcdir)/gltrackball.h +extrusion.o: $(srcdir)/jwzglesI.h extrusion.o: $(srcdir)/jwzgles.h extrusion.o: $(srcdir)/rotator.h extrusion.o: $(HACK_SRC)/screenhackI.h @@ -1308,14 +1393,21 @@ extrusion.o: $(HACK_SRC)/xlockmore.h extrusion.o: $(srcdir)/xpm-ximage.h extrusion-screw.o: ../../config.h extrusion-screw.o: $(srcdir)/extrusion.h +extrusion-screw.o: $(srcdir)/jwzglesI.h +extrusion-screw.o: $(srcdir)/jwzgles.h extrusion-taper.o: ../../config.h extrusion-taper.o: $(srcdir)/extrusion.h +extrusion-taper.o: $(srcdir)/jwzglesI.h +extrusion-taper.o: $(srcdir)/jwzgles.h extrusion-twistoid.o: ../../config.h extrusion-twistoid.o: $(srcdir)/extrusion.h +extrusion-twistoid.o: $(srcdir)/jwzglesI.h +extrusion-twistoid.o: $(srcdir)/jwzgles.h flipflop.o: ../../config.h flipflop.o: $(HACK_SRC)/fps.h flipflop.o: $(srcdir)/gltrackball.h flipflop.o: $(srcdir)/grab-ximage.h +flipflop.o: $(srcdir)/jwzglesI.h flipflop.o: $(srcdir)/jwzgles.h flipflop.o: $(HACK_SRC)/screenhackI.h flipflop.o: $(UTILS_SRC)/colors.h @@ -1332,6 +1424,7 @@ flipscreen3d.o: ../../config.h flipscreen3d.o: $(HACK_SRC)/fps.h flipscreen3d.o: $(srcdir)/gltrackball.h flipscreen3d.o: $(srcdir)/grab-ximage.h +flipscreen3d.o: $(srcdir)/jwzglesI.h flipscreen3d.o: $(srcdir)/jwzgles.h flipscreen3d.o: $(HACK_SRC)/screenhackI.h flipscreen3d.o: $(UTILS_SRC)/colors.h @@ -1346,6 +1439,7 @@ flipscreen3d.o: $(HACK_SRC)/xlockmoreI.h flipscreen3d.o: $(HACK_SRC)/xlockmore.h fliptext.o: ../../config.h fliptext.o: $(HACK_SRC)/fps.h +fliptext.o: $(srcdir)/jwzglesI.h fliptext.o: $(srcdir)/jwzgles.h fliptext.o: $(HACK_SRC)/screenhackI.h fliptext.o: $(srcdir)/texfont.h @@ -1353,6 +1447,7 @@ fliptext.o: $(UTILS_SRC)/colors.h fliptext.o: $(UTILS_SRC)/grabscreen.h fliptext.o: $(UTILS_SRC)/hsv.h fliptext.o: $(UTILS_SRC)/resources.h +fliptext.o: $(UTILS_SRC)/textclient.h fliptext.o: $(UTILS_SRC)/usleep.h fliptext.o: $(UTILS_SRC)/visual.h fliptext.o: $(UTILS_SRC)/xshm.h @@ -1363,6 +1458,7 @@ flurry.o: ../../config.h flurry.o: $(srcdir)/flurry.h flurry.o: $(HACK_SRC)/fps.h flurry.o: $(srcdir)/gltrackball.h +flurry.o: $(srcdir)/jwzglesI.h flurry.o: $(srcdir)/jwzgles.h flurry.o: $(srcdir)/rotator.h flurry.o: $(HACK_SRC)/screenhackI.h @@ -1379,21 +1475,29 @@ flurry.o: $(HACK_SRC)/xlockmore.h flurry-smoke.o: ../../config.h flurry-smoke.o: $(srcdir)/flurry.h flurry-smoke.o: $(srcdir)/gltrackball.h +flurry-smoke.o: $(srcdir)/jwzglesI.h +flurry-smoke.o: $(srcdir)/jwzgles.h flurry-smoke.o: $(srcdir)/rotator.h flurry-smoke.o: $(UTILS_SRC)/yarandom.h flurry-spark.o: ../../config.h flurry-spark.o: $(srcdir)/flurry.h flurry-spark.o: $(srcdir)/gltrackball.h +flurry-spark.o: $(srcdir)/jwzglesI.h +flurry-spark.o: $(srcdir)/jwzgles.h flurry-spark.o: $(srcdir)/rotator.h flurry-spark.o: $(UTILS_SRC)/yarandom.h flurry-star.o: ../../config.h flurry-star.o: $(srcdir)/flurry.h flurry-star.o: $(srcdir)/gltrackball.h +flurry-star.o: $(srcdir)/jwzglesI.h +flurry-star.o: $(srcdir)/jwzgles.h flurry-star.o: $(srcdir)/rotator.h flurry-star.o: $(UTILS_SRC)/yarandom.h flurry-texture.o: ../../config.h flurry-texture.o: $(srcdir)/flurry.h flurry-texture.o: $(srcdir)/gltrackball.h +flurry-texture.o: $(srcdir)/jwzglesI.h +flurry-texture.o: $(srcdir)/jwzgles.h flurry-texture.o: $(srcdir)/rotator.h flurry-texture.o: $(UTILS_SRC)/yarandom.h flyingtoasters.o: ../../config.h @@ -1402,6 +1506,7 @@ flyingtoasters.o: $(srcdir)/gllist.h flyingtoasters.o: $(srcdir)/gltrackball.h flyingtoasters.o: $(HACK_SRC)/images/chromesphere.xpm flyingtoasters.o: $(HACK_SRC)/images/toast.xpm +flyingtoasters.o: $(srcdir)/jwzglesI.h flyingtoasters.o: $(srcdir)/jwzgles.h flyingtoasters.o: $(HACK_SRC)/screenhackI.h flyingtoasters.o: $(UTILS_SRC)/colors.h @@ -1417,13 +1522,16 @@ flyingtoasters.o: $(HACK_SRC)/xlockmore.h flyingtoasters.o: $(srcdir)/xpm-ximage.h font-ximage.o: ../../config.h font-ximage.o: $(srcdir)/font-ximage.h +font-ximage.o: $(srcdir)/jwzglesI.h font-ximage.o: $(srcdir)/jwzgles.h fps-gl.o: ../../config.h fps-gl.o: $(HACK_SRC)/fpsI.h fps-gl.o: $(HACK_SRC)/fps.h fps-gl.o: $(srcdir)/glxfonts.h +fps-gl.o: $(srcdir)/jwzglesI.h fps-gl.o: $(srcdir)/jwzgles.h fps-gl.o: $(HACK_SRC)/screenhackI.h +fps-gl.o: $(srcdir)/texfont.h fps-gl.o: $(UTILS_SRC)/colors.h fps-gl.o: $(UTILS_SRC)/grabscreen.h fps-gl.o: $(UTILS_SRC)/hsv.h @@ -1437,6 +1545,7 @@ gears.o: ../../config.h gears.o: $(HACK_SRC)/fps.h gears.o: $(srcdir)/gltrackball.h gears.o: $(srcdir)/involute.h +gears.o: $(srcdir)/jwzglesI.h gears.o: $(srcdir)/jwzgles.h gears.o: $(srcdir)/normals.h gears.o: $(srcdir)/rotator.h @@ -1456,6 +1565,7 @@ gflux.o: ../../config.h gflux.o: $(HACK_SRC)/fps.h gflux.o: $(srcdir)/gltrackball.h gflux.o: $(srcdir)/grab-ximage.h +gflux.o: $(srcdir)/jwzglesI.h gflux.o: $(srcdir)/jwzgles.h gflux.o: $(HACK_SRC)/screenhackI.h gflux.o: $(UTILS_SRC)/colors.h @@ -1471,6 +1581,7 @@ gflux.o: $(HACK_SRC)/xlockmore.h glblur.o: ../../config.h glblur.o: $(HACK_SRC)/fps.h glblur.o: $(srcdir)/gltrackball.h +glblur.o: $(srcdir)/jwzglesI.h glblur.o: $(srcdir)/jwzgles.h glblur.o: $(srcdir)/rotator.h glblur.o: $(HACK_SRC)/screenhackI.h @@ -1486,6 +1597,7 @@ glblur.o: $(HACK_SRC)/xlockmoreI.h glblur.o: $(HACK_SRC)/xlockmore.h glcells.o: ../../config.h glcells.o: $(HACK_SRC)/fps.h +glcells.o: $(srcdir)/jwzglesI.h glcells.o: $(srcdir)/jwzgles.h glcells.o: $(HACK_SRC)/screenhackI.h glcells.o: $(UTILS_SRC)/colors.h @@ -1501,6 +1613,7 @@ glcells.o: $(HACK_SRC)/xlockmore.h gleidescope.o: ../../config.h gleidescope.o: $(HACK_SRC)/fps.h gleidescope.o: $(srcdir)/grab-ximage.h +gleidescope.o: $(srcdir)/jwzglesI.h gleidescope.o: $(srcdir)/jwzgles.h gleidescope.o: $(HACK_SRC)/screenhackI.h gleidescope.o: $(UTILS_SRC)/colors.h @@ -1519,6 +1632,7 @@ glforestfire.o: $(HACK_SRC)/fps.h glforestfire.o: $(srcdir)/gltrackball.h glforestfire.o: $(HACK_SRC)/images/ground.xpm glforestfire.o: $(HACK_SRC)/images/tree.xpm +glforestfire.o: $(srcdir)/jwzglesI.h glforestfire.o: $(srcdir)/jwzgles.h glforestfire.o: $(HACK_SRC)/screenhackI.h glforestfire.o: $(UTILS_SRC)/colors.h @@ -1534,6 +1648,7 @@ glforestfire.o: $(HACK_SRC)/xlockmore.h glforestfire.o: $(srcdir)/xpm-ximage.h glhanoi.o: ../../config.h glhanoi.o: $(HACK_SRC)/fps.h +glhanoi.o: $(srcdir)/jwzglesI.h glhanoi.o: $(srcdir)/jwzgles.h glhanoi.o: $(srcdir)/rotator.h glhanoi.o: $(HACK_SRC)/screenhackI.h @@ -1550,6 +1665,7 @@ glhanoi.o: $(HACK_SRC)/xlockmore.h glknots.o: ../../config.h glknots.o: $(HACK_SRC)/fps.h glknots.o: $(srcdir)/gltrackball.h +glknots.o: $(srcdir)/jwzglesI.h glknots.o: $(srcdir)/jwzgles.h glknots.o: $(srcdir)/rotator.h glknots.o: $(HACK_SRC)/screenhackI.h @@ -1564,10 +1680,14 @@ glknots.o: $(UTILS_SRC)/xshm.h glknots.o: $(UTILS_SRC)/yarandom.h glknots.o: $(HACK_SRC)/xlockmoreI.h glknots.o: $(HACK_SRC)/xlockmore.h +gllist.o: ../../config.h gllist.o: $(srcdir)/gllist.h +gllist.o: $(srcdir)/jwzglesI.h +gllist.o: $(srcdir)/jwzgles.h glmatrix.o: ../../config.h glmatrix.o: $(HACK_SRC)/fps.h glmatrix.o: $(HACK_SRC)/images/matrix3.xpm +glmatrix.o: $(srcdir)/jwzglesI.h glmatrix.o: $(srcdir)/jwzgles.h glmatrix.o: $(HACK_SRC)/screenhackI.h glmatrix.o: $(UTILS_SRC)/colors.h @@ -1585,6 +1705,7 @@ glplanet.o: ../../config.h glplanet.o: $(HACK_SRC)/fps.h glplanet.o: $(srcdir)/gltrackball.h glplanet.o: $(HACK_SRC)/images/earth.xpm +glplanet.o: $(srcdir)/jwzglesI.h glplanet.o: $(srcdir)/jwzgles.h glplanet.o: $(srcdir)/rotator.h glplanet.o: $(HACK_SRC)/screenhackI.h @@ -1603,8 +1724,10 @@ glplanet.o: $(srcdir)/xpm-ximage.h glschool_alg.o: ../../config.h glschool_alg.o: $(srcdir)/glschool_alg.h glschool_alg.o: $(UTILS_SRC)/yarandom.h +glschool_gl.o: ../../config.h glschool_gl.o: $(srcdir)/glschool_alg.h glschool_gl.o: $(srcdir)/glschool_gl.h +glschool_gl.o: $(srcdir)/jwzglesI.h glschool_gl.o: $(srcdir)/jwzgles.h glschool_gl.o: $(srcdir)/sphere.h glschool_gl.o: $(srcdir)/tube.h @@ -1613,6 +1736,7 @@ glschool.o: $(HACK_SRC)/fps.h glschool.o: $(srcdir)/glschool_alg.h glschool.o: $(srcdir)/glschool_gl.h glschool.o: $(srcdir)/glschool.h +glschool.o: $(srcdir)/jwzglesI.h glschool.o: $(srcdir)/jwzgles.h glschool.o: $(HACK_SRC)/screenhackI.h glschool.o: $(UTILS_SRC)/colors.h @@ -1629,8 +1753,10 @@ glslideshow.o: ../../config.h glslideshow.o: $(HACK_SRC)/fps.h glslideshow.o: $(srcdir)/glxfonts.h glslideshow.o: $(srcdir)/grab-ximage.h +glslideshow.o: $(srcdir)/jwzglesI.h glslideshow.o: $(srcdir)/jwzgles.h glslideshow.o: $(HACK_SRC)/screenhackI.h +glslideshow.o: $(srcdir)/texfont.h glslideshow.o: $(UTILS_SRC)/colors.h glslideshow.o: $(UTILS_SRC)/grabscreen.h glslideshow.o: $(UTILS_SRC)/hsv.h @@ -1644,8 +1770,10 @@ glslideshow.o: $(HACK_SRC)/xlockmore.h glsnake.o: ../../config.h glsnake.o: $(HACK_SRC)/fps.h glsnake.o: $(srcdir)/glxfonts.h +glsnake.o: $(srcdir)/jwzglesI.h glsnake.o: $(srcdir)/jwzgles.h glsnake.o: $(HACK_SRC)/screenhackI.h +glsnake.o: $(srcdir)/texfont.h glsnake.o: $(UTILS_SRC)/colors.h glsnake.o: $(UTILS_SRC)/grabscreen.h glsnake.o: $(UTILS_SRC)/hsv.h @@ -1661,14 +1789,17 @@ gltext.o: $(HACK_SRC)/fps.h gltext.o: $(srcdir)/gltrackball.h gltext.o: $(srcdir)/glut_roman.h gltext.o: $(srcdir)/glutstroke.h +gltext.o: $(srcdir)/jwzglesI.h gltext.o: $(srcdir)/jwzgles.h gltext.o: $(srcdir)/rotator.h gltext.o: $(HACK_SRC)/screenhackI.h +gltext.o: $(srcdir)/sphere.h gltext.o: $(srcdir)/tube.h gltext.o: $(UTILS_SRC)/colors.h gltext.o: $(UTILS_SRC)/grabscreen.h gltext.o: $(UTILS_SRC)/hsv.h gltext.o: $(UTILS_SRC)/resources.h +gltext.o: $(UTILS_SRC)/textclient.h gltext.o: $(UTILS_SRC)/usleep.h gltext.o: $(UTILS_SRC)/visual.h gltext.o: $(UTILS_SRC)/xshm.h @@ -1677,20 +1808,27 @@ gltext.o: $(HACK_SRC)/xlockmoreI.h gltext.o: $(HACK_SRC)/xlockmore.h gltrackball.o: ../../config.h gltrackball.o: $(srcdir)/gltrackball.h +gltrackball.o: $(srcdir)/jwzglesI.h gltrackball.o: $(srcdir)/jwzgles.h gltrackball.o: $(srcdir)/trackball.h glut_stroke.o: ../../config.h glut_stroke.o: $(srcdir)/glutstroke.h +glut_stroke.o: $(srcdir)/jwzglesI.h glut_stroke.o: $(srcdir)/jwzgles.h glut_swidth.o: ../../config.h glut_swidth.o: $(srcdir)/glutstroke.h +glut_swidth.o: $(srcdir)/jwzglesI.h glut_swidth.o: $(srcdir)/jwzgles.h glxfonts.o: ../../config.h +glxfonts.o: $(HACK_SRC)/fps.h glxfonts.o: $(srcdir)/glxfonts.h +glxfonts.o: $(srcdir)/jwzglesI.h glxfonts.o: $(srcdir)/jwzgles.h +glxfonts.o: $(srcdir)/texfont.h glxfonts.o: $(UTILS_SRC)/resources.h grab-ximage.o: ../../config.h grab-ximage.o: $(srcdir)/grab-ximage.h +grab-ximage.o: $(srcdir)/jwzglesI.h grab-ximage.o: $(srcdir)/jwzgles.h grab-ximage.o: $(UTILS_SRC)/grabscreen.h grab-ximage.o: $(UTILS_SRC)/resources.h @@ -1699,6 +1837,7 @@ grab-ximage.o: $(UTILS_SRC)/xshm.h hilbert.o: ../../config.h hilbert.o: $(HACK_SRC)/fps.h hilbert.o: $(srcdir)/gltrackball.h +hilbert.o: $(srcdir)/jwzglesI.h hilbert.o: $(srcdir)/jwzgles.h hilbert.o: $(srcdir)/rotator.h hilbert.o: $(HACK_SRC)/screenhackI.h @@ -1717,6 +1856,7 @@ hilbert.o: $(HACK_SRC)/xlockmore.h hypertorus.o: ../../config.h hypertorus.o: $(HACK_SRC)/fps.h hypertorus.o: $(srcdir)/gltrackball.h +hypertorus.o: $(srcdir)/jwzglesI.h hypertorus.o: $(srcdir)/jwzgles.h hypertorus.o: $(HACK_SRC)/screenhackI.h hypertorus.o: $(UTILS_SRC)/colors.h @@ -1731,6 +1871,7 @@ hypertorus.o: $(HACK_SRC)/xlockmoreI.h hypertorus.o: $(HACK_SRC)/xlockmore.h hypnowheel.o: ../../config.h hypnowheel.o: $(HACK_SRC)/fps.h +hypnowheel.o: $(srcdir)/jwzglesI.h hypnowheel.o: $(srcdir)/jwzgles.h hypnowheel.o: $(srcdir)/rotator.h hypnowheel.o: $(HACK_SRC)/screenhackI.h @@ -1747,6 +1888,7 @@ hypnowheel.o: $(HACK_SRC)/xlockmore.h involute.o: ../../config.h involute.o: $(HACK_SRC)/fps.h involute.o: $(srcdir)/involute.h +involute.o: $(srcdir)/jwzglesI.h involute.o: $(srcdir)/jwzgles.h involute.o: $(srcdir)/normals.h involute.o: $(HACK_SRC)/screenhackI.h @@ -1761,6 +1903,7 @@ jigglypuff.o: ../../config.h jigglypuff.o: $(HACK_SRC)/fps.h jigglypuff.o: $(srcdir)/gltrackball.h jigglypuff.o: $(HACK_SRC)/images/jigglymap.xpm +jigglypuff.o: $(srcdir)/jwzglesI.h jigglypuff.o: $(srcdir)/jwzgles.h jigglypuff.o: $(HACK_SRC)/screenhackI.h jigglypuff.o: $(UTILS_SRC)/colors.h @@ -1778,10 +1921,12 @@ jigsaw.o: ../../config.h jigsaw.o: $(HACK_SRC)/fps.h jigsaw.o: $(srcdir)/gltrackball.h jigsaw.o: $(srcdir)/grab-ximage.h +jigsaw.o: $(srcdir)/jwzglesI.h jigsaw.o: $(srcdir)/jwzgles.h jigsaw.o: $(srcdir)/normals.h jigsaw.o: $(srcdir)/rotator.h jigsaw.o: $(HACK_SRC)/screenhackI.h +jigsaw.o: $(srcdir)/texfont.h jigsaw.o: $(UTILS_SRC)/colors.h jigsaw.o: $(UTILS_SRC)/grabscreen.h jigsaw.o: $(UTILS_SRC)/hsv.h @@ -1797,10 +1942,12 @@ juggler3d.o: ../../config.h juggler3d.o: $(HACK_SRC)/fps.h juggler3d.o: $(srcdir)/gltrackball.h juggler3d.o: $(srcdir)/glxfonts.h +juggler3d.o: $(srcdir)/jwzglesI.h juggler3d.o: $(srcdir)/jwzgles.h juggler3d.o: $(srcdir)/rotator.h juggler3d.o: $(HACK_SRC)/screenhackI.h juggler3d.o: $(srcdir)/sphere.h +juggler3d.o: $(srcdir)/texfont.h juggler3d.o: $(srcdir)/tube.h juggler3d.o: $(UTILS_SRC)/colors.h juggler3d.o: $(UTILS_SRC)/grabscreen.h @@ -1813,10 +1960,11 @@ juggler3d.o: $(UTILS_SRC)/yarandom.h juggler3d.o: $(HACK_SRC)/xlockmoreI.h juggler3d.o: $(HACK_SRC)/xlockmore.h jwzgles.o: ../../config.h -jwzgles.o: $(srcdir)/jwzgles.h +jwzgles.o: $(srcdir)/jwzglesI.h klein.o: ../../config.h klein.o: $(HACK_SRC)/fps.h klein.o: $(srcdir)/gltrackball.h +klein.o: $(srcdir)/jwzglesI.h klein.o: $(srcdir)/jwzgles.h klein.o: $(HACK_SRC)/screenhackI.h klein.o: $(UTILS_SRC)/colors.h @@ -1832,7 +1980,8 @@ klein.o: $(HACK_SRC)/xlockmore.h lament.o: ../../config.h lament.o: $(HACK_SRC)/fps.h lament.o: $(srcdir)/gltrackball.h -lament.o: $(HACK_SRC)/images/lament.xpm +lament.o: $(HACK_SRC)/images/lament512.xpm +lament.o: $(srcdir)/jwzglesI.h lament.o: $(srcdir)/jwzgles.h lament.o: $(srcdir)/normals.h lament.o: $(srcdir)/rotator.h @@ -1851,6 +2000,7 @@ lament.o: $(srcdir)/xpm-ximage.h lavalite.o: ../../config.h lavalite.o: $(HACK_SRC)/fps.h lavalite.o: $(srcdir)/gltrackball.h +lavalite.o: $(srcdir)/jwzglesI.h lavalite.o: $(srcdir)/jwzgles.h lavalite.o: $(srcdir)/marching.h lavalite.o: $(srcdir)/rotator.h @@ -1868,6 +2018,7 @@ lavalite.o: $(HACK_SRC)/xlockmore.h lavalite.o: $(srcdir)/xpm-ximage.h lockward.o: ../../config.h lockward.o: $(HACK_SRC)/fps.h +lockward.o: $(srcdir)/jwzglesI.h lockward.o: $(srcdir)/jwzgles.h lockward.o: $(HACK_SRC)/screenhackI.h lockward.o: $(UTILS_SRC)/colors.h @@ -1881,12 +2032,14 @@ lockward.o: $(UTILS_SRC)/yarandom.h lockward.o: $(HACK_SRC)/xlockmoreI.h lockward.o: $(HACK_SRC)/xlockmore.h marching.o: ../../config.h +marching.o: $(srcdir)/jwzglesI.h marching.o: $(srcdir)/jwzgles.h marching.o: $(srcdir)/marching.h marching.o: $(srcdir)/normals.h menger.o: ../../config.h menger.o: $(HACK_SRC)/fps.h menger.o: $(srcdir)/gltrackball.h +menger.o: $(srcdir)/jwzglesI.h menger.o: $(srcdir)/jwzgles.h menger.o: $(srcdir)/rotator.h menger.o: $(HACK_SRC)/screenhackI.h @@ -1904,6 +2057,7 @@ mirrorblob.o: ../../config.h mirrorblob.o: $(HACK_SRC)/fps.h mirrorblob.o: $(srcdir)/gltrackball.h mirrorblob.o: $(srcdir)/grab-ximage.h +mirrorblob.o: $(srcdir)/jwzglesI.h mirrorblob.o: $(srcdir)/jwzgles.h mirrorblob.o: $(HACK_SRC)/screenhackI.h mirrorblob.o: $(UTILS_SRC)/colors.h @@ -1920,6 +2074,7 @@ moebiusgears.o: ../../config.h moebiusgears.o: $(HACK_SRC)/fps.h moebiusgears.o: $(srcdir)/gltrackball.h moebiusgears.o: $(srcdir)/involute.h +moebiusgears.o: $(srcdir)/jwzglesI.h moebiusgears.o: $(srcdir)/jwzgles.h moebiusgears.o: $(srcdir)/normals.h moebiusgears.o: $(srcdir)/rotator.h @@ -1935,12 +2090,14 @@ moebiusgears.o: $(UTILS_SRC)/yarandom.h moebiusgears.o: $(HACK_SRC)/xlockmoreI.h moebiusgears.o: $(HACK_SRC)/xlockmore.h moebius.o: ../../config.h -moebius.o: $(srcdir)/e_textures.h moebius.o: $(HACK_SRC)/fps.h moebius.o: $(srcdir)/gltrackball.h +moebius.o: $(srcdir)/jwzglesI.h moebius.o: $(srcdir)/jwzgles.h moebius.o: $(srcdir)/rotator.h moebius.o: $(HACK_SRC)/screenhackI.h +moebius.o: $(srcdir)/sphere.h +moebius.o: $(srcdir)/tube.h moebius.o: $(UTILS_SRC)/colors.h moebius.o: $(UTILS_SRC)/grabscreen.h moebius.o: $(UTILS_SRC)/hsv.h @@ -1955,11 +2112,13 @@ molecule.o: ../../config.h molecule.o: $(HACK_SRC)/fps.h molecule.o: $(srcdir)/gltrackball.h molecule.o: $(srcdir)/glxfonts.h +molecule.o: $(srcdir)/jwzglesI.h molecule.o: $(srcdir)/jwzgles.h molecule.o: molecules.h molecule.o: $(srcdir)/rotator.h molecule.o: $(HACK_SRC)/screenhackI.h molecule.o: $(srcdir)/sphere.h +molecule.o: $(srcdir)/texfont.h molecule.o: $(srcdir)/tube.h molecule.o: $(UTILS_SRC)/colors.h molecule.o: $(UTILS_SRC)/grabscreen.h @@ -1973,6 +2132,7 @@ molecule.o: $(HACK_SRC)/xlockmoreI.h molecule.o: $(HACK_SRC)/xlockmore.h morph3d.o: ../../config.h morph3d.o: $(HACK_SRC)/fps.h +morph3d.o: $(srcdir)/jwzglesI.h morph3d.o: $(srcdir)/jwzgles.h morph3d.o: $(HACK_SRC)/screenhackI.h morph3d.o: $(UTILS_SRC)/colors.h @@ -1987,6 +2147,7 @@ morph3d.o: $(HACK_SRC)/xlockmoreI.h morph3d.o: $(HACK_SRC)/xlockmore.h noof.o: ../../config.h noof.o: $(HACK_SRC)/fps.h +noof.o: $(srcdir)/jwzglesI.h noof.o: $(srcdir)/jwzgles.h noof.o: $(HACK_SRC)/screenhackI.h noof.o: $(UTILS_SRC)/colors.h @@ -2000,11 +2161,14 @@ noof.o: $(UTILS_SRC)/yarandom.h noof.o: $(HACK_SRC)/xlockmoreI.h noof.o: $(HACK_SRC)/xlockmore.h normals.o: ../../config.h +normals.o: $(srcdir)/jwzglesI.h +normals.o: $(srcdir)/jwzgles.h normals.o: $(srcdir)/normals.h photopile.o: ../../config.h photopile.o: $(srcdir)/dropshadow.h photopile.o: $(HACK_SRC)/fps.h photopile.o: $(srcdir)/grab-ximage.h +photopile.o: $(srcdir)/jwzglesI.h photopile.o: $(srcdir)/jwzgles.h photopile.o: $(HACK_SRC)/screenhackI.h photopile.o: $(srcdir)/texfont.h @@ -2023,9 +2187,11 @@ pinion.o: $(HACK_SRC)/fps.h pinion.o: $(srcdir)/gltrackball.h pinion.o: $(srcdir)/glxfonts.h pinion.o: $(srcdir)/involute.h +pinion.o: $(srcdir)/jwzglesI.h pinion.o: $(srcdir)/jwzgles.h pinion.o: $(srcdir)/normals.h pinion.o: $(HACK_SRC)/screenhackI.h +pinion.o: $(srcdir)/texfont.h pinion.o: $(UTILS_SRC)/colors.h pinion.o: $(UTILS_SRC)/grabscreen.h pinion.o: $(UTILS_SRC)/hsv.h @@ -2037,11 +2203,17 @@ pinion.o: $(UTILS_SRC)/yarandom.h pinion.o: $(HACK_SRC)/xlockmoreI.h pinion.o: $(HACK_SRC)/xlockmore.h pipeobjs.o: $(srcdir)/buildlwo.h +pipeobjs.o: ../../config.h +pipeobjs.o: $(srcdir)/jwzglesI.h +pipeobjs.o: $(srcdir)/jwzgles.h pipes.o: $(srcdir)/buildlwo.h pipes.o: ../../config.h pipes.o: $(HACK_SRC)/fps.h +pipes.o: $(srcdir)/gltrackball.h +pipes.o: $(srcdir)/jwzglesI.h pipes.o: $(srcdir)/jwzgles.h pipes.o: $(HACK_SRC)/screenhackI.h +pipes.o: $(srcdir)/sphere.h pipes.o: $(srcdir)/teapot.h pipes.o: $(UTILS_SRC)/colors.h pipes.o: $(UTILS_SRC)/grabscreen.h @@ -2057,12 +2229,14 @@ polyhedra-gl.o: ../../config.h polyhedra-gl.o: $(HACK_SRC)/fps.h polyhedra-gl.o: $(srcdir)/gltrackball.h polyhedra-gl.o: $(srcdir)/glxfonts.h +polyhedra-gl.o: $(srcdir)/jwzglesI.h polyhedra-gl.o: $(srcdir)/jwzgles.h polyhedra-gl.o: $(srcdir)/normals.h polyhedra-gl.o: $(srcdir)/polyhedra.h polyhedra-gl.o: $(srcdir)/rotator.h polyhedra-gl.o: $(HACK_SRC)/screenhackI.h polyhedra-gl.o: $(srcdir)/teapot.h +polyhedra-gl.o: $(srcdir)/texfont.h polyhedra-gl.o: $(UTILS_SRC)/colors.h polyhedra-gl.o: $(UTILS_SRC)/grabscreen.h polyhedra-gl.o: $(UTILS_SRC)/hsv.h @@ -2078,6 +2252,7 @@ polyhedra.o: $(srcdir)/polyhedra.h polytopes.o: ../../config.h polytopes.o: $(HACK_SRC)/fps.h polytopes.o: $(srcdir)/gltrackball.h +polytopes.o: $(srcdir)/jwzglesI.h polytopes.o: $(srcdir)/jwzgles.h polytopes.o: $(HACK_SRC)/screenhackI.h polytopes.o: $(UTILS_SRC)/colors.h @@ -2093,6 +2268,7 @@ polytopes.o: $(HACK_SRC)/xlockmore.h providence.o: ../../config.h providence.o: $(HACK_SRC)/fps.h providence.o: $(srcdir)/gltrackball.h +providence.o: $(srcdir)/jwzglesI.h providence.o: $(srcdir)/jwzgles.h providence.o: $(HACK_SRC)/screenhackI.h providence.o: $(UTILS_SRC)/colors.h @@ -2107,6 +2283,7 @@ providence.o: $(HACK_SRC)/xlockmoreI.h providence.o: $(HACK_SRC)/xlockmore.h pulsar.o: ../../config.h pulsar.o: $(HACK_SRC)/fps.h +pulsar.o: $(srcdir)/jwzglesI.h pulsar.o: $(srcdir)/jwzgles.h pulsar.o: $(HACK_SRC)/screenhackI.h pulsar.o: $(UTILS_SRC)/colors.h @@ -2120,9 +2297,11 @@ pulsar.o: $(UTILS_SRC)/yarandom.h pulsar.o: $(HACK_SRC)/xlockmoreI.h pulsar.o: $(HACK_SRC)/xlockmore.h pulsar.o: $(srcdir)/xpm-ximage.h +queens.o: $(srcdir)/chessmodels.h queens.o: ../../config.h queens.o: $(HACK_SRC)/fps.h queens.o: $(srcdir)/gltrackball.h +queens.o: $(srcdir)/jwzglesI.h queens.o: $(srcdir)/jwzgles.h queens.o: $(HACK_SRC)/screenhackI.h queens.o: $(UTILS_SRC)/colors.h @@ -2141,6 +2320,7 @@ rotator.o: $(UTILS_SRC)/yarandom.h rubikblocks.o: ../../config.h rubikblocks.o: $(HACK_SRC)/fps.h rubikblocks.o: $(srcdir)/gltrackball.h +rubikblocks.o: $(srcdir)/jwzglesI.h rubikblocks.o: $(srcdir)/jwzgles.h rubikblocks.o: $(srcdir)/rotator.h rubikblocks.o: $(HACK_SRC)/screenhackI.h @@ -2156,6 +2336,8 @@ rubikblocks.o: $(HACK_SRC)/xlockmoreI.h rubikblocks.o: $(HACK_SRC)/xlockmore.h rubik.o: ../../config.h rubik.o: $(HACK_SRC)/fps.h +rubik.o: $(srcdir)/gltrackball.h +rubik.o: $(srcdir)/jwzglesI.h rubik.o: $(srcdir)/jwzgles.h rubik.o: $(HACK_SRC)/screenhackI.h rubik.o: $(UTILS_SRC)/colors.h @@ -2168,18 +2350,40 @@ rubik.o: $(UTILS_SRC)/xshm.h rubik.o: $(UTILS_SRC)/yarandom.h rubik.o: $(HACK_SRC)/xlockmoreI.h rubik.o: $(HACK_SRC)/xlockmore.h +s1_1.o: ../../config.h s1_1.o: $(srcdir)/gllist.h +s1_1.o: $(srcdir)/jwzglesI.h +s1_1.o: $(srcdir)/jwzgles.h +s1_2.o: ../../config.h s1_2.o: $(srcdir)/gllist.h +s1_2.o: $(srcdir)/jwzglesI.h +s1_2.o: $(srcdir)/jwzgles.h +s1_3.o: ../../config.h s1_3.o: $(srcdir)/gllist.h +s1_3.o: $(srcdir)/jwzglesI.h +s1_3.o: $(srcdir)/jwzgles.h +s1_4.o: ../../config.h s1_4.o: $(srcdir)/gllist.h +s1_4.o: $(srcdir)/jwzglesI.h +s1_4.o: $(srcdir)/jwzgles.h +s1_5.o: ../../config.h s1_5.o: $(srcdir)/gllist.h +s1_5.o: $(srcdir)/jwzglesI.h +s1_5.o: $(srcdir)/jwzgles.h +s1_6.o: ../../config.h s1_6.o: $(srcdir)/gllist.h +s1_6.o: $(srcdir)/jwzglesI.h +s1_6.o: $(srcdir)/jwzgles.h +s1_b.o: ../../config.h s1_b.o: $(srcdir)/gllist.h +s1_b.o: $(srcdir)/jwzglesI.h +s1_b.o: $(srcdir)/jwzgles.h sballs.o: ../../config.h sballs.o: $(HACK_SRC)/fps.h sballs.o: $(srcdir)/gltrackball.h sballs.o: $(HACK_SRC)/images/sball-bg.xpm sballs.o: $(HACK_SRC)/images/sball.xpm +sballs.o: $(srcdir)/jwzglesI.h sballs.o: $(srcdir)/jwzgles.h sballs.o: $(HACK_SRC)/screenhackI.h sballs.o: $(UTILS_SRC)/colors.h @@ -2196,6 +2400,8 @@ sballs.o: $(srcdir)/xpm-ximage.h shark.o: $(srcdir)/atlantis.h shark.o: ../../config.h shark.o: $(HACK_SRC)/fps.h +shark.o: $(srcdir)/jwzglesI.h +shark.o: $(srcdir)/jwzgles.h shark.o: $(HACK_SRC)/screenhackI.h shark.o: $(UTILS_SRC)/colors.h shark.o: $(UTILS_SRC)/grabscreen.h @@ -2207,6 +2413,7 @@ shark.o: $(UTILS_SRC)/yarandom.h sierpinski3d.o: ../../config.h sierpinski3d.o: $(HACK_SRC)/fps.h sierpinski3d.o: $(srcdir)/gltrackball.h +sierpinski3d.o: $(srcdir)/jwzglesI.h sierpinski3d.o: $(srcdir)/jwzgles.h sierpinski3d.o: $(srcdir)/rotator.h sierpinski3d.o: $(HACK_SRC)/screenhackI.h @@ -2224,6 +2431,7 @@ skytentacles.o: ../../config.h skytentacles.o: $(HACK_SRC)/fps.h skytentacles.o: $(srcdir)/gltrackball.h skytentacles.o: $(HACK_SRC)/images/scales.xpm +skytentacles.o: $(srcdir)/jwzglesI.h skytentacles.o: $(srcdir)/jwzgles.h skytentacles.o: $(srcdir)/normals.h skytentacles.o: $(srcdir)/rotator.h @@ -2254,6 +2462,7 @@ sonar-icmp.o: $(UTILS_SRC)/yarandom.h sonar.o: ../../config.h sonar.o: $(HACK_SRC)/fps.h sonar.o: $(srcdir)/gltrackball.h +sonar.o: $(srcdir)/jwzglesI.h sonar.o: $(srcdir)/jwzgles.h sonar.o: $(srcdir)/rotator.h sonar.o: $(HACK_SRC)/screenhackI.h @@ -2284,10 +2493,12 @@ spheremonics.o: ../../config.h spheremonics.o: $(HACK_SRC)/fps.h spheremonics.o: $(srcdir)/gltrackball.h spheremonics.o: $(srcdir)/glxfonts.h +spheremonics.o: $(srcdir)/jwzglesI.h spheremonics.o: $(srcdir)/jwzgles.h spheremonics.o: $(srcdir)/normals.h spheremonics.o: $(srcdir)/rotator.h spheremonics.o: $(HACK_SRC)/screenhackI.h +spheremonics.o: $(srcdir)/texfont.h spheremonics.o: $(UTILS_SRC)/colors.h spheremonics.o: $(UTILS_SRC)/grabscreen.h spheremonics.o: $(UTILS_SRC)/hsv.h @@ -2299,11 +2510,13 @@ spheremonics.o: $(UTILS_SRC)/yarandom.h spheremonics.o: $(HACK_SRC)/xlockmoreI.h spheremonics.o: $(HACK_SRC)/xlockmore.h sphere.o: ../../config.h +sphere.o: $(srcdir)/jwzglesI.h sphere.o: $(srcdir)/jwzgles.h sphere.o: $(srcdir)/sphere.h sproingies.o: ../../config.h sproingies.o: $(HACK_SRC)/fps.h sproingies.o: $(srcdir)/gllist.h +sproingies.o: $(srcdir)/jwzglesI.h sproingies.o: $(srcdir)/jwzgles.h sproingies.o: $(HACK_SRC)/screenhackI.h sproingies.o: $(srcdir)/sproingies.h @@ -2318,6 +2531,7 @@ sproingies.o: $(UTILS_SRC)/yarandom.h sproingies.o: $(HACK_SRC)/xlockmoreI.h sproingiewrap.o: ../../config.h sproingiewrap.o: $(HACK_SRC)/fps.h +sproingiewrap.o: $(srcdir)/jwzglesI.h sproingiewrap.o: $(srcdir)/jwzgles.h sproingiewrap.o: $(HACK_SRC)/screenhackI.h sproingiewrap.o: $(srcdir)/sproingies.h @@ -2332,9 +2546,10 @@ sproingiewrap.o: $(UTILS_SRC)/yarandom.h sproingiewrap.o: $(HACK_SRC)/xlockmoreI.h sproingiewrap.o: $(HACK_SRC)/xlockmore.h stairs.o: ../../config.h -stairs.o: $(srcdir)/e_textures.h stairs.o: $(HACK_SRC)/fps.h stairs.o: $(srcdir)/gltrackball.h +stairs.o: $(HACK_SRC)/images/wood.xpm +stairs.o: $(srcdir)/jwzglesI.h stairs.o: $(srcdir)/jwzgles.h stairs.o: $(HACK_SRC)/screenhackI.h stairs.o: $(srcdir)/sphere.h @@ -2348,17 +2563,21 @@ stairs.o: $(UTILS_SRC)/xshm.h stairs.o: $(UTILS_SRC)/yarandom.h stairs.o: $(HACK_SRC)/xlockmoreI.h stairs.o: $(HACK_SRC)/xlockmore.h +stairs.o: $(srcdir)/xpm-ximage.h starwars.o: ../../config.h starwars.o: $(HACK_SRC)/fps.h starwars.o: $(srcdir)/glut_roman.h starwars.o: $(srcdir)/glutstroke.h +starwars.o: $(srcdir)/jwzglesI.h starwars.o: $(srcdir)/jwzgles.h starwars.o: $(HACK_SRC)/screenhackI.h +starwars.o: $(srcdir)/starwars.h starwars.o: $(srcdir)/texfont.h starwars.o: $(UTILS_SRC)/colors.h starwars.o: $(UTILS_SRC)/grabscreen.h starwars.o: $(UTILS_SRC)/hsv.h starwars.o: $(UTILS_SRC)/resources.h +starwars.o: $(UTILS_SRC)/textclient.h starwars.o: $(UTILS_SRC)/usleep.h starwars.o: $(UTILS_SRC)/visual.h starwars.o: $(UTILS_SRC)/xshm.h @@ -2366,6 +2585,7 @@ starwars.o: $(UTILS_SRC)/yarandom.h starwars.o: $(HACK_SRC)/xlockmoreI.h starwars.o: $(HACK_SRC)/xlockmore.h stonerview-move.o: ../../config.h +stonerview-move.o: $(srcdir)/jwzglesI.h stonerview-move.o: $(srcdir)/jwzgles.h stonerview-move.o: $(srcdir)/stonerview.h stonerview-move.o: $(srcdir)/stonerview-move.h @@ -2374,6 +2594,7 @@ stonerview-move.o: $(UTILS_SRC)/yarandom.h stonerview.o: ../../config.h stonerview.o: $(HACK_SRC)/fps.h stonerview.o: $(srcdir)/gltrackball.h +stonerview.o: $(srcdir)/jwzglesI.h stonerview.o: $(srcdir)/jwzgles.h stonerview.o: $(HACK_SRC)/screenhackI.h stonerview.o: $(srcdir)/stonerview.h @@ -2390,18 +2611,21 @@ stonerview.o: $(UTILS_SRC)/yarandom.h stonerview.o: $(HACK_SRC)/xlockmoreI.h stonerview.o: $(HACK_SRC)/xlockmore.h stonerview-osc.o: ../../config.h +stonerview-osc.o: $(srcdir)/jwzglesI.h stonerview-osc.o: $(srcdir)/jwzgles.h stonerview-osc.o: $(srcdir)/stonerview.h stonerview-osc.o: $(srcdir)/stonerview-move.h stonerview-osc.o: $(srcdir)/stonerview-osc.h stonerview-osc.o: $(UTILS_SRC)/yarandom.h stonerview-view.o: ../../config.h +stonerview-view.o: $(srcdir)/jwzglesI.h stonerview-view.o: $(srcdir)/jwzgles.h stonerview-view.o: $(srcdir)/stonerview.h stonerview-view.o: $(srcdir)/stonerview-move.h stonerview-view.o: $(srcdir)/stonerview-osc.h superquadrics.o: ../../config.h superquadrics.o: $(HACK_SRC)/fps.h +superquadrics.o: $(srcdir)/jwzglesI.h superquadrics.o: $(srcdir)/jwzgles.h superquadrics.o: $(HACK_SRC)/screenhackI.h superquadrics.o: $(UTILS_SRC)/colors.h @@ -2417,6 +2641,7 @@ superquadrics.o: $(HACK_SRC)/xlockmore.h surfaces.o: ../../config.h surfaces.o: $(HACK_SRC)/fps.h surfaces.o: $(srcdir)/gltrackball.h +surfaces.o: $(srcdir)/jwzglesI.h surfaces.o: $(srcdir)/jwzgles.h surfaces.o: $(srcdir)/rotator.h surfaces.o: $(HACK_SRC)/screenhackI.h @@ -2433,6 +2658,7 @@ surfaces.o: $(HACK_SRC)/xlockmore.h swim.o: $(srcdir)/atlantis.h swim.o: ../../config.h swim.o: $(HACK_SRC)/fps.h +swim.o: $(srcdir)/jwzglesI.h swim.o: $(srcdir)/jwzgles.h swim.o: $(HACK_SRC)/screenhackI.h swim.o: $(UTILS_SRC)/colors.h @@ -2447,9 +2673,11 @@ swim.o: $(HACK_SRC)/xlockmoreI.h tangram.o: ../../config.h tangram.o: $(HACK_SRC)/fps.h tangram.o: $(srcdir)/glxfonts.h +tangram.o: $(srcdir)/jwzglesI.h tangram.o: $(srcdir)/jwzgles.h tangram.o: $(HACK_SRC)/screenhackI.h tangram.o: $(srcdir)/tangram_shapes.h +tangram.o: $(srcdir)/texfont.h tangram.o: $(UTILS_SRC)/colors.h tangram.o: $(UTILS_SRC)/grabscreen.h tangram.o: $(UTILS_SRC)/hsv.h @@ -2460,11 +2688,19 @@ tangram.o: $(UTILS_SRC)/xshm.h tangram.o: $(UTILS_SRC)/yarandom.h tangram.o: $(HACK_SRC)/xlockmoreI.h tangram.o: $(HACK_SRC)/xlockmore.h +tangram_shapes.o: ../../config.h +tangram_shapes.o: $(srcdir)/jwzglesI.h +tangram_shapes.o: $(srcdir)/jwzgles.h tangram_shapes.o: $(srcdir)/tangram_shapes.h teapot.o: ../../config.h +teapot.o: $(srcdir)/jwzglesI.h teapot.o: $(srcdir)/jwzgles.h +teapot.o: $(srcdir)/normals.h +teapot.o: $(srcdir)/teapot2.h teapot.o: $(srcdir)/teapot.h texfont.o: ../../config.h +texfont.o: $(srcdir)/jwzglesI.h +texfont.o: $(srcdir)/jwzgles.h texfont.o: $(srcdir)/texfont.h texfont.o: $(UTILS_SRC)/resources.h timetunnel.o: ../../config.h @@ -2474,6 +2710,7 @@ timetunnel.o: $(HACK_SRC)/images/timetunnel0.xpm timetunnel.o: $(HACK_SRC)/images/timetunnel1.xpm timetunnel.o: $(HACK_SRC)/images/timetunnel2.xpm timetunnel.o: $(HACK_SRC)/images/tunnelstar.xpm +timetunnel.o: $(srcdir)/jwzglesI.h timetunnel.o: $(srcdir)/jwzgles.h timetunnel.o: $(srcdir)/rotator.h timetunnel.o: $(HACK_SRC)/screenhackI.h @@ -2489,23 +2726,55 @@ timetunnel.o: $(UTILS_SRC)/yarandom.h timetunnel.o: $(HACK_SRC)/xlockmoreI.h timetunnel.o: $(HACK_SRC)/xlockmore.h timetunnel.o: $(srcdir)/xpm-ximage.h +toast2.o: ../../config.h toast2.o: $(srcdir)/gllist.h +toast2.o: $(srcdir)/jwzglesI.h +toast2.o: $(srcdir)/jwzgles.h +toaster_base.o: ../../config.h toaster_base.o: $(srcdir)/gllist.h +toaster_base.o: $(srcdir)/jwzglesI.h +toaster_base.o: $(srcdir)/jwzgles.h +toaster_handle2.o: ../../config.h toaster_handle2.o: $(srcdir)/gllist.h +toaster_handle2.o: $(srcdir)/jwzglesI.h +toaster_handle2.o: $(srcdir)/jwzgles.h +toaster_handle.o: ../../config.h toaster_handle.o: $(srcdir)/gllist.h +toaster_handle.o: $(srcdir)/jwzglesI.h +toaster_handle.o: $(srcdir)/jwzgles.h +toaster_jet.o: ../../config.h toaster_jet.o: $(srcdir)/gllist.h +toaster_jet.o: $(srcdir)/jwzglesI.h +toaster_jet.o: $(srcdir)/jwzgles.h +toaster_knob.o: ../../config.h toaster_knob.o: $(srcdir)/gllist.h +toaster_knob.o: $(srcdir)/jwzglesI.h +toaster_knob.o: $(srcdir)/jwzgles.h +toaster.o: ../../config.h toaster.o: $(srcdir)/gllist.h +toaster.o: $(srcdir)/jwzglesI.h +toaster.o: $(srcdir)/jwzgles.h +toaster_slots.o: ../../config.h toaster_slots.o: $(srcdir)/gllist.h +toaster_slots.o: $(srcdir)/jwzglesI.h +toaster_slots.o: $(srcdir)/jwzgles.h +toaster_wing.o: ../../config.h toaster_wing.o: $(srcdir)/gllist.h +toaster_wing.o: $(srcdir)/jwzglesI.h +toaster_wing.o: $(srcdir)/jwzgles.h +toast.o: ../../config.h toast.o: $(srcdir)/gllist.h +toast.o: $(srcdir)/jwzglesI.h +toast.o: $(srcdir)/jwzgles.h topblock.o: ../../config.h topblock.o: $(HACK_SRC)/fps.h topblock.o: $(srcdir)/gltrackball.h +topblock.o: $(srcdir)/jwzglesI.h topblock.o: $(srcdir)/jwzgles.h topblock.o: $(HACK_SRC)/screenhackI.h topblock.o: $(srcdir)/sphere.h topblock.o: $(srcdir)/topblock.h +topblock.o: $(srcdir)/tube.h topblock.o: $(UTILS_SRC)/colors.h topblock.o: $(UTILS_SRC)/grabscreen.h topblock.o: $(UTILS_SRC)/hsv.h @@ -2518,13 +2787,23 @@ topblock.o: $(HACK_SRC)/xlockmoreI.h topblock.o: $(HACK_SRC)/xlockmore.h trackball.o: ../../config.h trackball.o: $(srcdir)/trackball.h +tronbit_idle1.o: ../../config.h tronbit_idle1.o: $(srcdir)/gllist.h +tronbit_idle1.o: $(srcdir)/jwzglesI.h +tronbit_idle1.o: $(srcdir)/jwzgles.h +tronbit_idle2.o: ../../config.h tronbit_idle2.o: $(srcdir)/gllist.h +tronbit_idle2.o: $(srcdir)/jwzglesI.h +tronbit_idle2.o: $(srcdir)/jwzgles.h +tronbit_no.o: ../../config.h tronbit_no.o: $(srcdir)/gllist.h +tronbit_no.o: $(srcdir)/jwzglesI.h +tronbit_no.o: $(srcdir)/jwzgles.h tronbit.o: ../../config.h tronbit.o: $(HACK_SRC)/fps.h tronbit.o: $(srcdir)/gllist.h tronbit.o: $(srcdir)/gltrackball.h +tronbit.o: $(srcdir)/jwzglesI.h tronbit.o: $(srcdir)/jwzgles.h tronbit.o: $(srcdir)/rotator.h tronbit.o: $(HACK_SRC)/screenhackI.h @@ -2539,12 +2818,17 @@ tronbit.o: $(UTILS_SRC)/xshm.h tronbit.o: $(UTILS_SRC)/yarandom.h tronbit.o: $(HACK_SRC)/xlockmoreI.h tronbit.o: $(HACK_SRC)/xlockmore.h +tronbit_yes.o: ../../config.h tronbit_yes.o: $(srcdir)/gllist.h +tronbit_yes.o: $(srcdir)/jwzglesI.h +tronbit_yes.o: $(srcdir)/jwzgles.h tube.o: ../../config.h +tube.o: $(srcdir)/jwzglesI.h tube.o: $(srcdir)/jwzgles.h tube.o: $(srcdir)/tube.h tunnel_draw.o: ../../config.h tunnel_draw.o: $(HACK_SRC)/fps.h +tunnel_draw.o: $(srcdir)/jwzglesI.h tunnel_draw.o: $(srcdir)/jwzgles.h tunnel_draw.o: $(HACK_SRC)/screenhackI.h tunnel_draw.o: $(srcdir)/tunnel_draw.h @@ -2559,6 +2843,7 @@ tunnel_draw.o: $(UTILS_SRC)/yarandom.h tunnel_draw.o: $(HACK_SRC)/xlockmoreI.h voronoi.o: ../../config.h voronoi.o: $(HACK_SRC)/fps.h +voronoi.o: $(srcdir)/jwzglesI.h voronoi.o: $(srcdir)/jwzgles.h voronoi.o: $(HACK_SRC)/screenhackI.h voronoi.o: $(UTILS_SRC)/colors.h @@ -2574,6 +2859,8 @@ voronoi.o: $(HACK_SRC)/xlockmore.h whale.o: $(srcdir)/atlantis.h whale.o: ../../config.h whale.o: $(HACK_SRC)/fps.h +whale.o: $(srcdir)/jwzglesI.h +whale.o: $(srcdir)/jwzgles.h whale.o: $(HACK_SRC)/screenhackI.h whale.o: $(UTILS_SRC)/colors.h whale.o: $(UTILS_SRC)/grabscreen.h @@ -2585,8 +2872,10 @@ whale.o: $(UTILS_SRC)/yarandom.h xlock-gl-utils.o: ../../config.h xlock-gl-utils.o: $(HACK_SRC)/fps.h xlock-gl-utils.o: $(srcdir)/glxfonts.h +xlock-gl-utils.o: $(srcdir)/jwzglesI.h xlock-gl-utils.o: $(srcdir)/jwzgles.h xlock-gl-utils.o: $(HACK_SRC)/screenhackI.h +xlock-gl-utils.o: $(srcdir)/texfont.h xlock-gl-utils.o: $(UTILS_SRC)/colors.h xlock-gl-utils.o: $(UTILS_SRC)/grabscreen.h xlock-gl-utils.o: $(UTILS_SRC)/hsv.h diff --git a/hacks/glx/antmaze.c b/hacks/glx/antmaze.c index 3c9e1de3..0ca7f05f 100644 --- a/hacks/glx/antmaze.c +++ b/hacks/glx/antmaze.c @@ -1504,9 +1504,7 @@ ENTRYPOINT void draw_antmaze(ModeInfo * mi) /* started ? -mag : -8.0 + 4.0*fabs(sin(ant_step/10.0)), */ /* started ? -mag : -8.0 + 4.0*fabs(sin(ant_step/10.0))); */ - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate(mp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); glRotatef(mp->ant_step*0.6, 0.0, 1.0, 0.0); @@ -1539,9 +1537,7 @@ ENTRYPOINT void draw_antmaze(ModeInfo * mi) glTranslatef(0.0, 0.0, -16.0); glRotatef(60.0, 1.0, 0.0, 0.0); glRotatef(-15.0 + mp->ant_step/10.0, 0.0, 1.0, 0.0); - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate(mp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); /* sync */ if(!draw_antmaze_strip(mi)) { diff --git a/hacks/glx/atunnel.c b/hacks/glx/atunnel.c index ee244ea5..29eee782 100644 --- a/hacks/glx/atunnel.c +++ b/hacks/glx/atunnel.c @@ -196,7 +196,7 @@ static void Init(ModeInfo * mi) LoadTexture(mi, texture5,5); glEnable(GL_TEXTURE_2D); } - sa->ts = InitTunnel(); + sa->ts = atunnel_InitTunnel(); /* Set lighting parameters */ if (do_light) @@ -270,8 +270,8 @@ ENTRYPOINT void draw_atunnel(ModeInfo * mi) glLoadIdentity(); - DrawTunnel(sa->ts, do_texture, do_light, sa->texture); - SplashScreen(sa->ts, do_wire, do_texture, do_light); + atunnel_DrawTunnel(sa->ts, do_texture, do_light, sa->texture); + atunnel_SplashScreen(sa->ts, do_wire, do_texture, do_light); glFlush(); /* manage framerate display */ diff --git a/hacks/glx/boing.c b/hacks/glx/boing.c index 97990721..3396217f 100644 --- a/hacks/glx/boing.c +++ b/hacks/glx/boing.c @@ -1,4 +1,4 @@ -/* boing, Copyright (c) 2005-2008 Jamie Zawinski +/* boing, Copyright (c) 2005-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -461,6 +461,13 @@ reshape_boing (ModeInfo *mi, int width, int height) glMatrixMode(GL_PROJECTION); glLoadIdentity(); + + if (height > width) + { + GLfloat s = width / (GLfloat) height; + glScalef (s, s, s); + } + gluPerspective (8.0, 1/h, 1.0, 10.0); glMatrixMode(GL_MODELVIEW); @@ -629,8 +636,19 @@ draw_boing (ModeInfo *mi) tick_physics (mi); glPushMatrix (); + + { + double rot = current_device_rotation(); + glRotatef(rot, 0, 0, 1); + if ((rot > 45 && rot < 135) || + (rot < -45 && rot > -135)) + { + GLfloat s = MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi); + glScalef (1/s, s, 1); + } + } + gltrackball_rotate (bp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); glLightfv (GL_LIGHT0, GL_POSITION, bp->lightpos); diff --git a/hacks/glx/bouncingcow.c b/hacks/glx/bouncingcow.c index 21ece3c7..b769c117 100644 --- a/hacks/glx/bouncingcow.c +++ b/hacks/glx/bouncingcow.c @@ -447,6 +447,8 @@ draw_floater (ModeInfo *mi, floater *f) glPushMatrix(); glTranslatef (f->x, f->y, f->z); + gltrackball_rotate (bp->trackball); + glRotatef (y * 360, 0.0, 1.0, 0.0); if (f->spinner_p) { @@ -500,7 +502,6 @@ draw_cow (ModeInfo *mi) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); - gltrackball_rotate (bp->trackball); glRotatef(current_device_rotation(), 0, 0, 1); glScalef (0.5, 0.5, 0.5); diff --git a/hacks/glx/carousel.c b/hacks/glx/carousel.c index 2a2a0cee..49abc581 100644 --- a/hacks/glx/carousel.c +++ b/hacks/glx/carousel.c @@ -516,13 +516,23 @@ loading_msg (ModeInfo *mi, int n) glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); - glRotatef(current_device_rotation(), 0, 0, 1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); - glOrtho(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi), -1, 1); + { + double rot = current_device_rotation(); + glRotatef(rot, 0, 0, 1); + if ((rot > 45 && rot < 135) || + (rot < -45 && rot > -135)) + { + GLfloat s = MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi); + glScalef (s, 1/s, 1); + } + } + + glOrtho(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi), -1, 1); glTranslatef ((MI_WIDTH(mi) - ss->loading_sw) / 2, (MI_HEIGHT(mi) - ss->loading_sh) / 2, 0); @@ -833,6 +843,8 @@ draw_carousel (ModeInfo *mi) glPushMatrix(); + glRotatef(current_device_rotation(), 0, 0, 1); + /* Run the startup "un-shrink" animation. */ @@ -868,7 +880,6 @@ draw_carousel (ModeInfo *mi) { double x, y, z; gltrackball_rotate (ss->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); /* Tilt the tube up or down by up to 30 degrees */ get_position (ss->rot, &x, &y, &z, !ss->button_down_p); diff --git a/hacks/glx/chessgames.h b/hacks/glx/chessgames.h index a752d4f7..28f5c570 100644 --- a/hacks/glx/chessgames.h +++ b/hacks/glx/chessgames.h @@ -42,7 +42,7 @@ typedef struct { } ChessGame; #define GAMES 7 -ChessGame games[GAMES] = { +static ChessGame games[GAMES] = { /** game 1: diff --git a/hacks/glx/chessmodels.c b/hacks/glx/chessmodels.c index d47895aa..eac7b252 100644 --- a/hacks/glx/chessmodels.c +++ b/hacks/glx/chessmodels.c @@ -63,20 +63,20 @@ #define SETBACKREF 65524 #define BACKREF 65523 -unsigned short classic_pawn_data[] = { +static unsigned short classic_pawn_data[] = { SPIN,16, 350,0,SEAM,350,200,SEAM,250,300,SEAM,250,400,SEAM,150,600,SEAM,100,880, SEAM,180,880,SEAM,100,920,SEAM,200,1160,SEAM,100,1340,0,1340, ENDOFDATA }; -unsigned short classic_rook_data[] = { +static unsigned short classic_rook_data[] = { SPIN,16, 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, ENDOFDATA }; -unsigned short classic_knight_data[] = { +static unsigned short classic_knight_data[] = { SPIN,16, 410,0,SEAM,410,200,SEAM,200,360,SEAM,200,480,260,580, @@ -161,7 +161,7 @@ unsigned short classic_knight_data[] = { ENDOFDATA }; -unsigned short classic_bishop_data[] = { +static unsigned short classic_bishop_data[] = { SPIN,16, 400,0,SEAM,400,200,SEAM,250,300,SEAM,250,400,SEAM,150,700,SEAM,120,940, SEAM,250,940,SEAM,170,1100,SEAM,170,1220,SEAM,220,1320,SEAM,220,1480, @@ -169,7 +169,7 @@ unsigned short classic_bishop_data[] = { ENDOFDATA }; -unsigned short classic_queen_data[] = { +static unsigned short classic_queen_data[] = { SPIN,16, 480,0,SEAM,480,220,SEAM,340,400,SEAM,340,500,SEAM,180,800,SEAM,140,1180, SEAM,290,1180,SEAM,180,1360,SEAM,180,1520,SEAM,200,1780,SEAM,270,1920, @@ -178,7 +178,7 @@ unsigned short classic_queen_data[] = { ENDOFDATA }; -unsigned short classic_king_data[] = { +static unsigned short classic_king_data[] = { SPIN,16, 500,0,SEAM,500,200,SEAM,350,300,SEAM,350,460,SEAM,200,760,SEAM,140,1260, SEAM,300,1260,SEAM,200,1460,SEAM,200,1560,SEAM,280,1910,SEAM,160,1970, @@ -205,7 +205,7 @@ unsigned short classic_king_data[] = { ENDOFDATA }; -unsigned short knight_data[] = { +static unsigned short knight_data[] = { VERTICES, SETBACKREF,0, 7910,8863,0, 7790,8863,1326, 7433,8863,2611, 6850,8863,3817, 6059,8863,4907, 5084,8863,5847, 3955,8863,6611, 2705,8863,7173, 1373,8863,7517, 0,8863,7633, -1373,8863,7517, @@ -1016,7 +1016,7 @@ unsigned short knight_data[] = { ENDOFDATA }; -unsigned short bishop_data[] = { +static unsigned short bishop_data[] = { VERTICES, SETBACKREF,0, 5233,26960,0, 5154,26960,909, 4918,26960,1790, 4532,26960,2617, 4009,26960,3364, 3364,26960,4009, 2617,26960,4532, 1790,26960,4918, 909,26960,5154, 0,26833,5233, -909,26960,5154, @@ -1109,7 +1109,7 @@ unsigned short bishop_data[] = { ENDOFDATA }; -unsigned short king_data[] = { +static unsigned short king_data[] = { SPIN,20, 11378,0,11378,856,SEAM,10928,1152, 11302,1684,11302,2209,11065,2684, @@ -1165,7 +1165,7 @@ unsigned short king_data[] = { ENDOFDATA }; -unsigned short queen_data[] = { +static unsigned short queen_data[] = { SPIN,24, 11092,0,11092,914,SEAM,10653,1284, 11018,1798,11018,2358,10787,2866, @@ -1185,7 +1185,7 @@ unsigned short queen_data[] = { ENDOFDATA }; -unsigned short pawn_data[] = { +static unsigned short pawn_data[] = { SPIN,16, 7395,0,7395,609, SEAM,7102,910,7345,1199,7345,1572,7191,1910, @@ -1200,7 +1200,7 @@ unsigned short pawn_data[] = { ENDOFDATA }; -unsigned short rook_data[] = { +static unsigned short rook_data[] = { SPIN,20, 9374,0,9374,756,SEAM,9003,1062,9311,1487, 9311,1951,9116,2371,8521,3083,6701,5807,SEAM,6009,7595, @@ -1268,7 +1268,8 @@ unsigned short rook_data[] = { static double piece_size; -static int enumerate_ring_vertices( int steps, unsigned short *data, void *h, +static int +enumerate_ring_vertices( int steps, unsigned short *data, void *h, void (*process_vertex)(void *h,double x,double y,double z)) { int patlen = 1,i; @@ -1293,7 +1294,8 @@ static int enumerate_ring_vertices( int steps, unsigned short *data, void *h, return pts + patlen * 2 - data; } -static void enumerate_vertices( unsigned short *data, void *h, +static void +enumerate_vertices( unsigned short *data, void *h, void (*process_vertex)(void *h,double x,double y,double z)) { while(1) { @@ -1368,7 +1370,8 @@ static void enumerate_vertices( unsigned short *data, void *h, } } -static void enumerate_ring_faces( int basevertex, int steps, +static void +enumerate_ring_faces( int basevertex, int steps, int prevbase, int prevsteps, void *h, int *count_ret, void (*process_face)(void *h,int v1,int v2,int v3,int v4)) { @@ -1415,7 +1418,8 @@ static void enumerate_ring_faces( int basevertex, int steps, } } -static void enumerate_faces( unsigned short *data, void *h, int *count_ret, +static void +enumerate_faces( unsigned short *data, void *h, int *count_ret, void (*process_face)(void *h,int v1,int v2,int v3,int v4)) { int basevertex = 0, startofvertices = 0; @@ -1546,7 +1550,8 @@ static void enumerate_faces( unsigned short *data, void *h, int *count_ret, } } -static void normalize( float v[3]) { +static void +normalize( float v[3]) { float d = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); if( d == 0.0) { @@ -1562,7 +1567,8 @@ static void normalize( float v[3]) { v[2] /= d; } -static void normcrossprod( float v1[3], float v2[3], float out[3]) +static void +normcrossprod( float v1[3], float v2[3], float out[3]) { out[0] = v1[1] * v2[2] - v1[2] * v2[1]; out[1] = v1[2] * v2[0] - v1[0] * v2[2]; @@ -1580,16 +1586,18 @@ static void normcrossprod( float v1[3], float v2[3], float out[3]) (v1)[1] += (v2)[1], \ (v1)[2] += (v2)[2]) -int numverts; -float *vertices; -float *normals; +static int numverts; +static float *vertices; +static float *normals; -static void count_vertex( void *dummy, double x, double y, double z) +static void +count_vertex( void *dummy, double x, double y, double z) { numverts++; } -static void add_normal( void *dummy, int v1, int v2, int v3, int v4) +static void +add_normal( void *dummy, int v1, int v2, int v3, int v4) { float surfnormal[3],d1[3],d2[3]; @@ -1620,7 +1628,8 @@ static void add_normal( void *dummy, int v1, int v2, int v3, int v4) } } -static void collect_vertex( void *curvert, double x, double y, double z) +static void +collect_vertex( void *curvert, double x, double y, double z) { (*(float**)curvert)[0] = x; (*(float**)curvert)[1] = y; @@ -1628,7 +1637,8 @@ static void collect_vertex( void *curvert, double x, double y, double z) (*(float**)curvert) += 3; } -static void draw_face( void *dummy, int v1, int v2, int v3, int v4) +static void +draw_face( void *dummy, int v1, int v2, int v3, int v4) { glBegin( v4 == -1 ? GL_TRIANGLES : GL_QUADS); glNormal3f( normals[v1*3], normals[v1*3+1], normals[v1*3+2]); @@ -1644,7 +1654,8 @@ static void draw_face( void *dummy, int v1, int v2, int v3, int v4) glEnd(); } -static int draw_piece( unsigned short *piece_data) +static int +draw_piece( unsigned short *piece_data) { int i; float *curvert; @@ -1685,7 +1696,7 @@ static int draw_piece( unsigned short *piece_data) return count; } -void gen_model_lists( int classic, int poly_count[PIECES]) { +void chessmodels_gen_lists( int classic, int poly_count[PIECES]) { Bool queen_only_p = classic < 0; if (classic < 0) classic = 0; diff --git a/hacks/glx/chessmodels.h b/hacks/glx/chessmodels.h index 87a26a52..6e41e224 100644 --- a/hacks/glx/chessmodels.h +++ b/hacks/glx/chessmodels.h @@ -40,5 +40,5 @@ #define BROOK 12 #define BPAWN 13 -extern void gen_model_lists( int classic, int poly_count[PIECES]); +extern void chessmodels_gen_lists( int classic, int poly_count[PIECES]); diff --git a/hacks/glx/companion.c b/hacks/glx/companion.c index 3dc86d83..d0c84ed0 100644 --- a/hacks/glx/companion.c +++ b/hacks/glx/companion.c @@ -575,8 +575,8 @@ draw_cube (ModeInfo *mi) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); - gltrackball_rotate (bp->trackball); glRotatef(current_device_rotation(), 0, 0, 1); + gltrackball_rotate (bp->trackball); glScalef (2, 2, 2); diff --git a/hacks/glx/crackberg.c b/hacks/glx/crackberg.c index c4e925c7..2d8acbd4 100644 --- a/hacks/glx/crackberg.c +++ b/hacks/glx/crackberg.c @@ -131,6 +131,10 @@ struct _cberg_state { double vs0r,vs0g,vs0b, vs1r, vs1g, vs1b, vf0r,vf0g,vf0b, vf1r, vf1g, vf1b; + + Bool button_down_p; + int mouse_x, mouse_y; + struct timeval paused; }; @@ -1297,6 +1301,38 @@ ENTRYPOINT Bool crackberg_handle_event (ModeInfo *mi, XEvent *ev) break; default: return False; } + } else if (ev->xany.type == ButtonPress && + ev->xbutton.button == Button1) { + cberg->button_down_p = True; + cberg->mouse_x = ev->xbutton.x; + cberg->mouse_y = ev->xbutton.y; + cberg->motion_state = MOTION_MANUAL; + cberg->paused.tv_sec = 0; + } else if (ev->xany.type == ButtonRelease && + ev->xbutton.button == Button1) { + cberg->button_down_p = False; + cberg->motion_state = MOTION_AUTO; + /* After mouse-up, don't go back into auto-motion mode for a second, so + that repeated click-and-drag gestures don't fight with auto-motion. */ + gettimeofday(&cberg->paused, NULL); + } else if (ev->xany.type == MotionNotify && + cberg->button_down_p) { + int dx = ev->xmotion.x - cberg->mouse_x; + int dy = ev->xmotion.y - cberg->mouse_y; + cberg->mouse_x = ev->xmotion.x; + cberg->mouse_y = ev->xmotion.y; + cberg->motion_state = MOTION_MANUAL; + + /* Take the larger dimension, since motion_state doesn't scale */ + if (dx > 0 && dx > dy) dy = 0; + if (dx < 0 && dx < dy) dy = 0; + if (dy > 0 && dy > dx) dx = 0; + if (dy < 0 && dy < dx) dx = 0; + + if (dx > 0) cberg->motion_state |= MOTION_LEFT; + else if (dx < 0) cberg->motion_state |= MOTION_RIGHT; + else if (dy > 0) cberg->motion_state |= MOTION_FORW; + else if (dy < 0) cberg->motion_state |= MOTION_BACK; } else return False; return True; @@ -1320,7 +1356,8 @@ ENTRYPOINT void draw_crackberg (ModeInfo *mi) cberg->elapsed = cur_frame - cberg->prev_frame; - if (cberg->motion_state == MOTION_AUTO) { + if (cberg->motion_state == MOTION_AUTO && + cberg->paused.tv_sec < cur_frame_t.tv_sec) { cberg->x += cberg->dx * cberg->elapsed; cberg->y += cberg->dy * cberg->elapsed; /* cberg->z */ diff --git a/hacks/glx/cube21.c b/hacks/glx/cube21.c index d4cd8eb3..5a477bce 100644 --- a/hacks/glx/cube21.c +++ b/hacks/glx/cube21.c @@ -26,7 +26,7 @@ /* TODO: * some simple "solve mode" - * use rotator and trackball + * use rotator */ /*- @@ -46,9 +46,10 @@ "*wireframe: False \n" # define refresh_cube21 0 -# define cube21_handle_event 0 #include "xlockmore.h" +#include "gltrackball.h" + #ifdef USE_GL #define DEF_SPIN "True" @@ -178,6 +179,9 @@ typedef struct { GLfloat texp, texq, posc[6]; GLfloat color_inner[4]; + Bool button_down_p; + trackball_state *trackball; + } cube21_conf; static cube21_conf *cube21 = NULL; @@ -510,6 +514,12 @@ static Bool draw_main(ModeInfo *mi, cube21_conf *cp) else glTranslatef(0, 0, zpos); glScalef(size, size, size); + + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); + gltrackball_rotate (cp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); + glRotatef(cp->xrot, 1.0, 0.0, 0.0); glRotatef(cp->yrot, 0.0, 1.0, 0.0); if(cp->wire) glColor3f(0.7, 0.7, 0.7); @@ -833,6 +843,49 @@ ENTRYPOINT void reshape_cube21(ModeInfo *mi, int width, int height) glClear(GL_COLOR_BUFFER_BIT); } +ENTRYPOINT Bool +cube21_handle_event (ModeInfo *mi, XEvent *event) +{ + cube21_conf *cp = &cube21[MI_SCREEN(mi)]; + + if (event->xany.type == ButtonPress && + event->xbutton.button == Button1) + { + cp->button_down_p = True; + gltrackball_start (cp->trackball, + event->xbutton.x, event->xbutton.y, + MI_WIDTH (mi), MI_HEIGHT (mi)); + return True; + } + else if (event->xany.type == ButtonRelease && + event->xbutton.button == Button1) + { + cp->button_down_p = False; + return True; + } + else if (event->xany.type == ButtonPress && + (event->xbutton.button == Button4 || + event->xbutton.button == Button5 || + event->xbutton.button == Button6 || + event->xbutton.button == Button7)) + { + gltrackball_mousewheel (cp->trackball, event->xbutton.button, 10, + !!event->xbutton.state); + return True; + } + else if (event->xany.type == MotionNotify && + cp->button_down_p) + { + gltrackball_track (cp->trackball, + event->xmotion.x, event->xmotion.y, + MI_WIDTH (mi), MI_HEIGHT (mi)); + return True; + } + + return False; +} + + ENTRYPOINT void release_cube21(ModeInfo *mi) { if (cube21 != NULL) { @@ -858,6 +911,8 @@ ENTRYPOINT void init_cube21(ModeInfo *mi) } cp = &cube21[MI_SCREEN(mi)]; + cp->trackball = gltrackball_init (); + if(!cp->texp) { init_posc(cp); make_texture(cp); diff --git a/hacks/glx/cubenetic.c b/hacks/glx/cubenetic.c index 5e8c3a04..8ae8143f 100644 --- a/hacks/glx/cubenetic.c +++ b/hacks/glx/cubenetic.c @@ -560,7 +560,10 @@ draw_cube (ModeInfo *mi) (y - 0.5) * 6, (z - 0.5) * 15); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (cc->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (cc->rot, &x, &y, &z, !cc->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/cubicgrid.c b/hacks/glx/cubicgrid.c index deb6774c..400af743 100644 --- a/hacks/glx/cubicgrid.c +++ b/hacks/glx/cubicgrid.c @@ -141,7 +141,12 @@ static Bool draw_main(cubicgrid_conf *cp) glTranslatef(0, 0, zpos); glScalef(size/ticks, size/ticks, size/ticks); + + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (cp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); + get_rotation (cp->rot, &x, &y, &z, !cp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); diff --git a/hacks/glx/dangerball.c b/hacks/glx/dangerball.c index 621e70cd..7b709092 100644 --- a/hacks/glx/dangerball.c +++ b/hacks/glx/dangerball.c @@ -336,7 +336,10 @@ draw_ball (ModeInfo *mi) (y - 0.5) * 8, (z - 0.5) * 15); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/dnalogo.c b/hacks/glx/dnalogo.c index 6d04233e..1b192428 100644 --- a/hacks/glx/dnalogo.c +++ b/hacks/glx/dnalogo.c @@ -75,6 +75,12 @@ #ifdef USE_GL /* whole file */ +#ifdef HAVE_JWZGLES +# include "dnapizza.h" +#else +# define HAVE_TESS +#endif + typedef enum { HELIX_IN, HELIX, HELIX_OUT, PIZZA_IN, PIZZA, PIZZA_OUT, @@ -1373,6 +1379,8 @@ make_frame (logo_configuration *dc, int wire) /* Make some pizza. */ +#ifdef HAVE_TESS + typedef struct { GLdouble *points; int i; @@ -1423,12 +1431,13 @@ tess_end_cb (void) glEnd(); } +#endif /* HAVE_TESS */ + static int make_pizza (logo_configuration *dc, int facetted, int wire) { int polys = 0; - int topfaces = (facetted ? 48 : 120); int discfaces = (facetted ? 12 : 120); int npoints = topfaces * 2 + 100; @@ -1440,18 +1449,19 @@ make_pizza (logo_configuration *dc, int facetted, int wire) GLfloat thick2 = (dc->gasket_thickness / dc->gasket_size) / 4; GLfloat th, x, y, s; int i, j, k; - tess_out TO, *to = &TO; - GLUtesselator *tess = gluNewTess(); int endpoints; int endedge1; +# ifdef HAVE_TESS + tess_out TO, *to = &TO; + GLUtesselator *tess = gluNewTess(); + to->points = (GLdouble *) calloc (topfaces * 20, sizeof(GLdouble)); to->i = 0; - -# ifndef _GLUfuncptr -# define _GLUfuncptr void(*)(void) -# endif +# ifndef _GLUfuncptr +# define _GLUfuncptr void(*)(void) +# endif gluTessCallback(tess,GLU_TESS_BEGIN, (_GLUfuncptr)tess_begin_cb); gluTessCallback(tess,GLU_TESS_VERTEX, (_GLUfuncptr)glVertex3dv); @@ -1462,6 +1472,8 @@ make_pizza (logo_configuration *dc, int facetted, int wire) gluTessProperty (tess, GLU_TESS_BOUNDARY_ONLY, wire); gluTessProperty (tess,GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); +# endif /* HAVE_TESS */ + glPushMatrix(); s = 1.9; @@ -1546,6 +1558,7 @@ make_pizza (logo_configuration *dc, int facetted, int wire) y = p[1]; polys++; } + do_normal (points[0], points[1], -thick2, points[0], points[1], thick2, x, y, thick2); @@ -1556,6 +1569,21 @@ make_pizza (logo_configuration *dc, int facetted, int wire) polys++; glEnd(); +# ifndef HAVE_TESS + if (wire) + { + /* Outline of slice */ + glBegin (GL_LINE_LOOP); + for (i = 0; i < endpoints; i++) + glVertex3f (points[i*3], points[i*3+1], -thick2); + glEnd(); + glBegin (GL_LINE_LOOP); + for (i = 0; i < endpoints; i++) + glVertex3f (points[i*3], points[i*3+1], thick2); + glEnd(); + } +# endif /* HAVE_TESS */ + /* Compute the holes */ step = M_PI * 2 / discfaces; for (k = 0; k < nholes; k++) @@ -1583,6 +1611,7 @@ make_pizza (logo_configuration *dc, int facetted, int wire) for (k = 0; k < nholes; k++) { GLdouble *p = holes + (discfaces * 3 * k); + glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < discfaces; i++) { @@ -1599,8 +1628,23 @@ make_pizza (logo_configuration *dc, int facetted, int wire) glVertex3f (p[0], p[1], thick2); polys++; glEnd(); +# ifndef HAVE_TESS + if (wire) + { + /* Outline of holes */ + glBegin (GL_LINE_LOOP); + for (i = 0; i < discfaces; i++) + glVertex3f (p[i*3], p[i*3+1], -thick2); + glEnd(); + glBegin (GL_LINE_LOOP); + for (i = 0; i < discfaces; i++) + glVertex3f (p[i*3], p[i*3+1], thick2); + glEnd(); + } +# endif /* !HAVE_TESS */ } +# ifdef HAVE_TESS glTranslatef (0, 0, -thick2); for (y = 0; y <= 1; y++) { @@ -1640,8 +1684,32 @@ make_pizza (logo_configuration *dc, int facetted, int wire) gluTessEndPolygon (tess); } + glTranslatef (0, 0, -thick2); +# else /* !HAVE_TESS */ + if (! wire) + { + glDisableClientState (GL_COLOR_ARRAY); + glDisableClientState (GL_NORMAL_ARRAY); + glDisableClientState (GL_TEXTURE_COORD_ARRAY); + glEnableClientState (GL_VERTEX_ARRAY); + glVertexPointer (3, GL_FLOAT, 0, dnapizza_triangles); + + glTranslatef(0, 0, thick2); + glNormal3f (0, 0, 1); + glFrontFace (GL_CW); + glDrawArrays (GL_TRIANGLES, 0, countof (dnapizza_triangles) / 3); + + glTranslatef(0, 0, -thick2*2); + glNormal3f (0, 0, -1); + glFrontFace (GL_CCW); + glDrawArrays (GL_TRIANGLES, 0, countof (dnapizza_triangles) / 3); + + glTranslatef(0, 0, thick2); + } +# endif /* !HAVE_TESS */ + /* Compute the crust */ @@ -1748,10 +1816,13 @@ make_pizza (logo_configuration *dc, int facetted, int wire) glEnd(); } +# ifdef HAVE_TESS gluDeleteTess (tess); + free (to->points); +# endif /* HAVE_TESS */ + free (points); free (holes); - free (to->points); glPopMatrix(); @@ -2150,8 +2221,6 @@ draw_logo (ModeInfo *mi) mi->polygon_count = 0; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(dc->glx_context)); - glRotatef(current_device_rotation(), 0, 0, 1); - if (!wire && dc->wire_overlay == 0 && (random() % (int) (PROBABILITY_SCALE / 0.2)) == 0) @@ -2232,10 +2301,15 @@ draw_logo (ModeInfo *mi) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); + glRotatef(current_device_rotation(), 0, 0, 1); { GLfloat scale = 0; glScalef(3, 3, 3); +# ifdef USE_IPHONE + glScalef (0.7, 0.7, 0.7); /* make room for the frame */ +# endif + glColor3f(dc->color[0], dc->color[1], dc->color[2]); /* Draw frame before trackball rotation */ @@ -2253,6 +2327,7 @@ draw_logo (ModeInfo *mi) glScalef (1, scale, scale); if (wire) { + glDisable (GL_LIGHTING); glCallList (dc->frame_list_wire); mi->polygon_count += dc->polys[6]; } @@ -2260,6 +2335,7 @@ draw_logo (ModeInfo *mi) { glCallList (dc->frame_list); glDisable (GL_LIGHTING); + glColor3fv (dc->color); glCallList (dc->frame_list_wire); mi->polygon_count += dc->polys[6]; if (!wire) glEnable (GL_LIGHTING); @@ -2299,6 +2375,7 @@ draw_logo (ModeInfo *mi) if (wire) { + glDisable (GL_LIGHTING); glCallList (dc->gasket_list_wire); mi->polygon_count += dc->polys[4]; } @@ -2306,9 +2383,11 @@ draw_logo (ModeInfo *mi) { glCallList (dc->gasket_list); glDisable (GL_LIGHTING); + glColor3fv (dc->color); glCallList (dc->gasket_list_wire); mi->polygon_count += dc->polys[4]; if (!wire) glEnable (GL_LIGHTING); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, gcolor); } else { @@ -2338,6 +2417,7 @@ draw_logo (ModeInfo *mi) if (wire) { + glDisable (GL_LIGHTING); if (pizza_p) glCallList (dc->pizza_list_wire); else @@ -2352,6 +2432,7 @@ draw_logo (ModeInfo *mi) glCallList (dc->helix_list_facetted); glDisable (GL_LIGHTING); + glColor3fv (dc->color); if (pizza_p) glCallList (dc->pizza_list_wire); @@ -2381,6 +2462,6 @@ draw_logo (ModeInfo *mi) glXSwapBuffers(dpy, window); } -XSCREENSAVER_MODULE_2 ("DNAlogo", dnalogo, logo) +XSCREENSAVER_MODULE_2 ("DNALogo", dnalogo, logo) #endif /* USE_GL */ diff --git a/hacks/glx/dnapizza.h b/hacks/glx/dnapizza.h new file mode 100644 index 00000000..6dd48b96 --- /dev/null +++ b/hacks/glx/dnapizza.h @@ -0,0 +1,122 @@ +/* DNA Pizza Logo, Copyright (c) 2011-2012 Jamie Zawinski + + Since GLUtesselator doesn't exist in the iOS build, the slice shape + of the DNA Pizza logo is hardcoded there, instead of being generated. + (These vertexes were generated by GLUtesselator and saved.) + */ + +static const GLfloat dnapizza_triangles[]={ + 0.315,0.213301,0, 0.296699,0.195,0, 0.309,0.455,0, + 0.296699,0.195,0, 0.29,0.17,0, 0.309,0.455,0, + 0.309,0.455,0, 0.29,0.17,0, 0.26,0.452,0, + 0.29,0.17,0, 0.23,0.042,0, 0.26,0.452,0, + 0.26,0.452,0, 0.23,0.042,0, 0.216,0.293,0, + 0.23,0.042,0, 0.21,0,0, 0.216,0.293,0, + 0.216,0.293,0, 0.21,0,0, 0.149,0.178,0, + 0.21,0,0, 0.102,0.178,0, 0.149,0.178,0, + 0.376,0.572,0, 0.353,0.613,0, 0.411,0.68402,0, + 0.376,0.572,0, 0.411,0.68402,0, 0.383301,0.195,0, + 0.376,0.572,0, 0.383301,0.195,0, 0.365,0.213301,0, + 0.376,0.572,0, 0.365,0.213301,0, 0.34,0.22,0, + 0.376,0.572,0, 0.34,0.22,0, 0.315,0.213301,0, + 0.376,0.572,0, 0.315,0.213301,0, 0.309,0.455,0, + 0.39,0.17,0, 0.383301,0.195,0, 0.411,0.68402,0, + 0.39,0.17,0, 0.411,0.68402,0, 0.48,0.17,0, + 0.39,0.17,0, 0.48,0.17,0, 0.488039,0.14,0, + 0.39,0.17,0, 0.488039,0.14,0, 0.51,0.118038,0, + 0.39,0.17,0, 0.51,0.118038,0, 0.616,0.042,0, + 0.39,0.17,0, 0.616,0.042,0, 0.383301,0.145,0, + 0.798,0,0, 0.641,0,0, 0.645595,0.469053,0, + 0.798,0,0, 0.645595,0.469053,0, 0.653683,0.457714,0, + 0.798,0,0, 0.653683,0.457714,0, 0.661572,0.446236,0, + 0.798,0,0, 0.661572,0.446236,0, 0.669259,0.434622,0, + 0.798,0,0, 0.669259,0.434622,0, 0.676742,0.422876,0, + 0.798,0,0, 0.676742,0.422876,0, 0.68402,0.411,0, + 0.798,0,0, 0.68402,0.411,0, 0.691088,0.399,0, + 0.798,0,0, 0.691088,0.399,0, 0.697947,0.386878,0, + 0.798,0,0, 0.697947,0.386878,0, 0.704592,0.374638,0, + 0.798,0,0, 0.704592,0.374638,0, 0.711023,0.362284,0, + 0.798,0,0, 0.711023,0.362284,0, 0.717238,0.34982,0, + 0.798,0,0, 0.717238,0.34982,0, 0.723234,0.337249,0, + 0.798,0,0, 0.723234,0.337249,0, 0.729009,0.324576,0, + 0.798,0,0, 0.729009,0.324576,0, 0.734563,0.311803,0, + 0.798,0,0, 0.734563,0.311803,0, 0.739893,0.298936,0, + 0.798,0,0, 0.739893,0.298936,0, 0.744997,0.285978,0, + 0.798,0,0, 0.744997,0.285978,0, 0.749875,0.272932,0, + 0.798,0,0, 0.749875,0.272932,0, 0.754524,0.259803,0, + 0.798,0,0, 0.754524,0.259803,0, 0.758943,0.246596,0, + 0.798,0,0, 0.758943,0.246596,0, 0.763131,0.233313,0, + 0.798,0,0, 0.763131,0.233313,0, 0.767087,0.219959,0, + 0.798,0,0, 0.767087,0.219959,0, 0.770809,0.206538,0, + 0.798,0,0, 0.770809,0.206538,0, 0.774296,0.193054,0, + 0.798,0,0, 0.774296,0.193054,0, 0.777547,0.179511,0, + 0.798,0,0, 0.777547,0.179511,0, 0.780562,0.165914,0, + 0.798,0,0, 0.780562,0.165914,0, 0.783338,0.152266,0, + 0.798,0,0, 0.783338,0.152266,0, 0.785877,0.138571,0, + 0.798,0,0, 0.785877,0.138571,0, 0.788175,0.124835,0, + 0.798,0,0, 0.788175,0.124835,0, 0.790234,0.11106,0, + 0.798,0,0, 0.790234,0.11106,0, 0.792052,0.097252,0, + 0.798,0,0, 0.792052,0.097252,0, 0.793628,0.083414,0, + 0.798,0,0, 0.793628,0.083414,0, 0.794963,0.06955,0, + 0.798,0,0, 0.794963,0.06955,0, 0.796056,0.055666,0, + 0.798,0,0, 0.796056,0.055666,0, 0.796906,0.041764,0, + 0.798,0,0, 0.796906,0.041764,0, 0.797514,0.02785,0, + 0.798,0,0, 0.797514,0.02785,0, 0.797878,0.013927,0, + 0.641,0,0, 0.616,0.042,0, 0.620162,0.502198,0, + 0.641,0,0, 0.620162,0.502198,0, 0.628833,0.491298,0, + 0.641,0,0, 0.628833,0.491298,0, 0.637311,0.480248,0, + 0.641,0,0, 0.637311,0.480248,0, 0.645595,0.469053,0, + 0.616,0.042,0, 0.51,0.118038,0, 0.54,0.11,0, + 0.616,0.042,0, 0.54,0.11,0, 0.57,0.118038,0, + 0.616,0.042,0, 0.57,0.118038,0, 0.591962,0.14,0, + 0.616,0.042,0, 0.591962,0.14,0, 0.6,0.17,0, + 0.616,0.042,0, 0.6,0.17,0, 0.601962,0.33,0, + 0.616,0.042,0, 0.601962,0.33,0, 0.61,0.36,0, + 0.616,0.042,0, 0.61,0.36,0, 0.611303,0.512945,0, + 0.616,0.042,0, 0.611303,0.512945,0, 0.620162,0.502198,0, + 0.48,0.17,0, 0.411,0.68402,0, 0.422875,0.676743,0, + 0.48,0.17,0, 0.422875,0.676743,0, 0.434622,0.669259,0, + 0.48,0.17,0, 0.434622,0.669259,0, 0.446236,0.661572,0, + 0.48,0.17,0, 0.446236,0.661572,0, 0.457714,0.653684,0, + 0.48,0.17,0, 0.457714,0.653684,0, 0.469052,0.645596,0, + 0.48,0.17,0, 0.469052,0.645596,0, 0.480248,0.637311,0, + 0.48,0.17,0, 0.480248,0.637311,0, 0.488038,0.2,0, + 0.616,0.042,0, 0.23,0.042,0, 0.315,0.126699,0, + 0.616,0.042,0, 0.315,0.126699,0, 0.34,0.12,0, + 0.616,0.042,0, 0.34,0.12,0, 0.365,0.126699,0, + 0.616,0.042,0, 0.365,0.126699,0, 0.383301,0.145,0, + 0.23,0.042,0, 0.29,0.17,0, 0.296699,0.145,0, + 0.23,0.042,0, 0.296699,0.145,0, 0.315,0.126699,0, + 0.58362,0.544235,0, 0.593029,0.533966,0, 0.601961,0.39,0, + 0.593029,0.533966,0, 0.602258,0.523535,0, 0.601961,0.39,0, + 0.601961,0.39,0, 0.602258,0.523535,0, 0.61,0.36,0, + 0.602258,0.523535,0, 0.611303,0.512945,0, 0.61,0.36,0, + 0.58,0.411962,0, 0.55,0.42,0, 0.554337,0.574033,0, + 0.58,0.411962,0, 0.554337,0.574033,0, 0.564271,0.564271,0, + 0.58,0.411962,0, 0.564271,0.564271,0, 0.574033,0.554338,0, + 0.58,0.411962,0, 0.574033,0.554338,0, 0.58362,0.544235,0, + 0.58,0.411962,0, 0.58362,0.544235,0, 0.601961,0.39,0, + 0.55,0.42,0, 0.52,0.411962,0, 0.523535,0.602258,0, + 0.55,0.42,0, 0.523535,0.602258,0, 0.533966,0.59303,0, + 0.55,0.42,0, 0.533966,0.59303,0, 0.544235,0.58362,0, + 0.55,0.42,0, 0.544235,0.58362,0, 0.554337,0.574033,0, + 0.51,0.221962,0, 0.488038,0.2,0, 0.49,0.36,0, + 0.488038,0.2,0, 0.491298,0.628833,0, 0.49,0.36,0, + 0.49,0.36,0, 0.491298,0.628833,0, 0.498038,0.39,0, + 0.491298,0.628833,0, 0.502197,0.620163,0, 0.498038,0.39,0, + 0.498038,0.39,0, 0.502197,0.620163,0, 0.52,0.411962,0, + 0.502197,0.620163,0, 0.512944,0.611304,0, 0.52,0.411962,0, + 0.52,0.411962,0, 0.512944,0.611304,0, 0.523535,0.602258,0, + 0.49,0.36,0, 0.498039,0.33,0, 0.51,0.221962,0, + 0.498039,0.33,0, 0.52,0.308039,0, 0.51,0.221962,0, + 0.51,0.221962,0, 0.52,0.308039,0, 0.54,0.23,0, + 0.52,0.308039,0, 0.55,0.3,0, 0.54,0.23,0, + 0.54,0.23,0, 0.55,0.3,0, 0.57,0.221962,0, + 0.55,0.3,0, 0.58,0.308039,0, 0.57,0.221962,0, + 0.57,0.221962,0, 0.58,0.308039,0, 0.591962,0.2,0, + 0.58,0.308039,0, 0.601962,0.33,0, 0.591962,0.2,0, + 0.591962,0.2,0, 0.601962,0.33,0, 0.6,0.17,0, + 0.488038,0.2,0, 0.480248,0.637311,0, 0.491298,0.628833,0, + 0.26,0.452,0, 0.216,0.293,0, 0.192,0.332,0, + 0.102,0.178,0, 0.21,0,0, 0,0,0, +}; diff --git a/hacks/glx/endgame.c b/hacks/glx/endgame.c index eabc91c8..e1c83eab 100644 --- a/hacks/glx/endgame.c +++ b/hacks/glx/endgame.c @@ -333,33 +333,42 @@ static void drawMovingPiece(ModeInfo *mi, Chesscreen *cs, int shadow) cs->mpiece = cs->mpiece == PAWN ? QUEEN : BQUEEN; } else if(cs->mpiece % PIECES == KNIGHT) { - GLfloat shine[1]; - GLfloat spec[4]; - GLfloat mult; - glTranslatef(cs->steps < 50 ? cs->from[1] : cs->to[1], 0.0, - cs->steps < 50 ? cs->from[0] : cs->to[0]); - - mult = cs->steps < 10 - ? (1.0 - cs->steps / 10.0) : 100 - cs->steps < 10 - ? (1.0 - (100 - cs->steps) / 10.0) : 0.0; - - shine[0] = mult*shininess[0]; - spec[0] = mult*specular[0]; - spec[1] = mult*specular[1]; - spec[2] = mult*specular[2]; - spec[3] = 1.0; - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shine); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); + /* If there is nothing in the path of a knight, move it by sliding, + just like the other pieces. But if there are any pieces on the + middle two squares in its path, the knight would intersect them, + so in that case, move it in an airborne arc. */ + GLfloat y; + int i, j; + Bool blocked_p = False; + int fromx = MIN(cs->from[1], cs->to[1]); + int fromy = MIN(cs->from[0], cs->to[0]); + int tox = MAX(cs->from[1], cs->to[1]); + int toy = MAX(cs->from[0], cs->to[0]); + if (fromx == tox-2) fromx = tox = fromx+1; + if (fromy == toy-2) fromy = toy = fromy+1; + for (i = fromy; i <= toy; i++) { + for (j = fromx; j <= tox; j++) { + if (cs->game.board[i][j]) { + blocked_p = True; + break; + } + } + } - glColor4f(shadow ? MaterialShadow[0] : cs->colors[cs->mpiece/7][0], - shadow ? MaterialShadow[1] : cs->colors[cs->mpiece/7][1], - shadow ? MaterialShadow[2] : cs->colors[cs->mpiece/7][2], - fabs(49-cs->steps)/49.0); + if (!blocked_p) + goto SLIDE; - glScalef(fabs(49-cs->steps)/49.0, fabs(49-cs->steps)/49.0, fabs(49-cs->steps)/49.0); - } - else + /* Move by hopping. */ + y = 1.5 * sin (M_PI * cs->steps / 100.0); + glTranslatef(cs->from[1]+cs->steps*cs->dx, y, + cs->from[0]+cs->steps*cs->dz); + + } else { + SLIDE: + /* Move by sliding. */ glTranslatef(cs->from[1]+cs->steps*cs->dx, 0.0, cs->from[0]+cs->steps*cs->dz); + } + if(!cs->wire) glEnable(GL_BLEND); @@ -434,15 +443,87 @@ static void drawBoard(ModeInfo *mi, Chesscreen *cs) mi->polygon_count++; } - - /* chop underneath board */ -/* glColor3f(0, 0, 0); */ -/* glNormal3f(0, -1, 0); */ -/* glVertex3f(0, 0, BOARDSIZE); */ -/* glVertex3f(0, 0, 0); */ -/* glVertex3f(BOARDSIZE, 0, 0); */ -/* glVertex3f(BOARDSIZE, 0, BOARDSIZE); */ glEnd(); + + { + GLfloat off = 0.01; + GLfloat w = BOARDSIZE; + GLfloat h = 0.1; + + /* Give the board a slight lip. */ + /* #### oops, normals are wrong here, but you can't tell */ + + glColor3f(0.3, 0.3, 0.3); + glBegin (GL_QUADS); + glVertex3f (0, 0, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, -h, w); + glVertex3f (0, 0, w); + + glVertex3f (0, 0, w); + glVertex3f (0, -h, w); + glVertex3f (w, -h, w); + glVertex3f (w, 0, w); + + glVertex3f (w, 0, w); + glVertex3f (w, -h, w); + glVertex3f (w, -h, 0); + glVertex3f (w, 0, 0); + + glVertex3f (w, 0, 0); + glVertex3f (w, -h, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, 0, 0); + + glVertex3f (0, -h, 0); + glVertex3f (w, -h, 0); + glVertex3f (w, -h, w); + glVertex3f (0, -h, w); + glEnd(); + mi->polygon_count += 4; + + /* Fill in the underside of the board with an invisible black box + to hide the reflections that are not on tiles. Probably there's + a way to do this with stencils instead. + */ + w -= off*2; + h = 5; + + glPushMatrix(); + glTranslatef (off, 0, off); + glDisable(GL_LIGHTING); + glColor3f(0,0,0); + glBegin (GL_QUADS); + glVertex3f (0, 0, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, -h, w); + glVertex3f (0, 0, w); + + glVertex3f (0, 0, w); + glVertex3f (0, -h, w); + glVertex3f (w, -h, w); + glVertex3f (w, 0, w); + + glVertex3f (w, 0, w); + glVertex3f (w, -h, w); + glVertex3f (w, -h, 0); + glVertex3f (w, 0, 0); + + glVertex3f (w, 0, 0); + glVertex3f (w, -h, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, 0, 0); + + glVertex3f (0, -h, 0); + glVertex3f (w, -h, 0); + glVertex3f (w, -h, w); + glVertex3f (0, -h, w); + glEnd(); + mi->polygon_count += 4; + glPopMatrix(); + if (!cs->wire) + glEnable(GL_LIGHTING); + } } static void draw_pieces(ModeInfo *mi, Chesscreen *cs, int wire) @@ -639,11 +720,10 @@ static void display(ModeInfo *mi, Chesscreen *cs) /** setup perspectiv */ glTranslatef(0.0, 0.0, -1.5*BOARDSIZE); glRotatef(30.0, 1.0, 0.0, 0.0); - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate (cs->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); - glRotatef(cs->theta*100, 0.0, 1.0, 0.0); + if (rotate) + glRotatef(cs->theta*100, 0.0, 1.0, 0.0); glTranslatef(-0.5*BOARDSIZE, 0.0, -0.5*BOARDSIZE); /* cs->position[0] = 4.0 + 1.0*-sin(cs->theta*100*M_PI/180.0); */ @@ -799,7 +879,7 @@ ENTRYPOINT void init_chess(ModeInfo *mi) make_piece_texture(cs); make_board_texture(cs); } - gen_model_lists( classic, cs->poly_counts); + chessmodels_gen_lists( classic, cs->poly_counts); if(!cs->wire) { setup_lights(cs); diff --git a/hacks/glx/engine.c b/hacks/glx/engine.c index d83c0e45..bd080313 100644 --- a/hacks/glx/engine.c +++ b/hacks/glx/engine.c @@ -618,6 +618,7 @@ static int display(Engine *e) e->lookat[0], e->lookat[1], e->lookat[2], 0.0, 1.0, 0.0); glPushMatrix(); + glLightfv(GL_LIGHT0, GL_POSITION, lightpos); glLightfv(GL_LIGHT0, GL_SPECULAR, light_sp); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_sp); @@ -627,9 +628,15 @@ static int display(Engine *e) get_position (e->rot, &x, &y, &z, !e->button_down_p); glTranslatef(x*16-9, y*14-7, z*16-10); } + if (spin) { double x, y, z; + + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (e->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); + get_rotation(e->rot, &x, &y, &z, !e->button_down_p); glRotatef(x*ONEREV, 1.0, 0.0, 0.0); glRotatef(y*ONEREV, 0.0, 1.0, 0.0); @@ -983,6 +990,7 @@ ENTRYPOINT void draw_engine(ModeInfo *mi) mi->polygon_count = display(e); + glColor3f (1, 1, 0); if (do_titles) print_gl_string (mi->dpy, # ifdef HAVE_GLBITMAP diff --git a/hacks/glx/flipflop.c b/hacks/glx/flipflop.c index 0d534e53..640f21f7 100644 --- a/hacks/glx/flipflop.c +++ b/hacks/glx/flipflop.c @@ -270,9 +270,7 @@ display(Flipflopcreen *c) /** setup perspectif */ glTranslatef(0.0, 0.0, -c->reldist*board_avg_size); glRotatef(22.5, 1.0, 0.0, 0.0); - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate (c->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); glRotatef(c->theta*100, 0.0, 1.0, 0.0); glTranslatef(-0.5*board_x_size, 0.0, -0.5*board_y_size); /* Center the board */ diff --git a/hacks/glx/flyingtoasters.c b/hacks/glx/flyingtoasters.c index b9915f5a..23217f03 100644 --- a/hacks/glx/flyingtoasters.c +++ b/hacks/glx/flyingtoasters.c @@ -810,10 +810,11 @@ draw_toasters (ModeInfo *mi) glRotatef(current_device_rotation(), 0, 0, 1); glRotatef(bp->view_x, 1, 0, 0); glRotatef(bp->view_y, 0, 1, 0); - glRotatef(-current_device_rotation(), 0, 0, 1); - gltrackball_rotate (bp->user_trackball); - glRotatef(current_device_rotation(), 0, 0, 1); + /* Rotate the scene around a point that's a little deeper in. */ + glTranslatef (0, 0, -50); + gltrackball_rotate (bp->user_trackball); + glTranslatef (0, 0, 50); #if 0 { diff --git a/hacks/glx/gears.c b/hacks/glx/gears.c index 42a9e70b..bc925dd5 100644 --- a/hacks/glx/gears.c +++ b/hacks/glx/gears.c @@ -869,7 +869,10 @@ draw_gears (ModeInfo *mi) (y - 0.5) * 4, (z - 0.5) * 7); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); diff --git a/hacks/glx/gflux.c b/hacks/glx/gflux.c index 80310cc2..f3829b59 100644 --- a/hacks/glx/gflux.c +++ b/hacks/glx/gflux.c @@ -281,7 +281,10 @@ gflux_handle_event (ModeInfo *mi, XEvent *event) static void userRot(gfluxstruct *gp) { + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (gp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); } /* draw the gflux once */ diff --git a/hacks/glx/glcells.c b/hacks/glx/glcells.c index 0ec1af3f..e652048a 100644 --- a/hacks/glx/glcells.c +++ b/hacks/glx/glcells.c @@ -1197,8 +1197,7 @@ reshape_glcells( ModeInfo *mi, int width, int height ) if (st->food) free( st->food ); st->food = (int *)malloc( ((width*height)/16)*sizeof(int) ); - - create_cells( st ); + /* create_cells( st );*/ } ENTRYPOINT void diff --git a/hacks/glx/glknots.c b/hacks/glx/glknots.c index 4738b71d..6bf5ccd9 100644 --- a/hacks/glx/glknots.c +++ b/hacks/glx/glknots.c @@ -416,7 +416,10 @@ draw_knot (ModeInfo *mi) (y - 0.5) * 8, (z - 0.5) * 15); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); diff --git a/hacks/glx/glplanet.c b/hacks/glx/glplanet.c index 21cf1f4d..98e13e8d 100644 --- a/hacks/glx/glplanet.c +++ b/hacks/glx/glplanet.c @@ -589,7 +589,10 @@ draw_planet (ModeInfo * mi) (y - 0.5) * 15, (z - 0.5) * 8); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (gp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); glRotatef (90,1,0,0); diff --git a/hacks/glx/glschool.c b/hacks/glx/glschool.c index 1ef4c130..eb522a03 100644 --- a/hacks/glx/glschool.c +++ b/hacks/glx/glschool.c @@ -126,11 +126,12 @@ reshape_glschool(ModeInfo *mi, int width, int height) glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sc->context)); if (sc->school != (School *)0) { - setBBox(sc->school, -aspect*160, aspect*160, -130, 130, -450, -50.0); + glschool_setBBox(sc->school, -aspect*160, aspect*160, -130, 130, -450, -50.0); glDeleteLists(sc->bboxList, 1); - createBBoxList(&SCHOOL_BBOX(sc->school), &sc->bboxList, wire); + glschool_createBBoxList(&SCHOOL_BBOX(sc->school), + &sc->bboxList, wire); } - reshape(width, height); + glschool_reshape(width, height); } ENTRYPOINT void @@ -162,7 +163,7 @@ init_glschool(ModeInfo *mi) sc->colors, &sc->nColors, False, 0, False); - sc->school = initSchool(NFish, AccLimit, MaxVel, MinVel, DistExp, Momentum, + sc->school = glschool_initSchool(NFish, AccLimit, MaxVel, MinVel, DistExp, Momentum, MinRadius, AvoidFact, MatchFact, CenterFact, TargetFact, DistComp); if (sc->school == (School *)0) { @@ -172,11 +173,12 @@ init_glschool(ModeInfo *mi) reshape_glschool(mi, width, height); - initGLEnv(DoFog); - initFishes(sc->school); - createDrawLists(&SCHOOL_BBOX(sc->school), &sc->bboxList, &sc->goalList, &sc->fishList, - &sc->fish_polys, &sc->box_polys, wire); - computeAccelerations(sc->school); + glschool_initGLEnv(DoFog); + glschool_initFishes(sc->school); + glschool_createDrawLists(&SCHOOL_BBOX(sc->school), + &sc->bboxList, &sc->goalList, &sc->fishList, + &sc->fish_polys, &sc->box_polys, wire); + glschool_computeAccelerations(sc->school); } ENTRYPOINT void @@ -196,17 +198,19 @@ draw_glschool(ModeInfo *mi) mi->polygon_count = 0; if ((sc->goalCounter % GoalChgFreq) == 0) - newGoal(sc->school); + glschool_newGoal(sc->school); sc->goalCounter++; sc->rotCounter++; sc->rotCounter = (sc->rotCounter%360); - applyMovements(sc->school); - drawSchool(sc->colors, sc->school, sc->bboxList, sc->goalList, sc->fishList, sc->rotCounter, sc->drawGoal, sc->drawBBox, - sc->fish_polys, sc->box_polys, - &mi->polygon_count); - computeAccelerations(sc->school); + glschool_applyMovements(sc->school); + glschool_drawSchool(sc->colors, sc->school, sc->bboxList, + sc->goalList, sc->fishList, sc->rotCounter, + sc->drawGoal, sc->drawBBox, + sc->fish_polys, sc->box_polys, + &mi->polygon_count); + glschool_computeAccelerations(sc->school); if (mi->fps_p) do_fps(mi); diff --git a/hacks/glx/glschool_alg.c b/hacks/glx/glschool_alg.c index 5eef4e67..32b4a5f4 100644 --- a/hacks/glx/glschool_alg.c +++ b/hacks/glx/glschool_alg.c @@ -77,7 +77,7 @@ getDifferenceVector(double *v0, double *v1, double *diff) void -initFish(Fish *f, double *mins, double *ranges) +glschool_initFish(Fish *f, double *mins, double *ranges) { int i; @@ -92,7 +92,7 @@ initFish(Fish *f, double *mins, double *ranges) void -initFishes(School *s) +glschool_initFishes(School *s) { int i; Fish *f = (Fish *)0; @@ -103,11 +103,11 @@ initFishes(School *s) Fish *theFishes = SCHOOL_FISHES(s); for(i = 0, f = theFishes; i < nFish; i++, f++) - initFish(f, mins, ranges); + glschool_initFish(f, mins, ranges); } -void +static void applyFishMovements(Fish *f, BBox *bbox, double minVel, double maxVel, double momentum) { int i; @@ -141,7 +141,7 @@ applyFishMovements(Fish *f, BBox *bbox, double minVel, double maxVel, double mom void -applyMovements(School *s) +glschool_applyMovements(School *s) { int i = 0; Fish *f = (Fish *)0; @@ -158,7 +158,7 @@ applyMovements(School *s) School * -initSchool(int nFish, double accLimit, double maxV, double minV, double distExp, double momentum, +glschool_initSchool(int nFish, double accLimit, double maxV, double minV, double distExp, double momentum, double minRadius, double avoidFact, double matchFact, double centerFact, double targetFact, double distComp) { @@ -193,14 +193,14 @@ initSchool(int nFish, double accLimit, double maxV, double minV, double distExp, } void -freeSchool(School *s) +glschool_freeSchool(School *s) { free(SCHOOL_FISHES(s)); free(s); } void -setBBox(School *s, double xMin, double xMax, double yMin, double yMax, double zMin, double zMax) +glschool_setBBox(School *s, double xMin, double xMax, double yMin, double yMax, double zMin, double zMax) { int i; BBox *bbox = &SCHOOL_BBOX(s); @@ -217,7 +217,7 @@ setBBox(School *s, double xMin, double xMax, double yMin, double yMax, double zM void -newGoal(School *s) +glschool_newGoal(School *s) { SCHOOL_IGOAL(s,0) = 0.85*(drand48()-0.5)*SCHOOL_IRANGE(s,0) + SCHOOL_IMID(s,0); SCHOOL_IGOAL(s,1) = 0.40*(drand48()-0.5)*SCHOOL_IRANGE(s,1) + SCHOOL_IMID(s,1); @@ -226,7 +226,7 @@ newGoal(School *s) double -computeNormalAndThetaToPlusZ(double *v, double *xV) +glschool_computeNormalAndThetaToPlusZ(double *v, double *xV) { double x1 = 0.0; double y1 = 0.0; @@ -255,7 +255,7 @@ computeNormalAndThetaToPlusZ(double *v, double *xV) int -computeGroupVectors(School *s, Fish *ref, double *avoidance, double *centroid, double *avgVel) +glschool_computeGroupVectors(School *s, Fish *ref, double *avoidance, double *centroid, double *avgVel) { int i; double dist; @@ -296,7 +296,7 @@ computeGroupVectors(School *s, Fish *ref, double *avoidance, double *centroid, d void -computeAccelerations(School *s) +glschool_computeAccelerations(School *s) { int i; int j; @@ -326,7 +326,7 @@ computeAccelerations(School *s) clearVector(centroid); clearVector(avoidance); clearVector(FISH_ACC(ref)); - neighborCount = computeGroupVectors(s, ref, avoidance, centroid, avgVel); + neighborCount = glschool_computeGroupVectors(s, ref, avoidance, centroid, avgVel); /* avoidanceAccel[] = avoidance[] * AvoidFact */ scaleVector(avoidance, avoidFact); diff --git a/hacks/glx/glschool_alg.h b/hacks/glx/glschool_alg.h index 88f8800e..339e778f 100644 --- a/hacks/glx/glschool_alg.h +++ b/hacks/glx/glschool_alg.h @@ -107,20 +107,20 @@ typedef struct { #define SCHOOL_FISHES(s) ((s)->theFish) #define SCHOOL_IFISH(s,i) ((s)->theFish[i]) -extern void initFishes(School *); -extern void initFish(Fish *, double *, double *); +extern void glschool_initFishes(School *); +extern void glschool_initFish(Fish *, double *, double *); -extern void applyMovements(School *); -extern void applyFishMovements(Fish *, BBox *, double, double, double); +extern void glschool_applyMovements(School *); +/* extern void applyFishMovements(Fish *, BBox *, double, double, double); */ -extern void freeSchool(School *); -extern School *initSchool(int, double, double, double, double, double, double, double, double, double, double, double); +extern void glschool_freeSchool(School *); +extern School *glschool_initSchool(int, double, double, double, double, double, double, double, double, double, double, double); -extern void newGoal(School *); -extern void setBBox(School *, double, double, double, double, double, double); +extern void glschool_newGoal(School *); +extern void glschool_setBBox(School *, double, double, double, double, double, double); -extern void computeAccelerations(School *); -extern double computeNormalAndThetaToPlusZ(double *, double *); -int computeGroupVectors(School *, Fish *, double *, double *, double *); +extern void glschool_computeAccelerations(School *); +extern double glschool_computeNormalAndThetaToPlusZ(double *, double *); +int glschool_computeGroupVectors(School *, Fish *, double *, double *, double *); #endif /* __GLSCHOOL_ALG_H__ */ diff --git a/hacks/glx/glschool_gl.c b/hacks/glx/glschool_gl.c index 3775b109..660580b9 100644 --- a/hacks/glx/glschool_gl.c +++ b/hacks/glx/glschool_gl.c @@ -15,7 +15,7 @@ #include "tube.h" void -drawGoal(double *goal, GLuint goalList) +glschool_drawGoal(double *goal, GLuint goalList) { glColor3f(1.0, 0.0, 0.0); glPushMatrix(); @@ -28,7 +28,7 @@ drawGoal(double *goal, GLuint goalList) } int -drawBoundingBox(BBox *bbox, Bool wire) +glschool_drawBoundingBox(BBox *bbox, Bool wire) { int polys = 0; double xMin = BBOX_XMIN(bbox); @@ -98,18 +98,18 @@ drawBoundingBox(BBox *bbox, Bool wire) } int -createBBoxList(BBox *bbox, GLuint *bboxList, int wire) +glschool_createBBoxList(BBox *bbox, GLuint *bboxList, int wire) { int polys = 0; *bboxList = glGenLists(1); glNewList(*bboxList, GL_COMPILE); - polys = drawBoundingBox(bbox, wire); + polys = glschool_drawBoundingBox(bbox, wire); glEndList(); return polys; } void -createDrawLists(BBox *bbox, GLuint *bboxList, GLuint *goalList, GLuint *fishList, int *fish_polys, int *box_polys, int wire) +glschool_createDrawLists(BBox *bbox, GLuint *bboxList, GLuint *goalList, GLuint *fishList, int *fish_polys, int *box_polys, int wire) { int faces = 16; @@ -117,7 +117,7 @@ createDrawLists(BBox *bbox, GLuint *bboxList, GLuint *goalList, GLuint *fishList *box_polys = 0; *fish_polys = 0; - *box_polys += createBBoxList(bbox, bboxList, wire); + *box_polys += glschool_createBBoxList(bbox, bboxList, wire); *box_polys = 0; *fish_polys = 0; @@ -145,7 +145,7 @@ createDrawLists(BBox *bbox, GLuint *bboxList, GLuint *goalList, GLuint *fishList void -initLights(void) +glschool_initLights(void) { GLfloat amb[4] = {0.1, 0.1, 0.1, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; @@ -165,7 +165,7 @@ initLights(void) } void -initFog() +glschool_initFog(void) { GLfloat fog[4] = {0.0, 0.0, 0.15, 1.0}; @@ -177,7 +177,7 @@ initFog() } void -initGLEnv(Bool doFog) +glschool_initGLEnv(Bool doFog) { GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; @@ -194,12 +194,12 @@ initGLEnv(Bool doFog) glShadeModel(GL_SMOOTH); glEnable(GL_CULL_FACE); - initLights(); - if (doFog) initFog(); + glschool_initLights(); + if (doFog) glschool_initFog(); } void -reshape(int width, int height) +glschool_reshape(int width, int height) { GLfloat h = (GLfloat) width / (GLfloat) height; @@ -214,7 +214,7 @@ reshape(int width, int height) } void -getColorVect(XColor *colors, int index, double *colorVect) +glschool_getColorVect(XColor *colors, int index, double *colorVect) { colorVect[0] = colors[index].red / 65535.0; colorVect[1] = colors[index].green / 65535.0; @@ -222,7 +222,7 @@ getColorVect(XColor *colors, int index, double *colorVect) } void -drawSchool(XColor *colors, School *s, +glschool_drawSchool(XColor *colors, School *s, GLuint bboxList, GLuint goalList, GLuint fishList, int rotCounter, Bool drawGoal_p, Bool drawBBox_p, int fish_polys, int box_polys, unsigned long *polys) @@ -248,16 +248,16 @@ drawSchool(XColor *colors, School *s, *polys += box_polys; } - if (drawGoal_p) drawGoal(SCHOOL_GOAL(s), goalList); + if (drawGoal_p) glschool_drawGoal(SCHOOL_GOAL(s), goalList); for(i = 0, f = theFishes; i < nFish; i++, f++) { - colTheta = computeNormalAndThetaToPlusZ(FISH_AVGVEL(f), xVect); - rotTheta = computeNormalAndThetaToPlusZ(FISH_VEL(f), xVect); + colTheta = glschool_computeNormalAndThetaToPlusZ(FISH_AVGVEL(f), xVect); + rotTheta = glschool_computeNormalAndThetaToPlusZ(FISH_VEL(f), xVect); if (FISH_IAVGVEL(f,2) < 0.0) colTheta = 180.0 - colTheta; if (FISH_VZ(f) < 0.0) rotTheta = 180.0 - rotTheta; - getColorVect(colors, (int)(colTheta+240)%360, colorVect); + glschool_getColorVect(colors, (int)(colTheta+240)%360, colorVect); glColor3f(colorVect[0], colorVect[1], colorVect[2]); glPushMatrix(); diff --git a/hacks/glx/glschool_gl.h b/hacks/glx/glschool_gl.h index 7676a0fd..ac311f7d 100644 --- a/hacks/glx/glschool_gl.h +++ b/hacks/glx/glschool_gl.h @@ -32,16 +32,16 @@ #include "glschool_alg.h" -extern void initFog(void); -extern void initGLEnv(Bool); -extern void initLights(void); -extern void reshape(int, int); -extern void drawGoal(double *, GLuint); -extern void getColorVect(XColor *, int, double *); -extern int drawBoundingBox(BBox *, Bool); -extern int createBBoxList(BBox *, GLuint *, int); -extern void createDrawLists(BBox *, GLuint *, GLuint *, GLuint *, int *, int *, Bool); -extern void drawSchool(XColor *, School *, GLuint, GLuint, GLuint, int, Bool, Bool, +extern void glschool_initFog(void); +extern void glschool_initGLEnv(Bool); +extern void glschool_initLights(void); +extern void glschool_reshape(int, int); +extern void glschool_drawGoal(double *, GLuint); +extern void glschool_getColorVect(XColor *, int, double *); +extern int glschool_drawBoundingBox(BBox *, Bool); +extern int glschool_createBBoxList(BBox *, GLuint *, int); +extern void glschool_createDrawLists(BBox *, GLuint *, GLuint *, GLuint *, int *, int *, Bool); +extern void glschool_drawSchool(XColor *, School *, GLuint, GLuint, GLuint, int, Bool, Bool, int, int, unsigned long *); #endif /* __GLSCHOOL_GL_H__ */ diff --git a/hacks/glx/gltext.c b/hacks/glx/gltext.c index 070a4e33..43d50fb9 100644 --- a/hacks/glx/gltext.c +++ b/hacks/glx/gltext.c @@ -1,4 +1,4 @@ -/* gltext, Copyright (c) 2001-2008 Jamie Zawinski +/* gltext, Copyright (c) 2001-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -30,6 +30,7 @@ #include "xlockmore.h" #include "colors.h" #include "tube.h" +#include "sphere.h" #include "rotator.h" #include "gltrackball.h" #include "textclient.h" @@ -233,6 +234,10 @@ parse_text (ModeInfo *mi) # if defined(_AIX) sprintf(tp->text, "%s\n%s %s.%s", uts.nodename, uts.sysname, uts.version, uts.release); +# elif defined(USE_IPHONE) + /* "My iPhone\n iPhone4,1\n Darwin 11.0.0" */ + sprintf(tp->text, "%s\n%s\n%s %s", + uts.nodename, uts.machine, uts.sysname, uts.release); # elif defined(__APPLE__) /* MacOS X + XDarwin */ { const char *file = @@ -444,14 +449,26 @@ fill_character (GLUTstrokeFont font, int c, Bool wire, int *polysP) # else int smooth = False; # endif + if (j != stroke->num_coords) *polysP += tube (lx, ly, 0, coord->x, coord->y, 0, tube_width, tube_width * 0.15, - TUBE_FACES, smooth, True, wire); + TUBE_FACES, smooth, False, wire); lx = coord->x; ly = coord->y; + + /* Put a sphere at the endpoint of every line segment. Wasteful + on curves like "0" but necessary on corners like "4". */ + if (! wire) + { + glPushMatrix(); + glTranslatef (lx, ly, 0); + glScalef (tube_width, tube_width, tube_width); + *polysP += unit_sphere (TUBE_FACES, TUBE_FACES, wire); + glPopMatrix(); + } } } return (int) (ch->right + tube_width); @@ -586,6 +603,7 @@ draw_text (ModeInfo *mi) glPushMatrix (); glScalef(1.1, 1.1, 1.1); + glRotatef(current_device_rotation(), 0, 0, 1); { double x, y, z; @@ -595,7 +613,6 @@ draw_text (ModeInfo *mi) (z - 0.5) * 8); gltrackball_rotate (tp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); if (face_front_p) { diff --git a/hacks/glx/gltrackball.c b/hacks/glx/gltrackball.c index c0ccaa13..93d4c542 100644 --- a/hacks/glx/gltrackball.c +++ b/hacks/glx/gltrackball.c @@ -29,6 +29,8 @@ #include "trackball.h" #include "gltrackball.h" +extern double current_device_rotation (void); /* Bah, it's in fps.h */ + struct trackball_state { int x, y; GLfloat q[4]; @@ -55,6 +57,7 @@ gltrackball_reset (trackball_state *ts) trackball (ts->q, 0, 0, 0, 0); } + /* Begin tracking the mouse: Call this when the mouse button goes down. x and y are the mouse position relative to the window. w and h are the size of the window. diff --git a/hacks/glx/glxfonts.c b/hacks/glx/glxfonts.c index 669a8422..db068d77 100644 --- a/hacks/glx/glxfonts.c +++ b/hacks/glx/glxfonts.c @@ -59,6 +59,10 @@ extern char *progname; */ +#undef countof +#define countof(x) (sizeof((x))/sizeof((*x))) + + /* Width (and optionally height) of the string in pixels. */ int @@ -413,6 +417,7 @@ print_gl_string (Display *dpy, int tabs = cw * 7; int lines = 0; const char *c; + GLfloat color[4]; # ifdef HAVE_GLBITMAP /* Sadly, this causes a stall of the graphics pipeline (as would the @@ -445,6 +450,8 @@ print_gl_string (Display *dpy, glGetIntegerv (GL_BLEND_DST, &oblend); # endif /* !HAVE_GLBITMAP */ + glGetFloatv (GL_CURRENT_COLOR, color); + for (c = string; *c; c++) if (*c == '\n') lines++; @@ -468,6 +475,7 @@ print_gl_string (Display *dpy, glDisable (GL_LIGHTING); + if (!in_scene_p) glDisable (GL_DEPTH_TEST); glDisable (GL_CULL_FACE); @@ -531,6 +539,11 @@ print_gl_string (Display *dpy, check_gl_error ("glOrtho"); # endif + /* Let's always dropshadow the FPS and Title text. */ + if (! in_scene_p) + clear_background_p = True; + +#if 0 if (clear_background_p) { int w, h; @@ -554,6 +567,8 @@ print_gl_string (Display *dpy, # endif /* !HAVE_GLBITMAP */ glColor3f (1, 1, 1); } +#endif /* 0 */ + /* draw the text */ @@ -583,23 +598,43 @@ print_gl_string (Display *dpy, } else { + /* outline font in black */ + const XPoint offsets[] = {{ -1, -1 }, + { -1, 1 }, + { 1, 1 }, + { 1, -1 }, + { 0, 0 }}; + int j; +# ifndef HAVE_GLBITMAP + char s[2]; + s[0] = c; + s[1] = 0; +# endif /* !HAVE_GLBITMAP */ + + glColor3f (0, 0, 0); + for (j = 0; j < countof(offsets); j++) + { + if (! clear_background_p) + j = countof(offsets)-1; + if (offsets[j].x == 0) + glColor4fv (color); + +# ifdef HAVE_GLBITMAP + glRasterPos2f (x2 + offsets[j].x, y + offsets[j].y); + glCallList (font_dlist + (int)(c)); +# else /* !HAVE_GLBITMAP */ + glPushMatrix(); + glTranslatef (x2 + offsets[j].x, y + offsets[j].y, 0); + print_texture_string (font_data, s); + glPopMatrix(); +# endif /* !HAVE_GLBITMAP */ + } # ifdef HAVE_GLBITMAP - glRasterPos2f (x2, y); - glCallList (font_dlist + (int)(c)); x2 += (font->per_char ? font->per_char[c - font->min_char_or_byte2].width : font->min_bounds.width); # else /* !HAVE_GLBITMAP */ - glPushMatrix(); - glTranslatef (x2, y, 0); - { - char s[2]; - s[0] = c; - s[1] = 0; - print_texture_string (font_data, s); - x2 += texture_string_width (font_data, s, 0); - } - glPopMatrix(); + x2 += texture_string_width (font_data, s, 0); # endif /* !HAVE_GLBITMAP */ } } diff --git a/hacks/glx/hilbert.c b/hacks/glx/hilbert.c index c9ee163f..d8966f45 100644 --- a/hacks/glx/hilbert.c +++ b/hacks/glx/hilbert.c @@ -1017,7 +1017,10 @@ draw_hilbert (ModeInfo *mi) (y - 0.5) * 8, (z - 0.5) * 15); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); diff --git a/hacks/glx/jigglypuff.c b/hacks/glx/jigglypuff.c index 67c2c4b1..63b83294 100644 --- a/hacks/glx/jigglypuff.c +++ b/hacks/glx/jigglypuff.c @@ -990,7 +990,11 @@ ENTRYPOINT void draw_jigglypuff(ModeInfo *mi) js->axis -= 2*M_PI; } } + + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate(js->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); if(js->color_style == COLOR_STYLE_CYCLE) { int i; diff --git a/hacks/glx/jigsaw.c b/hacks/glx/jigsaw.c index 9d1371a1..3ffd08d6 100644 --- a/hacks/glx/jigsaw.c +++ b/hacks/glx/jigsaw.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1997-2008 Jamie Zawinski +/* xscreensaver, Copyright (c) 1997-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -48,8 +48,10 @@ #define DEF_WOBBLE "True" #define DEF_DEBUG "False" +#define DEF_FONT "-*-helvetica-bold-r-normal-*-240-*" #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ + "*font: " DEF_FONT"\n" \ "*wireframe: False \n" \ "*desktopGrabber: xscreensaver-getimage -no-desktop %s\n" \ "*grabDesktopImages: False \n" \ @@ -69,16 +71,19 @@ # include #endif -#ifdef HAVE_JWZGLES -# include "jwzgles.h" -#endif /* HAVE_JWZGLES */ - #include "xlockmore.h" #include "rotator.h" #include "gltrackball.h" #include "spline.h" #include "normals.h" #include "grab-ximage.h" +#include "texfont.h" + +#ifdef HAVE_JWZGLES +# include "jwzgles.h" +#else /* !HAVE_JWZGLES */ +# define HAVE_TESS +#endif /* !HAVE_JWZGLES */ #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) @@ -122,12 +127,15 @@ struct jigsaw_configuration { trackball_state *trackball; rotator *rot; Bool button_down_p; + texture_font_data *texfont; + GLuint loading_dlist; int puzzle_width; int puzzle_height; puzzle_piece *puzzle; - enum { PUZZLE_LOADING, + enum { PUZZLE_LOADING_MSG, + PUZZLE_LOADING, PUZZLE_UNSCATTER, PUZZLE_SOLVE, PUZZLE_SCATTER } state; @@ -211,6 +219,8 @@ make_puzzle_curve (int pixels) } +#ifdef HAVE_TESS + static void tess_error_cb (GLenum errorCode) { @@ -260,6 +270,149 @@ tess_vertex_cb (void *vertex_data, void *closure) glVertex3d (x, y, z); } +#else /* HAVE_TESS */ + +/* Writes triangles into the array of floats. + Returns the number of floats written (triangles * 9). + */ +static int +make_piece_eighth (jigsaw_configuration *jc, const spline *s, + int resolution, int type, GLfloat *out, + Bool flip_x, Bool flip_y, Bool rotate_p) +{ + GLfloat *oout = out; + int cx = resolution/2; + int cy = resolution/2; + int np = (s->n_points / 2) + 1; + int last_x = -999999, last_y = -999999; + Bool inflected = False; + int i; + + if (type == FLAT) + { + *out++ = cx; + *out++ = 0; + *out++ = 0; + + *out++ = cx; + *out++ = cy; + *out++ = 0; + + *out++ = 0; + *out++ = 0; + *out++ = 0; + + goto END; + } + + for (i = (type == IN ? np-1 : 0); + (type == IN ? i >= 0 : i < np); + i += (type == IN ? -1 : 1)) + { + int x = s->points[i].x; + int y = s->points[i].y; + + if (type == IN) + y = -y; + + if (last_x != -999999) + { + if (!inflected && + (type == IN + ? x >= last_x + : x < last_x)) + { + inflected = True; + + *out++ = cx; + *out++ = cy; + *out++ = 0; + + *out++ = last_x; + *out++ = last_y; + *out++ = 0; + + if (type == IN) + { + cx = 0; + cy = 0; + } + else + { + cy = y; + } + + *out++ = cx; + *out++ = cy; + *out++ = 0; + } + + *out++ = cx; + *out++ = cy; + *out++ = 0; + + *out++ = last_x; + *out++ = last_y; + *out++ = 0; + + *out++ = x; + *out++ = y; + *out++ = 0; + } + + last_x = x; + last_y = y; + } + END: + + { + int count = out - oout; + Bool cw_p; + + if (flip_x) + for (i = 0; i < count; i += 3) + oout[i] = resolution - oout[i]; + + if (flip_y) + for (i = 0; i < count; i += 3) + oout[i+1] = resolution - oout[i+1]; + + cw_p = (type == IN); + if (flip_x) cw_p = !cw_p; + if (flip_y) cw_p = !cw_p; + + if (cw_p) + for (i = 0; i < count; i += 9) + { + GLfloat x1 = oout[i+0]; + GLfloat y1 = oout[i+1]; + GLfloat x2 = oout[i+3]; + GLfloat y2 = oout[i+4]; + GLfloat x3 = oout[i+6]; + GLfloat y3 = oout[i+7]; + oout[i+0] = x2; + oout[i+1] = y2; + oout[i+3] = x1; + oout[i+4] = y1; + oout[i+6] = x3; + oout[i+7] = y3; + } + + if (rotate_p) + for (i = 0; i < count; i += 3) + { + GLfloat x = oout[i]; + GLfloat y = oout[i+1]; + oout[i] = resolution - y; + oout[i+1] = x; + } + + return count; + } +} + +#endif /* !HAVE_TESS */ + /* Draws a puzzle piece. The top/right/bottom/left_type args @@ -331,11 +484,11 @@ draw_piece (jigsaw_configuration *jc, puzzle_piece *p, } } - free_spline (s); - - { GLfloat s = 1.0 / resolution; glScalef (s, s, s); } + { GLfloat ss = 1.0 / resolution; glScalef (ss, ss, ss); } +# ifndef HAVE_JWZGLES glPolygonMode (GL_FRONT_AND_BACK, wire ? GL_LINE : GL_FILL); +# endif if (wire) { @@ -345,9 +498,11 @@ draw_piece (jigsaw_configuration *jc, puzzle_piece *p, } else { -# ifndef _GLUfuncptr -# define _GLUfuncptr void(*)(void) -# endif +# ifdef HAVE_TESS + +# ifndef _GLUfuncptr +# define _GLUfuncptr void(*)(void) +# endif GLUtesselator *tess = gluNewTess(); gluTessCallback(tess, GLU_TESS_BEGIN, (_GLUfuncptr)glBegin); gluTessCallback(tess, GLU_TESS_VERTEX_DATA,(_GLUfuncptr)tess_vertex_cb); @@ -389,9 +544,104 @@ draw_piece (jigsaw_configuration *jc, puzzle_piece *p, gluTessEndContour(tess); gluTessEndPolygon(tess); gluDeleteTess(tess); + + /* Put it back */ + for (i = 0; i < o; i += 3) + { + GLdouble *p = pts + i; + p[2] = -p[2]; + } + +# else /* !HAVE_TESS */ + + GLfloat *tri = (GLfloat *) + (GLfloat *) malloc (s->n_points * 4 * 3 * 3 * sizeof(*pts)); + GLfloat *otri = tri; + int count; + GLdouble zz; + + tri += make_piece_eighth (jc, s, resolution, top_type, tri, 0, 0, 0); + tri += make_piece_eighth (jc, s, resolution, top_type, tri, 1, 0, 0); + tri += make_piece_eighth (jc, s, resolution, left_type, tri, 0, 1, 1); + tri += make_piece_eighth (jc, s, resolution, left_type, tri, 1, 1, 1); + tri += make_piece_eighth (jc, s, resolution, bottom_type, tri, 0, 1, 0); + tri += make_piece_eighth (jc, s, resolution, bottom_type, tri, 1, 1, 0); + tri += make_piece_eighth (jc, s, resolution, right_type, tri, 0, 0, 1); + tri += make_piece_eighth (jc, s, resolution, right_type, tri, 1, 0, 1); + count = (tri - otri) / 9; + + if (! wire) + { + glEnable (GL_TEXTURE_2D); + glEnable (GL_BLEND); + glEnable (GL_LIGHTING); + glBindTexture(GL_TEXTURE_2D, jc->texid); + } + + for (zz = z; zz >= -z; zz -= 2*z) + { + int i; + glFrontFace (zz > 0 ? GL_CCW : GL_CW); + glNormal3f (0, 0, (zz > 0 ? 1 : -1)); + + if (zz < 0) + glDisable (GL_TEXTURE_2D); /* back face */ + + glPushMatrix(); + glTranslatef (0, 0, zz); + + tri = otri; + if (wire) + { + for (i = 0; i < count; i++) + { + glBegin (GL_LINE_LOOP); + glVertex3f (tri[0], tri[1], tri[2]); tri += 3; + glVertex3f (tri[0], tri[1], tri[2]); tri += 3; + glVertex3f (tri[0], tri[1], tri[2]); tri += 3; + glEnd(); + } + } + else + { + GLfloat pw = p->jc->puzzle_width; + GLfloat ph = p->jc->puzzle_height; + GLfloat r = resolution; + + glBegin (GL_TRIANGLES); + for (i = 0; i < count * 3; i++) + { + GLfloat x = *tri++; + GLfloat y = *tri++; + GLfloat z = *tri++; + + /* 0-1 from piece origin */ + GLfloat xx = x / r; + GLfloat yy = y / r; + + /* 0-1 from puzzle origin */ + GLfloat tx = (p->home.x + xx) / pw; + GLfloat ty = (ph - p->home.y - yy) / ph; + + tx = p->jc->tex_x + (tx * p->jc->tex_width); + ty = p->jc->tex_y + (ty * p->jc->tex_height); + + glTexCoord2f (tx, ty); + glVertex3f (x, y, z); + } + glEnd(); + } + + polys += count; + glPopMatrix(); + } + + free (otri); +# endif /* !HAVE_TESS */ } /* side faces */ + glFrontFace (GL_CCW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < o; i += 3) @@ -402,12 +652,12 @@ draw_piece (jigsaw_configuration *jc, puzzle_piece *p, GLdouble *pj = pts + j; GLdouble *pk = pts + k; - do_normal (pj[0], pj[1], -pj[2], - pj[0], pj[1], pj[2], + do_normal (pj[0], pj[1], pj[2], + pj[0], pj[1], -pj[2], pk[0], pk[1], pk[2]); - glVertex3f (p[0], p[1], -p[2]); glVertex3f (p[0], p[1], p[2]); + glVertex3f (p[0], p[1], -p[2]); polys++; } glEnd(); @@ -415,6 +665,8 @@ draw_piece (jigsaw_configuration *jc, puzzle_piece *p, if (! wire) glColor3f (0.3, 0.3, 0.3); + /* outline the edges in gray */ + glDisable (GL_TEXTURE_2D); glDisable (GL_LIGHTING); glLineWidth (jc->line_thickness); @@ -431,6 +683,7 @@ draw_piece (jigsaw_configuration *jc, puzzle_piece *p, glEnd(); polys += o/3; + free_spline (s); free (pts); return polys; @@ -823,8 +1076,14 @@ move_one_piece (ModeInfo *mi) p1->to = p0->current; p1->to.r = proper_rotation (jc, p1, p1->to.x, p1->to.y); - p0->arc_height = 0.5 + frand(3.0); - p1->arc_height = 1.0 + frand(3.0); + /* Try to avoid having them intersect each other in the air. */ + p0->arc_height = 0; + p1->arc_height = 0; + while (fabs (p0->arc_height - p1->arc_height) < 1.5) + { + p0->arc_height = 0.5 + frand(3.0); + p1->arc_height = 1.0 + frand(3.0); + } # define RTILT(V) \ V = 90 - BELLRAND(180); \ @@ -892,6 +1151,91 @@ anim_tick (ModeInfo *mi) } +static void +loading_msg (ModeInfo *mi) +{ + jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); + const char *text = "Loading..."; + int h; + int w = texture_string_width (jc->texfont, text, &h); + + if (wire) return; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + if (! jc->loading_dlist) + { + GLfloat othick = jc->line_thickness; + puzzle_piece P = { 0, }; + P.jc = jc; + jc->loading_dlist = glGenLists (1); + glNewList (jc->loading_dlist, GL_COMPILE); + jc->line_thickness = 1; + draw_piece (jc, &P, + resolution_arg, thickness_arg, + OUT, OUT, IN, OUT, True); + jc->line_thickness = othick; + glEndList(); + } + + glColor3f (0.2, 0.2, 0.4); + + glPushMatrix(); + { + double x, y, z; + get_position (jc->rot, &x, &y, &z, True); + glRotatef (x * 360, 1, 0, 0); + glRotatef (y * 360, 0, 1, 0); + glRotatef (z * 360, 0, 0, 1); + glScalef (5, 5, 5); + glTranslatef (-0.5, -0.5, 0); + glCallList (jc->loading_dlist); + } + glPopMatrix(); + + glColor3f (0.7, 0.7, 1); + + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + + { + double rot = current_device_rotation(); + glRotatef(rot, 0, 0, 1); + if ((rot > 45 && rot < 135) || + (rot < -45 && rot > -135)) + { + GLfloat s = MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi); + glScalef (s, 1/s, 1); + } + } + + glOrtho(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi), -1, 1); + glTranslatef ((MI_WIDTH(mi) - w) / 2, + (MI_HEIGHT(mi) - h) / 2, + 0); + glEnable (GL_TEXTURE_2D); + glPolygonMode (GL_FRONT, GL_FILL); + glDisable (GL_LIGHTING); + glEnable (GL_BLEND); + glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + print_texture_string (jc->texfont, text); + glEnable (GL_DEPTH_TEST); + glPopMatrix(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + + glMatrixMode(GL_MODELVIEW); +} + + static void animate (ModeInfo *mi) { @@ -899,10 +1243,16 @@ animate (ModeInfo *mi) double slow = 0.01; double fast = 0.04; - if (jc->button_down_p) return; + if (jc->button_down_p && jc->state != PUZZLE_LOADING_MSG) + return; switch (jc->state) { + case PUZZLE_LOADING_MSG: + if (! jc->puzzle) + loading_msg (mi); + /* fall through */ + case PUZZLE_LOADING: if (!jc->puzzle) break; /* still loading */ jc->tick_speed = slow; @@ -1081,11 +1431,18 @@ init_jigsaw (ModeInfo *mi) jc->trackball = gltrackball_init (); jc->rot = make_rotator (0, 0, 0, 0, speed * 0.002, True); + jc->texfont = load_texture_font (MI_DISPLAY(mi), "font"); - jc->state = PUZZLE_LOADING; + jc->state = PUZZLE_LOADING_MSG; resolution_arg /= complexity_arg; +# ifndef HAVE_TESS + /* If it's not even, we get crosses. */ + if (resolution_arg & 1) + resolution_arg++; +# endif /* !HAVE_TESS */ + if (wire) make_puzzle_grid (mi); else @@ -1104,16 +1461,17 @@ draw_jigsaw (ModeInfo *mi) if (!jc->glx_context) return; - animate (mi); - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(jc->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glPushMatrix (); + mi->polygon_count = 0; - gltrackball_rotate (jc->trackball); + glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); + gltrackball_rotate (jc->trackball); + + animate (mi); if (wobble_p && jc->puzzle) { @@ -1125,18 +1483,16 @@ draw_jigsaw (ModeInfo *mi) glRotatef (max/2 - z*max, 0, 1, 0); } - mi->polygon_count = 0; - - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_NORMALIZE); - glEnable(GL_LINE_SMOOTH); - if (jc->puzzle) { GLfloat s = 14.0 / jc->puzzle_height; int x, y; + glEnable(GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); + glEnable(GL_NORMALIZE); + glEnable(GL_LINE_SMOOTH); + glScalef (s, s, s); glTranslatef (-jc->puzzle_width / 2.0, -jc->puzzle_height / 2.0, 0); diff --git a/hacks/glx/juggler3d.c b/hacks/glx/juggler3d.c index 02c1f179..1a7fe36b 100644 --- a/hacks/glx/juggler3d.c +++ b/hacks/glx/juggler3d.c @@ -2908,6 +2908,7 @@ draw_juggle (ModeInfo *mi) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); + glRotatef(current_device_rotation(), 0, 0, 1); glTranslatef(0,-3,0); @@ -2919,7 +2920,6 @@ draw_juggle (ModeInfo *mi) (z - 0.5) * 15); gltrackball_rotate (sp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); get_rotation (sp->rot, &x, &y, &z, !sp->button_down_p); diff --git a/hacks/glx/jwzgles.c b/hacks/glx/jwzgles.c index 15284ca8..f70b120b 100644 --- a/hacks/glx/jwzgles.c +++ b/hacks/glx/jwzgles.c @@ -136,7 +136,7 @@ lockward Puts verts in lists without glBegin! pinion Uses glSelectBuffer and gluPickMatrix for mouse-clicks. pipes Uses glMap2f for the Utah Teapot. - polyhedra Uses GLUtesselator; also Utah Teapot. + polyhedra Uses GLUtesselator (concave objects); also Utah Teapot. skytentacles Uses GL_LINE in -cel mode. timetunnel Uses GL_CONSTANT_ALPHA and all kinds of other stuff. @@ -167,7 +167,10 @@ #elif defined(HAVE_COCOA) # include # include -#else +#else /* X11 */ +# ifndef GL_GLEXT_PROTOTYPES +# define GL_GLEXT_PROTOTYPES /* for glBindBuffer */ +# endif # include # include #endif @@ -180,11 +183,17 @@ #define countof(x) (sizeof((x))/sizeof((*x))) #undef Assert -#define Assert(C,S) do { \ - if (!(C)) { \ - fprintf (stderr, "jwzgles: %s\n", S); \ - abort(); \ - }} while(0) + +#ifdef HAVE_COCOA + extern void jwxyz_abort (const char *fmt, ...) __dead2; +# define Assert(C,S) do { if (!(C)) { jwxyz_abort ("%s",S); }} while(0) +#else +# define Assert(C,S) do { \ + if (!(C)) { \ + fprintf (stderr, "jwzgles: %s\n", S); \ + abort(); \ + }} while(0) +#endif typedef struct { GLfloat x, y, z; } XYZ; @@ -228,7 +237,7 @@ typedef void (*list_fn_cb) (void); typedef union { const void *v; GLfloat f; GLuint i; } void_int; typedef struct { /* saved args for glDrawArrays */ - int size, type, stride, bytes; + int binding, size, type, stride, bytes; void *data; } draw_array; @@ -261,14 +270,18 @@ typedef struct { /* A single element of a display list */ } list_fn; -typedef struct { /* saved activity within glNewList */ +typedef struct { /* a display list: saved activity within glNewList */ int id; int size, count; list_fn *fns; + + /* Named buffer that should be freed when this display list is deleted. */ + GLuint buffer; + } list; -typedef struct { /* A display list */ +typedef struct { /* All display lists */ list *lists; int count, size; } list_set; @@ -349,19 +362,16 @@ mode_desc (int mode) /* for debugging messages */ switch (mode) { # define SS(X) case GL_##X: return STRINGIFY(X); SS(ALPHA) + SS(ALPHA_TEST) SS(AMBIENT) SS(AMBIENT_AND_DIFFUSE) + SS(ARRAY_BUFFER) SS(AUTO_NORMAL) SS(BACK) SS(BLEND) SS(BLEND_DST) SS(BLEND_SRC) SS(BLEND_SRC_ALPHA) - SS(RGBA_MODE) - SS(DOUBLEBUFFER) - SS(GREATER) - SS(ALPHA_TEST) - SS(LESS) SS(BYTE) SS(C3F_V3F) SS(C4F_N3F_V3F) @@ -370,6 +380,7 @@ mode_desc (int mode) /* for debugging messages */ SS(CCW) SS(CLAMP) SS(COLOR_ARRAY) + SS(COLOR_ARRAY_BUFFER_BINDING); SS(COLOR_MATERIAL) SS(COLOR_MATERIAL_FACE) SS(COLOR_MATERIAL_PARAMETER) @@ -380,8 +391,11 @@ mode_desc (int mode) /* for debugging messages */ SS(DEPTH_BUFFER_BIT) SS(DEPTH_TEST) SS(DIFFUSE) + SS(DOUBLEBUFFER) SS(DST_ALPHA) SS(DST_COLOR) + SS(DYNAMIC_DRAW) + SS(ELEMENT_ARRAY_BUFFER) SS(EYE_LINEAR) SS(EYE_PLANE) SS(FEEDBACK) @@ -391,10 +405,12 @@ mode_desc (int mode) /* for debugging messages */ SS(FOG) SS(FRONT) SS(FRONT_AND_BACK) + SS(GREATER) SS(INTENSITY) SS(INVALID_ENUM) SS(INVALID_OPERATION) SS(INVALID_VALUE) + SS(LESS) SS(LIGHT0) SS(LIGHT1) SS(LIGHT2) @@ -422,6 +438,7 @@ mode_desc (int mode) /* for debugging messages */ SS(NEAREST_MIPMAP_NEAREST) SS(NORMALIZE) SS(NORMAL_ARRAY) + SS(NORMAL_ARRAY_BUFFER_BINDING); SS(OBJECT_LINEAR) SS(OBJECT_PLANE) SS(ONE_MINUS_DST_ALPHA) @@ -445,6 +462,7 @@ mode_desc (int mode) /* for debugging messages */ SS(REPEAT) SS(RGB) SS(RGBA) + SS(RGBA_MODE) SS(S) SS(SELECT) SS(SEPARATE_SPECULAR_COLOR) @@ -460,6 +478,7 @@ mode_desc (int mode) /* for debugging messages */ SS(SRC_COLOR) SS(STACK_OVERFLOW) SS(STACK_UNDERFLOW) + SS(STATIC_DRAW) SS(STENCIL_BUFFER_BIT) SS(T) SS(T2F_C3F_V3F) @@ -479,6 +498,7 @@ mode_desc (int mode) /* for debugging messages */ SS(TEXTURE_BORDER_COLOR) SS(TEXTURE_COMPONENTS) SS(TEXTURE_COORD_ARRAY) + SS(TEXTURE_COORD_ARRAY_BUFFER_BINDING); SS(TEXTURE_ENV) SS(TEXTURE_ENV_COLOR) SS(TEXTURE_ENV_MODE) @@ -507,6 +527,7 @@ mode_desc (int mode) /* for debugging messages */ SS(V2F) SS(V3F) SS(VERTEX_ARRAY) + SS(VERTEX_ARRAY_BUFFER_BINDING); /*SS(COLOR_BUFFER_BIT) -- same value as GL_LIGHT0 */ # undef SS case (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT): @@ -539,6 +560,20 @@ check_gl_error (const char *s) #endif /* DEBUG */ +static void +make_room (const char *name, void **array, int span, int *count, int *size) +{ + if (*count + 1 >= *size) + { + int new_size = (*count + 20) * 1.2; /* mildly exponential */ + *array = realloc (*array, new_size * span); + Assert (*array, "out of memory"); + /* LOG3("%s: grew %d -> %d", name, *size, new_size); */ + *size = new_size; + } +} + + int jwzgles_glGenLists (int n) { @@ -557,19 +592,10 @@ jwzgles_glGenLists (int n) { list *L; int id = 0; - - /* Adding a new list at the end. Make room for it. - */ - if (state->lists.count >= state->lists.size - 1) - { - int new_size = 20 + (state->lists.size * 1.2); - state->lists.lists = (list *) - realloc (state->lists.lists, - new_size * sizeof (*state->lists.lists)); - Assert (state->lists.lists, "out of memory"); - state->lists.size = new_size; - LOG1("glGenLists grew -> %d", new_size); - } + make_room ("glGenLists", + (void **) &state->lists.lists, + sizeof (*state->lists.lists), + &state->lists.count, &state->lists.size); state->lists.count++; id = state->lists.count; L = &state->lists.lists[id-1]; @@ -608,6 +634,11 @@ jwzgles_glNewList (int id, int mode) } +static void save_arrays (list_fn *, int); +static void restore_arrays (list_fn *, int); +static void copy_array_data (draw_array *, int, const char *); +static void optimize_arrays (void); + void jwzgles_glEndList (void) { @@ -615,14 +646,11 @@ jwzgles_glEndList (void) Assert (state->set.count == 0, "missing glEnd"); Assert (!state->compiling_verts, "glEndList not allowed inside glBegin"); LOG1("glEndList %d", state->compiling_list); + optimize_arrays(); state->compiling_list = 0; } -static void save_arrays (list_fn *, int); -static void restore_arrays (list_fn *, int); -static void copy_array_data (draw_array *, int, const char *); - static void list_push (const char * const name, list_fn_cb fn, fn_proto proto, void_int *av) @@ -637,16 +665,10 @@ list_push (const char * const name, L = &state->lists.lists[state->compiling_list-1]; Assert (L, "glNewList: no list"); - if (L->count >= L->size - 1) - { - int new_size = 20 + (L->size * 1.2); - L->fns = (list_fn *) realloc (L->fns, new_size * sizeof (*L->fns)); - Assert (L->fns, "glNewList: no functions"); - L->size = new_size; - } - + make_room ("glNewLists", + (void **) &L->fns, sizeof (*L->fns), + &L->count, &L->size); memset (&L->fns[L->count], 0, sizeof (*L->fns)); - F = L->fns + L->count; F->name = name; @@ -678,7 +700,8 @@ list_push (const char * const name, LOG2 (" push %-12s %7.3f", name, av[0].f); break; case PROTO_II: - if (fn == (list_fn_cb) &jwzgles_glBindTexture) + if (fn == (list_fn_cb) &jwzgles_glBindTexture || + fn == (list_fn_cb) &jwzgles_glBindBuffer) LOG3 (" push %-12s %s %d", name, mode_desc (av[0].i), av[1].i); else LOG3 (" push %-12s %d %d", name, av[0].i, av[1].i); @@ -834,14 +857,17 @@ jwzgles_glDeleteLists (int id0, int range) { int j; for (j = 0; j < 4; j++) - { - if (lf->arrays[j].data) - free (lf->arrays[j].data); - } + /* If there's a binding, 'data' is an index, not a ptr. */ + if (!lf->arrays[j].binding && + lf->arrays[j].data) + free (lf->arrays[j].data); + free (lf->arrays); } } if (L->fns) free (L->fns); + if (L->buffer) + glDeleteBuffers (1, &L->buffer); memset (L, 0, sizeof (*L)); L->id = id; @@ -878,14 +904,16 @@ jwzgles_glNormal3fv (const GLfloat *v) (state->compiling_verts ? " rec " : ""), v[0], v[1], v[2]); - state->set.cnorm.x = v[0]; - state->set.cnorm.y = v[1]; - state->set.cnorm.z = v[2]; - state->set.ncount++; - if (state->set.count > 0 && state->set.ncount == 1) /* not first! */ - state->set.ncount++; - - if (! state->compiling_verts) /* outside glBegin */ + if (state->compiling_verts) /* inside glBegin */ + { + state->set.cnorm.x = v[0]; + state->set.cnorm.y = v[1]; + state->set.cnorm.z = v[2]; + state->set.ncount++; + if (state->set.count > 0 && state->set.ncount == 1) /* not first! */ + state->set.ncount++; + } + else /* outside glBegin */ { glNormal3f (v[0], v[1], v[2]); CHECK("glNormal3f"); @@ -926,15 +954,18 @@ jwzgles_glTexCoord4fv (const GLfloat *v) (state->compiling_verts ? " rec " : ""), v[0], v[1], v[2], v[3]); - state->set.ctex.s = v[0]; - state->set.ctex.t = v[1]; - state->set.ctex.r = v[2]; - state->set.ctex.q = v[3]; - state->set.tcount++; - if (state->set.count > 0 && state->set.tcount == 1) /* not first! */ - state->set.tcount++; - Assert (state->compiling_verts, "glTexCoord4fv outside glBegin"); + + if (state->compiling_verts) /* inside glBegin */ + { + state->set.ctex.s = v[0]; + state->set.ctex.t = v[1]; + state->set.ctex.r = v[2]; + state->set.ctex.q = v[3]; + state->set.tcount++; + if (state->set.count > 0 && state->set.tcount == 1) /* not first! */ + state->set.tcount++; + } } } @@ -1018,15 +1049,17 @@ jwzgles_glColor4fv (const GLfloat *v) (state->compiling_verts ? " rec " : ""), v[0], v[1], v[2], v[3]); - state->set.ccolor.r = v[0]; - state->set.ccolor.g = v[1]; - state->set.ccolor.b = v[2]; - state->set.ccolor.a = v[3]; - state->set.ccount++; - if (state->set.count > 0 && state->set.ccount == 1) /* not first! */ - state->set.ccount++; - - if (! state->compiling_verts) /* outside glBegin */ + if (state->compiling_verts) /* inside glBegin */ + { + state->set.ccolor.r = v[0]; + state->set.ccolor.g = v[1]; + state->set.ccolor.b = v[2]; + state->set.ccolor.a = v[3]; + state->set.ccount++; + if (state->set.count > 0 && state->set.ccount == 1) /* not first! */ + state->set.ccount++; + } + else /* outside glBegin */ { glColor4f (v[0], v[1], v[2], v[3]); CHECK("glColor4"); @@ -1556,6 +1589,8 @@ jwzgles_glEnd (void) Assert (state->compiling_verts == 1, "missing glBegin"); state->compiling_verts--; + Assert (!state->replaying_list, "how did glEnd get into a display list?"); + if (!state->replaying_list) { LOG5 ("%s [V = %d, N = %d, T = %d, C = %d]", @@ -1601,6 +1636,14 @@ jwzgles_glEnd (void) was_color = jwzgles_glIsEnabled (GL_COLOR_ARRAY); was_mat = jwzgles_glIsEnabled (GL_COLOR_MATERIAL); + /* If we're executing glEnd in immediate mode, not from inside a display + list (which is the only way it happens, because glEnd doesn't go into + display lists), make sure we're not stomping on a saved buffer list: + in immediate mode, vertexes are client-side only. + */ + if (! state->compiling_list) + jwzgles_glBindBuffer (GL_ARRAY_BUFFER, 0); + if (s->ncount > 1) { is_norm = 1; @@ -1654,7 +1697,9 @@ jwzgles_glEnd (void) else is_mat = 0; + glBindBuffer (GL_ARRAY_BUFFER, 0); /* This comes later. */ jwzgles_glDrawArrays (s->mode, 0, s->count); + glBindBuffer (GL_ARRAY_BUFFER, 0); /* Keep out of others' hands */ # define RESET(VAR,FN,ARG) do { \ if (is_##VAR != was_##VAR) { \ @@ -1675,6 +1720,116 @@ jwzgles_glEnd (void) } +/* The display list is full of calls to glDrawArrays(), plus saved arrays + of the values we need to restore before calling it. "Restore" means + "ship them off to the GPU before each call". + + So instead, this function walks through the display list and + combines all of those vertex, normal, texture and color values into + a single VBO array; ships those values off to the GPU *once* at the + time of glEndList; and when running the list with glCallList, the + values are already on the GPU and don't need to be sent over again. + + The VBO persists in the GPU until the display list is deleted. + */ +static void +optimize_arrays (void) +{ + list *L = &state->lists.lists[state->compiling_list-1]; + int i, j; + GLfloat *combo = 0; + int combo_count = 0; + int combo_size = 0; + GLuint buf_name = 0; + + Assert (state->compiling_list, "not compiling a list"); + Assert (L, "no list"); + Assert (!L->buffer, "list already has a buffer"); + + glGenBuffers (1, &buf_name); + CHECK("glGenBuffers"); + if (! buf_name) return; + + L->buffer = buf_name; + + /* Go through the list and dump the contents of the various saved arrays + into one large array. + */ + for (i = 0; i < L->count; i++) + { + list_fn *F = &L->fns[i]; + int count; + if (! F->arrays) + continue; + count = F->argv[2].i; /* 3rd arg to glDrawArrays */ + + for (j = 0; j < 4; j++) + { + draw_array *A = &F->arrays[j]; + int ocount = combo_count; + + /* If some caller is using arrays that don't have floats in them, + we just leave them as-is and ship them over at each call. + Doubt this ever really happens. + */ + if (A->type != GL_FLOAT) + continue; + + if (! A->data) /* No array. */ + continue; + + Assert (A->bytes > 0, "no bytes in draw_array"); + Assert (((unsigned long) A->data > 0xFFFF), + "buffer data not a pointer"); + + combo_count += A->bytes / sizeof(*combo); + make_room ("optimize_arrays", + (void **) &combo, sizeof(*combo), + &combo_count, &combo_size); + memcpy (combo + ocount, A->data, A->bytes); + A->binding = buf_name; + free (A->data); + /* 'data' is now the byte offset into the VBO. */ + A->data = (void *) (ocount * sizeof(*combo)); + /* LOG3(" loaded %lu floats to pos %d of buffer %d", + A->bytes / sizeof(*combo), ocount, buf_name); */ + } + } + + if (combo_count == 0) /* Nothing to do! */ + { + if (combo) free (combo); + glDeleteBuffers (1, &buf_name); + L->buffer = 0; + return; + } + + glBindBuffer (GL_ARRAY_BUFFER, buf_name); + glBufferData (GL_ARRAY_BUFFER, + combo_count * sizeof (*combo), + combo, + GL_STATIC_DRAW); + glBindBuffer (GL_ARRAY_BUFFER, 0); /* Keep out of others' hands */ + + LOG3(" loaded %d floats of list %d into VBO %d", + combo_count, state->compiling_list, buf_name); + +# ifdef DEBUG +# if 0 + for (i = 0; i < combo_count; i++) + { + if (i % 4 == 0) + fprintf (stderr, "\njwzgles: %4d: ", i); + fprintf (stderr, " %7.3f", combo[i]); + } + fprintf (stderr, "\n"); +# endif +# endif /* DEBUG */ + + if (combo) free (combo); +} + + void jwzgles_glCallList (int id) { @@ -1735,7 +1890,8 @@ jwzgles_glCallList (int id) break; case PROTO_II: - if (fn == (list_fn_cb) &jwzgles_glBindTexture) + if (fn == (list_fn_cb) &jwzgles_glBindTexture || + fn == (list_fn_cb) &jwzgles_glBindBuffer) LOG3 (" call %-12s %s %d", F->name, mode_desc (av[0].i), av[1].i); else @@ -1902,6 +2058,7 @@ save_arrays (list_fn *F, int count) /* if (state->set.count > 0) */ { + glGetIntegerv (GL_VERTEX_ARRAY_BUFFER_BINDING, &A[i].binding); glGetIntegerv (GL_VERTEX_ARRAY_SIZE, &A[i].size); glGetIntegerv (GL_VERTEX_ARRAY_TYPE, &A[i].type); glGetIntegerv (GL_VERTEX_ARRAY_STRIDE, &A[i].stride); @@ -1914,6 +2071,7 @@ save_arrays (list_fn *F, int count) if (state->set.ncount > 1) { A[i].size = 3; + glGetIntegerv (GL_NORMAL_ARRAY_BUFFER_BINDING, &A[i].binding); glGetIntegerv (GL_NORMAL_ARRAY_TYPE, &A[i].type); glGetIntegerv (GL_NORMAL_ARRAY_STRIDE, &A[i].stride); glGetPointerv (GL_NORMAL_ARRAY_POINTER, &A[i].data); @@ -1924,6 +2082,7 @@ save_arrays (list_fn *F, int count) i++; if (state->set.tcount > 1) { + glGetIntegerv (GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING, &A[i].binding); glGetIntegerv (GL_TEXTURE_COORD_ARRAY_SIZE, &A[i].size); glGetIntegerv (GL_TEXTURE_COORD_ARRAY_TYPE, &A[i].type); glGetIntegerv (GL_TEXTURE_COORD_ARRAY_STRIDE, &A[i].stride); @@ -1935,6 +2094,7 @@ save_arrays (list_fn *F, int count) i++; if (state->set.ccount > 1) { + glGetIntegerv (GL_COLOR_ARRAY_BUFFER_BINDING, &A[i].binding); glGetIntegerv (GL_COLOR_ARRAY_SIZE, &A[i].size); glGetIntegerv (GL_COLOR_ARRAY_TYPE, &A[i].type); glGetIntegerv (GL_COLOR_ARRAY_STRIDE, &A[i].stride); @@ -1958,20 +2118,64 @@ dump_array_data (draw_array *A, int count, { int bytes = count * A->stride; - Assert (bytes == A->bytes, "array data corrupted"); + if (A->binding) + { + fprintf (stderr, + "jwzgles: %s %s %d %s %2d, %4d = %5d bind %d @ %d\n", + action, name, + A->size, mode_desc(A->type), A->stride, + count, bytes, A->binding, (int) A->data); + } + else + { + Assert (bytes == A->bytes, "array data corrupted"); + + fprintf (stderr, "jwzgles: %s %s %d %s %2d, %4d = %5d @ %lX", + action, name, + A->size, mode_desc(A->type), A->stride, + count, bytes, (unsigned long) A->data); + if (old) + fprintf (stderr, " / %lX", (unsigned long) old); + fprintf (stderr, "\n"); + } - fprintf (stderr, "jwzgles: %s %s %d %s %2d, %4d = %5d @ %lX", - action, name, - A->size, mode_desc(A->type), A->stride, - count, bytes, (unsigned long) A->data); - if (old) - fprintf (stderr, " / %lX", (unsigned long) old); - fprintf (stderr, "\n"); + if (A->binding) + { + Assert (((unsigned long) A->data < 0xFFFF), + "buffer binding should be a numeric index," + " but looks like a pointer"); # if 0 - { + /* glGetBufferSubData doesn't actually exist in OpenGLES, but this + was helpful for debugging on real OpenGL... */ + GLfloat *d; + int i; + fprintf (stderr, "jwzgles: read back:\n"); + d = (GLfloat *) malloc (A->bytes); + glGetBufferSubData (GL_ARRAY_BUFFER, (int) A->data, + count * A->stride, (void *) d); + CHECK("glGetBufferSubData"); + for (i = 0; i < count * A->size; i++) + { + if (i % 4 == 0) + fprintf (stderr, "\njwzgles: %4d: ", + i + (int) A->data / sizeof(GLfloat)); + fprintf (stderr, " %7.3f", d[i]); + } + fprintf (stderr, "\n"); + free (d); +# endif + } +# if 0 + else + { unsigned char *b = (unsigned char *) A->data; int i; + if ((unsigned long) A->data < 0xFFFF) + { + Assert (0, "buffer data not a pointer"); + return; + } for (i = 0; i < count; i++) { int j; @@ -1991,10 +2195,11 @@ dump_array_data (draw_array *A, int count, static void dump_direct_array_data (int count) { - draw_array A; + draw_array A = { 0, }; if (jwzgles_glIsEnabled (GL_VERTEX_ARRAY)) { + glGetIntegerv (GL_VERTEX_ARRAY_BUFFER_BINDING, &A.binding); glGetIntegerv (GL_VERTEX_ARRAY_SIZE, &A.size); glGetIntegerv (GL_VERTEX_ARRAY_TYPE, &A.type); glGetIntegerv (GL_VERTEX_ARRAY_STRIDE, &A.stride); @@ -2005,6 +2210,7 @@ dump_direct_array_data (int count) if (jwzgles_glIsEnabled (GL_NORMAL_ARRAY)) { A.size = 0; + glGetIntegerv (GL_NORMAL_ARRAY_BUFFER_BINDING, &A.binding); glGetIntegerv (GL_NORMAL_ARRAY_TYPE, &A.type); glGetIntegerv (GL_NORMAL_ARRAY_STRIDE, &A.stride); glGetPointerv (GL_NORMAL_ARRAY_POINTER, &A.data); @@ -2013,6 +2219,7 @@ dump_direct_array_data (int count) } if (jwzgles_glIsEnabled (GL_TEXTURE_COORD_ARRAY)) { + glGetIntegerv (GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING, &A.binding); glGetIntegerv (GL_TEXTURE_COORD_ARRAY_SIZE, &A.size); glGetIntegerv (GL_TEXTURE_COORD_ARRAY_TYPE, &A.type); glGetIntegerv (GL_TEXTURE_COORD_ARRAY_STRIDE, &A.stride); @@ -2022,6 +2229,7 @@ dump_direct_array_data (int count) } if (jwzgles_glIsEnabled (GL_COLOR_ARRAY)) { + glGetIntegerv (GL_COLOR_ARRAY_BUFFER_BINDING, &A.binding); glGetIntegerv (GL_COLOR_ARRAY_SIZE, &A.size); glGetIntegerv (GL_COLOR_ARRAY_TYPE, &A.type); glGetIntegerv (GL_COLOR_ARRAY_STRIDE, &A.stride); @@ -2051,7 +2259,11 @@ copy_array_data (draw_array *A, int count, const char *name) const unsigned char *IB; unsigned char *OB; - if (! A->data) return; + if (((unsigned long) A->data) < 0xFFFF) + { + Assert (0, "buffer data not a pointer"); + return; + } Assert (A->size >= 2 && A->size <= 4, "bogus array size"); @@ -2114,8 +2326,17 @@ restore_arrays (list_fn *F, int count) for (i = 0; i < 4; i++) { - const char *name; - if (! A[i].data) continue; + const char *name = 0; + + if (!A[i].size) + continue; + + Assert ((A[i].binding || A[i].data), + "array has neither buffer binding nor data"); + + glBindBuffer (GL_ARRAY_BUFFER, A[i].binding); + CHECK("glBindBuffer"); + switch (i) { case 0: glVertexPointer (A[i].size, A[i].type, A[i].stride, A[i].data); name = "vertex "; @@ -2140,6 +2361,8 @@ restore_arrays (list_fn *F, int count) dump_array_data (&A[i], count, "restored", name, 0); # endif } + + glBindBuffer (GL_ARRAY_BUFFER, 0); /* Keep out of others' hands */ } @@ -2396,16 +2619,22 @@ jwzgles_glEnableClientState (GLuint cap) } switch (cap) { + case GL_VERTEX_ARRAY: + state->enabled |= ISENABLED_VERT_ARRAY; + break; case GL_NORMAL_ARRAY: - state->set.ncount += 2; + if (! state->compiling_verts) + state->set.ncount += 2; state->enabled |= ISENABLED_NORM_ARRAY; break; case GL_TEXTURE_COORD_ARRAY: - state->set.tcount += 2; + if (! state->compiling_verts) + state->set.tcount += 2; state->enabled |= ISENABLED_TEX_ARRAY; break; case GL_COLOR_ARRAY: - state->set.ccount += 2; + if (! state->compiling_verts) + state->set.ccount += 2; state->enabled |= ISENABLED_COLOR_ARRAY; break; default: break; @@ -2433,16 +2662,22 @@ jwzgles_glDisableClientState (GLuint cap) } switch (cap) { + case GL_VERTEX_ARRAY: + state->enabled &= ~ISENABLED_VERT_ARRAY; + break; case GL_NORMAL_ARRAY: - state->set.ncount = 0; + if (! state->compiling_verts) + state->set.ncount = 0; state->enabled &= ~ISENABLED_NORM_ARRAY; break; case GL_TEXTURE_COORD_ARRAY: - state->set.tcount = 0; + if (! state->compiling_verts) + state->set.tcount = 0; state->enabled &= ~ISENABLED_TEX_ARRAY; break; case GL_COLOR_ARRAY: - state->set.ccount = 0; + if (! state->compiling_verts) + state->set.ccount = 0; state->enabled &= ~ISENABLED_COLOR_ARRAY; break; default: @@ -3046,8 +3281,10 @@ jwzgles_gluErrorString (GLenum error) } -/* These can be included inside glNewList, but they actually execute - immediately anyway. +/* These four *Pointer calls (plus glBindBuffer and glBufferData) can + be included inside glNewList, but they actually execute immediately + anyway, because their data is recorded in the list by the + subsequently-recorded call to glDrawArrays. This is a little weird. */ void jwzgles_glVertexPointer (GLuint size, GLuint type, GLuint stride, @@ -3092,6 +3329,26 @@ jwzgles_glTexCoordPointer (GLuint size, GLuint type, GLuint stride, CHECK("glTexCoordPointer"); } +void +jwzgles_glBindBuffer (GLuint target, GLuint buffer) +{ + if (! state->replaying_list) + LOG3 ("direct %-12s %s %d", "glBindBuffer", mode_desc(target), buffer); + glBindBuffer (target, buffer); /* the real one */ + CHECK("glBindBuffer"); +} + +void +jwzgles_glBufferData (GLenum target, GLsizeiptr size, const void *data, + GLenum usage) +{ + if (! state->replaying_list) + LOG5 ("direct %-12s %s %ld 0x%lX %s", "glBufferData", + mode_desc(target), size, (unsigned long) data, mode_desc(usage)); + glBufferData (target, size, data, usage); /* the real one */ + CHECK("glBufferData"); +} + void jwzgles_glTexParameterf (GLuint target, GLuint pname, GLfloat param) @@ -3108,6 +3365,11 @@ jwzgles_glTexParameterf (GLuint target, GLuint pname, GLfloat param) /* We implement 1D textures as 2D textures. */ if (target == GL_TEXTURE_1D) target = GL_TEXTURE_2D; + /* Apparently this is another invalid enum. Just ignore it. */ + if ((pname == GL_TEXTURE_WRAP_S || pname == GL_TEXTURE_WRAP_T) && + param == GL_CLAMP) + return; + if (state->compiling_list) { void_int vv[3]; diff --git a/hacks/glx/jwzglesI.h b/hacks/glx/jwzglesI.h index 3260e74f..faa26efd 100644 --- a/hacks/glx/jwzglesI.h +++ b/hacks/glx/jwzglesI.h @@ -306,6 +306,8 @@ extern void jwzgles_glVertexPointer (GLuint, GLuint, GLuint, const void *); extern void jwzgles_glNormalPointer (GLenum, GLuint, const void *); extern void jwzgles_glColorPointer (GLuint, GLuint, GLuint, const void *); extern void jwzgles_glTexCoordPointer (GLuint, GLuint, GLuint, const void *); +extern void jwzgles_glBindBuffer (GLuint, GLuint); +extern void jwzgles_glBufferData (GLenum, GLsizeiptr, const void *, GLenum); extern const char *jwzgles_gluErrorString (GLenum error); #endif /* __JWZGLES_I_H__ */ diff --git a/hacks/glx/lament.c b/hacks/glx/lament.c index f0526cc5..ab4bf83e 100644 --- a/hacks/glx/lament.c +++ b/hacks/glx/lament.c @@ -1422,7 +1422,10 @@ draw(ModeInfo *mi) glPushMatrix(); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (lc->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); /* Make into the screen be +Y right be +X, and up be +Z. */ glRotatef(-90.0, 1.0, 0.0, 0.0); diff --git a/hacks/glx/menger.c b/hacks/glx/menger.c index c620dfd0..2319af76 100644 --- a/hacks/glx/menger.c +++ b/hacks/glx/menger.c @@ -486,7 +486,10 @@ draw_sponge (ModeInfo *mi) (y - 0.5) * 6, (z - 0.5) * 15); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (sp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (sp->rot, &x, &y, &z, !sp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/mirrorblob.c b/hacks/glx/mirrorblob.c index d6fbdc1c..d8b0915d 100644 --- a/hacks/glx/mirrorblob.c +++ b/hacks/glx/mirrorblob.c @@ -246,7 +246,7 @@ typedef struct #define PMM { sqrt_3, -sqrt_3, -sqrt_3 } /* +X, -Y, -Z */ /* Structure describing a tetrahedron */ -Vector3D tetrahedron[4][3] = { +static Vector3D tetrahedron[4][3] = { {PPP, MMP, MPM}, {PMM, MPM, MMP}, {PPP, MPM, PMM}, @@ -257,7 +257,7 @@ Vector3D tetrahedron[4][3] = { * Static blob data *****************************************************************************/ -const Vector3D zero_vector = { 0.0, 0.0, 0.0 }; +static const Vector3D zero_vector = { 0.0, 0.0, 0.0 }; /* Use 2 textures to allow a gradual fade between images */ #define NUM_TEXTURES 2 @@ -1412,12 +1412,12 @@ draw_blob (mirrorblobstruct *gp) glMatrixMode(GL_MODELVIEW); glLoadIdentity(); + glRotatef(current_device_rotation(), 0, 0, 1); /* Move down the z-axis. */ glTranslatef (0.0, 0.0, -4.0); gltrackball_rotate (gp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); /* glColor4ub (255, 0, 0, 128); */ glBegin(GL_TRIANGLES); diff --git a/hacks/glx/moebius.c b/hacks/glx/moebius.c index a9dddf50..e37294a1 100644 --- a/hacks/glx/moebius.c +++ b/hacks/glx/moebius.c @@ -761,7 +761,10 @@ draw_moebius (ModeInfo * mi) glTranslatef(0.0, 0.0, -10.0); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (mp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); if (!MI_IS_ICONIC(mi)) { glScalef(Scale4Window * mp->WindH / mp->WindW, Scale4Window, Scale4Window); diff --git a/hacks/glx/moebiusgears.c b/hacks/glx/moebiusgears.c index bf38150c..03381b70 100644 --- a/hacks/glx/moebiusgears.c +++ b/hacks/glx/moebiusgears.c @@ -339,7 +339,10 @@ draw_mgears (ModeInfo *mi) (y - 0.5) * 4, (z - 0.5) * 7); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); diff --git a/hacks/glx/molecule.c b/hacks/glx/molecule.c index b3998f2d..3720294c 100644 --- a/hacks/glx/molecule.c +++ b/hacks/glx/molecule.c @@ -93,11 +93,16 @@ ISO C89 compilers are required to support" when includng the following data file... */ # endif -const char * const builtin_pdb_data[] = { +static const char * const builtin_pdb_data[] = { # include "molecules.h" }; +#ifndef USE_IPHONE +# define LOAD_FILES +#endif + + typedef struct { const char *name; GLfloat size, size2; @@ -884,6 +889,7 @@ parse_pdb_data (molecule *m, const char *data, const char *filename, int line) } +#ifdef LOAD_FILES static int parse_pdb_file (molecule *m, const char *name) { @@ -930,6 +936,7 @@ parse_pdb_file (molecule *m, const char *name) return 0; } +#endif /* LOAD_FILES */ typedef struct { char *atom; int count; } atom_and_count; @@ -1047,16 +1054,17 @@ static void load_molecules (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; - int wire = MI_IS_WIREFRAME(mi); int i; mc->nmolecules = 0; +# ifdef LOAD_FILES if (molecule_str && *molecule_str && strcmp(molecule_str, "(default)")) /* try external PDB files */ { /* The -molecule option can point to a .pdb file, or to a directory of them. */ + int wire = MI_IS_WIREFRAME(mi); struct stat st; int nfiles = 0; int list_size = 0; @@ -1160,6 +1168,7 @@ load_molecules (ModeInfo *mi) files = 0; mc->nmolecules = molecule_ctr; } +# endif /* LOAD_FILES */ if (mc->nmolecules == 0) /* do the builtins if no files */ { @@ -1448,6 +1457,8 @@ draw_labels (ModeInfo *mi) glTranslatef (0, 0, (size * 1.1)); /* move toward camera */ + glRotatef (current_device_rotation(), 0, 0, 1); /* right side up */ + # ifdef HAVE_GLBITMAP glRasterPos3f (0, 0, 0); /* draw text here */ @@ -1643,7 +1654,10 @@ draw_molecule (ModeInfo *mi) (y - 0.5) * 9, (z - 0.5) * 9); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (mc->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (mc->rot, &x, &y, &z, !mc->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/pinion.c b/hacks/glx/pinion.c index 015dc1f2..4da81e39 100644 --- a/hacks/glx/pinion.c +++ b/hacks/glx/pinion.c @@ -1458,9 +1458,7 @@ draw_pinion (ModeInfo *mi) glPushMatrix (); { - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate (pp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); mi->polygon_count = 0; glScalef (16, 16, 16); /* map vp_width/height to the screen */ diff --git a/hacks/glx/pipes.c b/hacks/glx/pipes.c index 104f880b..9ca14d24 100644 --- a/hacks/glx/pipes.c +++ b/hacks/glx/pipes.c @@ -37,21 +37,37 @@ static const char sccsid[] = "@(#)pipes.c 4.07 97/11/24 xlockmore"; * Marcelo F. Vianna (Apr-09-1997) * * Revision History: + * 24-Jun-12: Eliminate single-buffer dependency. * 29-Apr-97: Factory equipment by Ed Mackey. Productive day today, eh? * 29-Apr-97: Less tight turns Jeff Epler * 29-Apr-97: Efficiency speed-ups by Marcelo F. Vianna */ +/* This program was originally written to be single-buffered: it kept + building up new objects in the front buffer by never clearing the + depth or color buffers at the end of each frame. In that way, it + was drawing a very small number of polygons per frame. However, + modern systems make it difficult to live in a single-buffered world + like that. So I changed it to re-generate the scene at every + frame, which makes it vastly less efficient, but also, makes it + work right on modern hardware. It generates the entire system up + front, putting each "frame" of the animation into its own display + list; then it draws successively more of those display lists each + time the redisplay method is called. When it reaches the end, + it regenerates a new system and re-populates the existing display + lists. -- jwz. + */ + #ifdef STANDALONE # define DEFAULTS "*delay: 10000 \n" \ "*count: 2 \n" \ "*cycles: 5 \n" \ "*size: 500 \n" \ "*showFPS: False \n" \ - "*fpsSolid: True \n" + "*fpsSolid: True \n" \ + "*wireframe: False \n" # define refresh_pipes 0 -# define pipes_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ @@ -74,17 +90,16 @@ static const char sccsid[] = "@(#)pipes.c 4.07 97/11/24 xlockmore"; #include "sphere.h" #include "buildlwo.h" #include "teapot.h" +#include "gltrackball.h" #define DEF_FACTORY "2" #define DEF_FISHEYE "True" #define DEF_TIGHTTURNS "False" #define DEF_ROTATEPIPES "True" -#define DEF_DBUF "False" #define NofSysTypes 3 static int factory; static Bool fisheye, tightturns, rotatepipes; -static Bool dbuf_p; static XrmOptionDescRec opts[] = { @@ -95,8 +110,6 @@ static XrmOptionDescRec opts[] = {"+tightturns", ".pipes.tightturns", XrmoptionNoArg, "off"}, {"-rotatepipes", ".pipes.rotatepipes", XrmoptionNoArg, "on"}, {"+rotatepipes", ".pipes.rotatepipes", XrmoptionNoArg, "off"}, - {"-db", ".pipes.doubleBuffer", XrmoptionNoArg, "on"}, - {"+db", ".pipes.doubleBuffer", XrmoptionNoArg, "off"}, }; static argtype vars[] = { @@ -104,7 +117,6 @@ static argtype vars[] = {&fisheye, "fisheye", "Fisheye", DEF_FISHEYE, t_Bool}, {&tightturns, "tightturns", "Tightturns", DEF_TIGHTTURNS, t_Bool}, {&rotatepipes, "rotatepipes", "Rotatepipes", DEF_ROTATEPIPES, t_Bool}, - {&dbuf_p, "doubleBuffer", "DoubleBuffer", DEF_DBUF, t_Bool} }; static OptionStruct desc[] = { @@ -112,7 +124,6 @@ static OptionStruct desc[] = {"-/+fisheye", "turn on/off zoomed-in view of pipes"}, {"-/+tightturns", "turn on/off tight turns"}, {"-/+rotatepipes", "turn on/off pipe system rotation per screenful"}, - {"-/+db", "turn on/off double buffering"} }; ENTRYPOINT ModeSpecOpt pipes_opts = @@ -129,7 +140,6 @@ ModStruct pipes_description = #endif #define Scale4Window 0.1 -#define Scale4Iconic 0.07 #define one_third 0.3333333333333333333 @@ -151,7 +161,6 @@ ModStruct pipes_description = typedef struct { int flip; - GLint WindH, WindW; int Cells[HCELLS][VCELLS][HCELLS]; int usedcolors[DEFINEDCOLORS]; int directions[6]; @@ -170,8 +179,16 @@ typedef struct { GLuint valve, bolts, betweenbolts, elbowbolts, elbowcoins; GLuint guagehead, guageface, guagedial, guageconnector, teapot; int teapot_polys; - int reset; GLXContext *glx_context; + + Bool button_down_p; + trackball_state *trackball; + GLuint *dlists, *poly_counts; + int dlist_count, dlist_size; + int system_index, system_size; + + int fadeout; + } pipesstruct; extern struct lwo LWO_BigValve, LWO_PipeBetweenBolts, LWO_Bolts3D; @@ -204,8 +221,10 @@ static pipesstruct *pipes = NULL; static void MakeTube(ModeInfo *mi, int direction) { + Bool wire = MI_IS_WIREFRAME(mi); float an; float SINan_3, COSan_3; + int facets = (wire ? 5 : 24); /*dirUP = 00000000 */ /*dirDOWN = 00000001 */ @@ -218,8 +237,8 @@ MakeTube(ModeInfo *mi, int direction) glRotatef(90.0, (direction & 2) ? 0.0 : 1.0, (direction & 2) ? 1.0 : 0.0, 0.0); } - glBegin(GL_QUAD_STRIP); - for (an = 0.0; an <= 2.0 * M_PI; an += M_PI / 12.0) { + glBegin(wire ? GL_LINE_STRIP : GL_QUAD_STRIP); + for (an = 0.0; an <= 2.0 * M_PI; an += M_PI * 2 / facets) { glNormal3f((COSan_3 = cos(an) / 3.0), (SINan_3 = sin(an) / 3.0), 0.0); glVertex3f(COSan_3, SINan_3, one_third); glVertex3f(COSan_3, SINan_3, -one_third); @@ -250,13 +269,14 @@ mySphere(float radius, Bool wire) static void myElbow(ModeInfo * mi, int bolted) { -#define nsides 25 -#define rings 25 + pipesstruct *pp = &pipes[MI_SCREEN(mi)]; + Bool wire = MI_IS_WIREFRAME(mi); + + int nsides = (wire ? 6 : 25); + int rings = nsides; #define r one_third #define R one_third - pipesstruct *pp = &pipes[MI_SCREEN(mi)]; - int i, j; GLfloat p0[3], p1[3], p2[3], p3[3]; GLfloat n0[3], n1[3], n2[3], n3[3]; @@ -303,7 +323,7 @@ myElbow(ModeInfo * mi, int bolted) p0[2] = p1[2] = r * (n0[2] = n1[2] = sin(phi)); p2[2] = p3[2] = r * (n2[2] = n3[2] = sin(phi1)); - glBegin(GL_QUADS); + glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3fv(n3); glVertex3fv(p3); glNormal3fv(n2); @@ -547,34 +567,8 @@ pinit(ModeInfo * mi, int zera) pipesstruct *pp = &pipes[MI_SCREEN(mi)]; int X, Y, Z; - if (zera) - mi->polygon_count = 0; - - glClearDepth(1.0); - glColor3f(1.0, 1.0, 1.0); - - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0); - glLightfv(GL_LIGHT0, GL_POSITION, position0); - glLightfv(GL_LIGHT1, GL_AMBIENT, ambient1); - glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse1); - glLightfv(GL_LIGHT1, GL_POSITION, position1); - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); - glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_LIGHT1); - glEnable(GL_DEPTH_TEST); - glEnable(GL_NORMALIZE); - glEnable(GL_CULL_FACE); - - glShadeModel(GL_SMOOTH); - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); - if (zera) { pp->system_number = 1; - glDrawBuffer(dbuf_p ? GL_BACK : GL_FRONT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); (void) memset(pp->Cells, 0, sizeof (pp->Cells)); for (X = 0; X < HCELLS; X++) { @@ -592,9 +586,6 @@ pinit(ModeInfo * mi, int zera) } } (void) memset(pp->usedcolors, 0, sizeof (pp->usedcolors)); - if ((pp->initial_rotation += 10.0) > 45.0) { - pp->initial_rotation -= 90.0; - } } pp->counter = 0; pp->turncounter = 0; @@ -659,13 +650,11 @@ pinit(ModeInfo * mi, int zera) pp->nowdir = SelectNeighbor(mi); } + ENTRYPOINT void reshape_pipes(ModeInfo * mi, int width, int height) { - pipesstruct *pp = &pipes[MI_SCREEN(mi)]; - pinit(mi, 1); - - glViewport(0, 0, pp->WindW = (GLint) width, pp->WindH = (GLint) height); + glViewport(0, 0, width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /*glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); */ @@ -675,6 +664,53 @@ reshape_pipes(ModeInfo * mi, int width, int height) glClear(GL_COLOR_BUFFER_BIT); } +ENTRYPOINT Bool +pipes_handle_event (ModeInfo *mi, XEvent *event) +{ + pipesstruct *pp = &pipes[MI_SCREEN(mi)]; + + if (event->xany.type == ButtonPress && + event->xbutton.button == Button1) + { + pp->button_down_p = True; + gltrackball_start (pp->trackball, + event->xbutton.x, event->xbutton.y, + MI_WIDTH (mi), MI_HEIGHT (mi)); + return True; + } + else if (event->xany.type == ButtonRelease && + event->xbutton.button == Button1) + { + pp->button_down_p = False; + return True; + } + else if (event->xany.type == ButtonPress && + (event->xbutton.button == Button4 || + event->xbutton.button == Button5 || + event->xbutton.button == Button6 || + event->xbutton.button == Button7)) + { + gltrackball_mousewheel (pp->trackball, event->xbutton.button, 10, + !!event->xbutton.state); + return True; + } + else if (event->xany.type == MotionNotify && + pp->button_down_p) + { + gltrackball_track (pp->trackball, + event->xmotion.x, event->xmotion.y, + MI_WIDTH (mi), MI_HEIGHT (mi)); + return True; + } + + return False; +} + + + +static void generate_system (ModeInfo *); + + ENTRYPOINT void init_pipes (ModeInfo * mi) { @@ -688,11 +724,6 @@ init_pipes (ModeInfo * mi) } pp = &pipes[screen]; -#ifdef HAVE_JWZGLES - /* Single-buffering on iOS is so confusing! */ - dbuf_p = True; -#endif - pp->window = MI_WINDOW(mi); if ((pp->glx_context = init_GL(mi)) != NULL) { @@ -741,50 +772,65 @@ init_pipes (ModeInfo * mi) } else { MI_CLEARWINDOW(mi); } + + pp->trackball = gltrackball_init (); + generate_system (mi); } -ENTRYPOINT void -draw_pipes (ModeInfo * mi) + +static GLuint +get_dlist (ModeInfo *mi, int i) { - pipesstruct *pp = &pipes[MI_SCREEN(mi)]; + pipesstruct *pp = &pipes[MI_SCREEN(mi)]; + if (i >= pp->dlist_count) + { + pp->dlist_count++; + if (pp->dlist_count >= pp->dlist_size) + { + int s2 = (pp->dlist_size + 100) * 1.2; + pp->dlists = (GLuint *) + realloc (pp->dlists, s2 * sizeof(*pp->dlists)); + if (! pp->dlists) abort(); + pp->poly_counts = (GLuint *) + realloc (pp->poly_counts, s2 * sizeof(*pp->poly_counts)); + if (! pp->poly_counts) abort(); + pp->dlist_size = s2; + } + pp->dlists [i] = glGenLists (1); + pp->poly_counts [i] = 0; + } + return pp->dlists[i]; +} - Display *display = MI_DISPLAY(mi); - Window window = MI_WINDOW(mi); + + +static void +generate_system (ModeInfo * mi) +{ + pipesstruct *pp = &pipes[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); int newdir; int OPX, OPY, OPZ; - if (!pp->glx_context) - return; + Bool reset_p = False; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(pp->glx_context)); + pp->system_index = 0; + pp->system_size = 0; + pinit (mi, 1); - if (pp->reset) { - if (--pp->reset) { - /* Would be nice to fade to black here, by drawing successive quads - over the whole scene with gamma. */ - return; - } - pinit(mi, 1); - } + while (1) { + glNewList (get_dlist (mi, pp->system_size++), GL_COMPILE); + mi->polygon_count = 0; glPushMatrix(); - glTranslatef(0.0, 0.0, fisheye ? -3.8 : -4.8); - if (rotatepipes) - glRotatef(pp->initial_rotation, 0.0, 1.0, 0.0); - - if (!MI_IS_ICONIC(mi)) { - /* Width/height ratio handled by gluPerspective() now. */ - glScalef(Scale4Window, Scale4Window, Scale4Window); - } else { - glScalef(Scale4Iconic, Scale4Iconic, Scale4Iconic); - } - FindNeighbors(mi); - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color); + if (wire) + glColor4fv (pp->system_color); + else + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color); /* If it's the begining of a system, draw a sphere */ if (pp->olddir == dirNone) { @@ -805,15 +851,12 @@ draw_pipes (ModeInfo * mi) /* If the maximum number of system was drawn, restart (clearing the screen), */ /* else start a new system. */ if (++pp->system_number > pp->number_of_systems) { - /* pause doing nothing for N seconds before clearing the screen. */ - int secs = 3; - pp->reset = secs * 1000000 / (MI_PAUSE(mi) ? MI_PAUSE(mi) : 100); + reset_p = True; } else { pinit(mi, 0); } - glPopMatrix(); - return; + goto NEXT; } pp->counter++; pp->turncounter++; @@ -1032,16 +1075,110 @@ draw_pipes (ModeInfo * mi) glTranslatef(((pp->PX + OPX) / 2.0 - 16) / 3.0 * 4.0, ((pp->PY + OPY) / 2.0 - 12) / 3.0 * 4.0, ((pp->PZ + OPZ) / 2.0 - 16) / 3.0 * 4.0); MakeTube(mi, newdir); + NEXT: glPopMatrix(); + glEndList(); + pp->poly_counts [pp->system_size-1] = mi->polygon_count; + + if (reset_p) + break; + } +} - glFlush(); + +ENTRYPOINT void +draw_pipes (ModeInfo * mi) +{ + pipesstruct *pp = &pipes[MI_SCREEN(mi)]; + Display *display = MI_DISPLAY(mi); + Window window = MI_WINDOW(mi); + Bool wire = MI_IS_WIREFRAME(mi); + int i = 0; + + if (!pp->glx_context) + return; + + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(pp->glx_context)); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glColor3f(1.0, 1.0, 1.0); + + glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0); + glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0); + glLightfv(GL_LIGHT0, GL_POSITION, position0); + glLightfv(GL_LIGHT1, GL_AMBIENT, ambient1); + glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse1); + glLightfv(GL_LIGHT1, GL_POSITION, position1); + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); + glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); + + if (wire) + glDisable(GL_LIGHTING); + else + { + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + /* This looks crappy. */ + /* glEnable(GL_LIGHT1); */ + glEnable(GL_DEPTH_TEST); + glEnable(GL_NORMALIZE); + glEnable(GL_CULL_FACE); + } + + glShadeModel(GL_SMOOTH); + glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); + + glPushMatrix(); + + pp->initial_rotation += 0.02; + + glTranslatef(0.0, 0.0, fisheye ? -3.8 : -4.8); + + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); + gltrackball_rotate (pp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); + + if (rotatepipes) + glRotatef(pp->initial_rotation, 0.0, 1.0, 0.0); + + glScalef(Scale4Window, Scale4Window, Scale4Window); + + mi->polygon_count = 0; + + if (pp->fadeout) + { + GLfloat s = (pp->fadeout * pp->fadeout) / 10000.0; + glScalef (s, s, s); + glRotatef (90 * (1 - (pp->fadeout/100.0)), 1, 0, 0.1); + pp->fadeout -= 4; + if (pp->fadeout <= 0) + { + pp->fadeout = 0; + generate_system (mi); + } + } + else if (pp->system_index < pp->system_size) + pp->system_index++; + else + pp->fadeout = 100; + + for (i = 0; i < pp->system_index; i++) + { + glCallList (pp->dlists[i]); + mi->polygon_count += pp->poly_counts[i]; + } + + glPopMatrix(); if (mi->fps_p) do_fps (mi); + glFinish(); - if (dbuf_p) - glXSwapBuffers(display, window); + glXSwapBuffers(display, window); } + #ifndef STANDALONE ENTRYPOINT void change_pipes (ModeInfo * mi) @@ -1093,6 +1230,14 @@ release_pipes (ModeInfo * mi) glDeleteLists(pp->guageconnector, 1); if (pp->teapot) glDeleteLists(pp->teapot, 1); + if (pp->dlists) + { + int i; + for (i = 0; i < pp->dlist_count; i++) + glDeleteLists (pp->dlists[i], 1); + free (pp->dlists); + free (pp->poly_counts); + } } } diff --git a/hacks/glx/polyhedra-gl.c b/hacks/glx/polyhedra-gl.c index 1b2d7eb7..48e7ec53 100644 --- a/hacks/glx/polyhedra-gl.c +++ b/hacks/glx/polyhedra-gl.c @@ -62,6 +62,11 @@ # include #endif +#ifndef HAVE_JWZGLES +# define HAVE_TESS +#endif + + #ifdef USE_GL /* whole file */ typedef struct { @@ -381,13 +386,16 @@ new_label (ModeInfo *mi) } +#ifdef HAVE_TESS static void tess_error (GLenum errorCode) { fprintf (stderr, "%s: tesselation error: %s\n", progname, gluErrorString(errorCode)); - exit (0); + abort(); } +#endif /* HAVE_TESS */ + static void new_polyhedron (ModeInfo *mi) @@ -400,11 +408,13 @@ new_polyhedron (ModeInfo *mi) /* Use the GLU polygon tesselator so that nonconvex faces are displayed correctly (e.g., for the "pentagrammic concave deltohedron"). */ +# ifdef HAVE_TESS GLUtesselator *tobj = gluNewTess(); gluTessCallback (tobj, GLU_TESS_BEGIN, (void (*) (void)) &glBegin); gluTessCallback (tobj, GLU_TESS_END, (void (*) (void)) &glEnd); gluTessCallback (tobj, GLU_TESS_VERTEX, (void (*) (void)) &glVertex3dv); gluTessCallback (tobj, GLU_TESS_ERROR, (void (*) (void)) &tess_error); +# endif /* HAVE_TESS */ mi->polygon_count = 0; @@ -431,10 +441,20 @@ new_polyhedron (ModeInfo *mi) glNewList (bp->object_list, GL_COMPILE); if (bp->which == bp->npolyhedra-1) { + GLfloat bcolor[4]; + bcolor[0] = bp->colors[0].red / 65536.0; + bcolor[1] = bp->colors[0].green / 65536.0; + bcolor[2] = bp->colors[0].blue / 65536.0; + bcolor[3] = 1.0; + if (wire) + glColor3f (0, 1, 0); + else + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bcolor); + glScalef (0.8, 0.8, 0.8); p->nfaces = unit_teapot (6, wire); - p->nedges = p->nfaces * 2; /* #### is this right? */ - p->npoints = p->nfaces / 3; /* #### is this right? */ + p->nedges = p->nfaces * 3 / 2; + p->npoints = p->nfaces * 3; p->logical_faces = p->nfaces; p->logical_vertices = p->npoints; } @@ -455,12 +475,13 @@ new_polyhedron (ModeInfo *mi) bcolor[0] = bp->colors[f->color].red / 65536.0; bcolor[1] = bp->colors[f->color].green / 65536.0; bcolor[2] = bp->colors[f->color].blue / 65536.0; - bcolor[2] = 1.0; + bcolor[3] = 1.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bcolor); } kludge_normal (f->npoints, f->points, p->points); +# ifdef HAVE_TESS gluTessBeginPolygon (tobj, 0); gluTessBeginContour (tobj); for (j = 0; j < f->npoints; j++) @@ -470,12 +491,26 @@ new_polyhedron (ModeInfo *mi) } gluTessEndContour (tobj); gluTessEndPolygon (tobj); +# else /* !HAVE_TESS */ + glBegin (wire ? GL_LINE_LOOP : + f->npoints == 3 ? GL_TRIANGLES : + f->npoints == 4 ? GL_QUADS : + GL_POLYGON); + for (j = 0; j < f->npoints; j++) + { + point *pp = &p->points[f->points[j]]; + glVertex3f (pp->x, pp->y, pp->z); + } + glEnd(); +# endif /* !HAVE_TESS */ } } glEndList (); mi->polygon_count += p->nfaces; +# ifdef HAVE_TESS gluDeleteTess (tobj); +# endif } @@ -676,7 +711,10 @@ draw_polyhedra (ModeInfo *mi) (y - 0.5) * 8, (z - 0.5) * 15); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/providence.c b/hacks/glx/providence.c index 1f9e3bda..585bb42c 100644 --- a/hacks/glx/providence.c +++ b/hacks/glx/providence.c @@ -782,9 +782,7 @@ ENTRYPOINT void draw_providence(ModeInfo * mi) /* rotate providence */ glTranslatef(0.0, 0.0, mp->camera_z + sin(mp->theta/4.0)); glRotatef(10.0+20.0*sin(mp->theta/2.0), 1.0, 0.0, 0.0); - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate(mp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); glRotatef(mp->theta * 180.0 / Pi, 0.0, -1.0, 0.0); /* draw providence */ diff --git a/hacks/glx/queens.c b/hacks/glx/queens.c index b0df5668..88592b13 100644 --- a/hacks/glx/queens.c +++ b/hacks/glx/queens.c @@ -352,11 +352,93 @@ static int drawBoard(Queenscreen *qs) } glEnd(); + + { + GLfloat off = 0.01; + GLfloat w = qs->BOARDSIZE; + GLfloat h = 0.1; + + /* Give the board a slight lip. */ + /* #### oops, normals are wrong here, but you can't tell */ + + glColor3f(0.3, 0.3, 0.3); + glBegin (GL_QUADS); + glVertex3f (0, 0, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, -h, w); + glVertex3f (0, 0, w); + + glVertex3f (0, 0, w); + glVertex3f (0, -h, w); + glVertex3f (w, -h, w); + glVertex3f (w, 0, w); + + glVertex3f (w, 0, w); + glVertex3f (w, -h, w); + glVertex3f (w, -h, 0); + glVertex3f (w, 0, 0); + + glVertex3f (w, 0, 0); + glVertex3f (w, -h, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, 0, 0); + + glVertex3f (0, -h, 0); + glVertex3f (w, -h, 0); + glVertex3f (w, -h, w); + glVertex3f (0, -h, w); + glEnd(); + polys += 4; + + /* Fill in the underside of the board with an invisible black box + to hide the reflections that are not on tiles. Probably there's + a way to do this with stencils instead. + */ + w -= off*2; + h = 5; + + glPushMatrix(); + glTranslatef (off, 0, off); + glDisable(GL_LIGHTING); + glColor3f(0,0,0); + glBegin (GL_QUADS); + glVertex3f (0, 0, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, -h, w); + glVertex3f (0, 0, w); + + glVertex3f (0, 0, w); + glVertex3f (0, -h, w); + glVertex3f (w, -h, w); + glVertex3f (w, 0, w); + + glVertex3f (w, 0, w); + glVertex3f (w, -h, w); + glVertex3f (w, -h, 0); + glVertex3f (w, 0, 0); + + glVertex3f (w, 0, 0); + glVertex3f (w, -h, 0); + glVertex3f (0, -h, 0); + glVertex3f (0, 0, 0); + + glVertex3f (0, -h, 0); + glVertex3f (w, -h, 0); + glVertex3f (w, -h, w); + glVertex3f (0, -h, w); + glEnd(); + polys += 4; + glPopMatrix(); + if (!wire) + glEnable(GL_LIGHTING); + } + return polys; } static int display(Queenscreen *qs) { + int max = 1024; int polys = 0; glClear(clearbits); @@ -366,6 +448,7 @@ static int display(Queenscreen *qs) glRotatef(current_device_rotation(), 0, 0, 1); /* setup light attenuation */ + /* #### apparently this does nothing */ glEnable(GL_COLOR_MATERIAL); glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.8/(0.01+findAlpha(qs))); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.06); @@ -373,9 +456,7 @@ static int display(Queenscreen *qs) /** setup perspective */ glTranslatef(0.0, 0.0, -1.5*qs->BOARDSIZE); glRotatef(30.0, 1.0, 0.0, 0.0); - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate (qs->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); glRotatef(qs->theta*100, 0.0, 1.0, 0.0); glTranslatef(-0.5*qs->BOARDSIZE, 0.0, -0.5*qs->BOARDSIZE); @@ -390,6 +471,18 @@ static int display(Queenscreen *qs) glEnable(GL_LIGHT0); } + /* Since the lighting attenuation trick up there doesn't seem to be working, + let's drop the old board down and drop the new board in. */ + if (qs->steps < (max/8.0)) { + GLfloat y = qs->steps / (max/8.0); + y = sin (M_PI/2 * y); + glTranslatef (0, 10 - (y * 10), 0); + } else if (qs->steps > max-(max/8.0)) { + GLfloat y = (qs->steps - (max-(max/8.0))) / (GLfloat) (max/8.0); + y = 1 - sin (M_PI/2 * (1-y)); + glTranslatef (0, -y * 15, 0); + } + /* draw reflections */ if(!wire) { polys += draw_reflections(qs); @@ -409,7 +502,7 @@ static int display(Queenscreen *qs) qs->theta += .002; /* zero out board, find new solution of size MINBOARD <= i <= MAXBOARD */ - if(++qs->steps == 1024) { + if(++qs->steps == max) { qs->steps = 0; blank(qs); qs->BOARDSIZE = MINBOARD + (random() % (MAXBOARD - MINBOARD + 1)); @@ -500,7 +593,7 @@ ENTRYPOINT void init_queens(ModeInfo *mi) qs->BOARDSIZE = 8; /* 8 cuz its classic */ - gen_model_lists(-1, poly_counts); + chessmodels_gen_lists(-1, poly_counts); qs->queen_list = QUEEN; qs->queen_polys = poly_counts[QUEEN]; diff --git a/hacks/glx/rubik.c b/hacks/glx/rubik.c index 0f40347c..20ced973 100644 --- a/hacks/glx/rubik.c +++ b/hacks/glx/rubik.c @@ -111,13 +111,14 @@ static const char sccsid[] = "@(#)rubik.c 5.01 2001/03/01 xlockmore"; "*cycles: 20 \n" \ "*size: -6 \n" # define refresh_rubik 0 -# define rubik_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ # include "vis.h" #endif /* !STANDALONE */ +#include "gltrackball.h" + #ifdef MODE_rubik #define DEF_SIZEX "0" @@ -372,6 +373,8 @@ typedef struct { GLfloat rotatestep; GLfloat PX, PY, VX, VY; GLXContext *glx_context; + Bool button_down_p; + trackball_state *trackball; } rubikstruct; static const float front_shininess[] = {60.0}; @@ -1816,6 +1819,49 @@ reshape_rubik(ModeInfo * mi, int width, int height) } +ENTRYPOINT Bool +rubik_handle_event (ModeInfo *mi, XEvent *event) +{ + rubikstruct *rp = &rubik[MI_SCREEN(mi)]; + + if (event->xany.type == ButtonPress && + event->xbutton.button == Button1) + { + rp->button_down_p = True; + gltrackball_start (rp->trackball, + event->xbutton.x, event->xbutton.y, + MI_WIDTH (mi), MI_HEIGHT (mi)); + return True; + } + else if (event->xany.type == ButtonRelease && + event->xbutton.button == Button1) + { + rp->button_down_p = False; + return True; + } + else if (event->xany.type == ButtonPress && + (event->xbutton.button == Button4 || + event->xbutton.button == Button5 || + event->xbutton.button == Button6 || + event->xbutton.button == Button7)) + { + gltrackball_mousewheel (rp->trackball, event->xbutton.button, 10, + !!event->xbutton.state); + return True; + } + else if (event->xany.type == MotionNotify && + rp->button_down_p) + { + gltrackball_track (rp->trackball, + event->xmotion.x, event->xmotion.y, + MI_WIDTH (mi), MI_HEIGHT (mi)); + return True; + } + + return False; +} + + static Bool pinit(ModeInfo * mi) { @@ -1897,6 +1943,8 @@ init_rubik(ModeInfo * mi) rp->PX = ((float) LRAND() / (float) MAXRAND) * 2.0 - 1.0; rp->PY = ((float) LRAND() / (float) MAXRAND) * 2.0 - 1.0; + rp->trackball = gltrackball_init (); + if ((rp->glx_context = init_GL(mi)) != NULL) { reshape_rubik(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); @@ -1983,6 +2031,11 @@ draw_rubik(ModeInfo * mi) glScalef(Scale4Iconic * rp->WindH / rp->WindW, Scale4Iconic, Scale4Iconic); } + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); + gltrackball_rotate (rp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); + glRotatef(rp->step * 100, 1, 0, 0); glRotatef(rp->step * 95, 0, 1, 0); glRotatef(rp->step * 90, 0, 0, 1); diff --git a/hacks/glx/rubikblocks.c b/hacks/glx/rubikblocks.c index e8caf32f..86968ad9 100644 --- a/hacks/glx/rubikblocks.c +++ b/hacks/glx/rubikblocks.c @@ -262,7 +262,12 @@ draw_main(ModeInfo *mi, rubikblocks_conf *cp) glLoadIdentity(); get_position(cp->rot, &x, &y, &z, !cp->button_down); glTranslatef((x-0.5)*6, (y-0.5)*6, -20); + + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate(cp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); + get_rotation(cp->rot, &x, &y, &z, !cp->button_down); glRotatef(x*360, 1, 0, 0); glRotatef(y*360, 0, 1, 0); diff --git a/hacks/glx/sballs.c b/hacks/glx/sballs.c index 76b60ec0..833b0001 100644 --- a/hacks/glx/sballs.c +++ b/hacks/glx/sballs.c @@ -580,7 +580,10 @@ static void Draw(ModeInfo * mi) glEnd(); mi->polygon_count++; + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (sb->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); /* rotate the balls */ glRotatef(sb->rotm[0], 1.0f, 0.0f, 0.0f); diff --git a/hacks/glx/sierpinski3d.c b/hacks/glx/sierpinski3d.c index 07836998..7bcefcf2 100644 --- a/hacks/glx/sierpinski3d.c +++ b/hacks/glx/sierpinski3d.c @@ -327,7 +327,10 @@ draw(ModeInfo *mi) (y - 0.5) * 10, (z - 0.5) * 20); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (gp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (gp->rot, &x, &y, &z, !gp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/skytentacles.c b/hacks/glx/skytentacles.c index ace1e594..c9f1febe 100644 --- a/hacks/glx/skytentacles.c +++ b/hacks/glx/skytentacles.c @@ -993,7 +993,7 @@ draw_tentacles (ModeInfo *mi) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); - + glRotatef(current_device_rotation(), 0, 0, 1); # if 1 glScalef (3, 3, 3); @@ -1017,7 +1017,6 @@ draw_tentacles (ModeInfo *mi) # endif gltrackball_rotate (tc->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); mi->polygon_count = 0; diff --git a/hacks/glx/sonar-icmp.c b/hacks/glx/sonar-icmp.c index dfa277d4..fa1ea893 100644 --- a/hacks/glx/sonar-icmp.c +++ b/hacks/glx/sonar-icmp.c @@ -39,6 +39,10 @@ */ #endif +#ifndef USE_IPHONE +# define READ_FILES +#endif + #if defined(HAVE_ICMP) || defined(HAVE_ICMPHDR) # include # include @@ -57,6 +61,9 @@ # include # include # include +# ifdef HAVE_GETIFADDRS +# include +# endif #endif /* HAVE_ICMP || HAVE_ICMPHDR */ #if defined(HAVE_ICMP) @@ -79,10 +86,15 @@ # undef HAVE_PING #endif +#ifndef USE_IPHONE +# define LOAD_FILES +#endif + #ifndef HAVE_PING sonar_sensor_data * -init_ping (Display *dpy, char **error_ret, const char *subnet, int timeout, +init_ping (Display *dpy, char **error_ret, char **desc_ret, + const char *subnet, int timeout, Bool resolve_p, Bool times_p, Bool debug_p) { if (! (!subnet || !*subnet || !strcmp(subnet, "default"))) @@ -330,11 +342,13 @@ bogie_for_host (sonar_sensor_data *ssd, const char *name, Bool resolve_p) return b; FAIL: - if (b) free_bogie (ssd, b); + if (b) sonar_free_bogie (ssd, b); return 0; } +#ifdef READ_FILES + /* Return a list of bogies read from a file. The file can be like /etc/hosts or .ssh/known_hosts or probably just about anything that has host names in it. @@ -442,6 +456,7 @@ read_hosts_file (sonar_sensor_data *ssd, const char *filename) fclose(fp); return list; } +#endif /* READ_FILES */ static sonar_bogie * @@ -484,22 +499,41 @@ delete_duplicate_hosts (sonar_sensor_data *ssd, sonar_bogie *list) } +static unsigned int +width_mask (int width) +{ + unsigned int m = 0; + int i; + for (i = 0; i < width; i++) + m |= (1L << (31-i)); + return m; +} + + +#ifdef HAVE_GETIFADDRS +static int +mask_width (unsigned int mask) +{ + int i; + for (i = 0; i < 32; i++) + if (mask & (1 << i)) + break; + return 32-i; +} +#endif + + /* Generate a list of bogies consisting of all of the entries on the same subnet. 'base' ip is in network order; 0 means localhost. */ static sonar_bogie * -subnet_hosts (sonar_sensor_data *ssd, char **error_ret, +subnet_hosts (sonar_sensor_data *ssd, char **error_ret, char **desc_ret, unsigned long n_base, int subnet_width) { ping_data *pd = (ping_data *) ssd->closure; unsigned long h_mask; /* host order */ unsigned long h_base; /* host order */ - - /* Local Variables */ - - char hostname[BUFSIZ]; char address[BUFSIZ]; - struct hostent *hent; char *p; int i; sonar_bogie *new; @@ -532,79 +566,172 @@ subnet_hosts (sonar_sensor_data *ssd, char **error_ret, if (pd->debug_p) fprintf (stderr, "%s: adding %d-bit subnet\n", progname, subnet_width); - /* Get our hostname */ - if (gethostname(hostname, BUFSIZ)) + if (! n_base) { - *error_ret = strdup ("Unable to determine\n" - "local host name!"); - return 0; - } +# ifdef HAVE_GETIFADDRS - /* Get our IP address and convert it to a string */ + /* To determine the local subnet, we need to know the local IP address. + Do this by looking at the IPs of every network interface. + */ + struct in_addr in = { 0, }; + struct ifaddrs *all = 0, *ifa; + + if (pd->debug_p) + fprintf (stderr, "%s: listing network interfaces\n", progname); + + getifaddrs (&all); + for (ifa = all; ifa; ifa = ifa->ifa_next) + { + struct in_addr in2; + unsigned long mask; + if (ifa->ifa_addr->sa_family != AF_INET) + { + if (pd->debug_p) + fprintf (stderr, "%s: if: %4s: %s\n", progname, + ifa->ifa_name, + (ifa->ifa_addr->sa_family == AF_UNIX ? "local" : + ifa->ifa_addr->sa_family == AF_LINK ? "link" : + ifa->ifa_addr->sa_family == AF_INET6 ? "ipv6" : + "other")); + continue; + } + in2 = ((struct sockaddr_in *) ifa->ifa_addr)->sin_addr; + mask = ntohl (((struct sockaddr_in *) ifa->ifa_netmask) + ->sin_addr.s_addr); + if (pd->debug_p) + fprintf (stderr, "%s: if: %4s: inet = %s /%d 0x%08lx\n", + progname, + ifa->ifa_name, + inet_ntoa (in2), + mask_width (mask), + mask); + if (in2.s_addr == 0x0100007f || /* 127.0.0.1 in network order */ + mask == 0) + continue; + + /* At least on the AT&T 3G network, pinging either of the two + hosts on a /31 network doesn't work, so don't try. + */ + if (mask_width (mask) == 31) + { + char buf[255]; + sprintf (buf, + "Can't ping subnet:\n" + "local network is\n" + "%s/%d,\n" + "a p2p bridge\n" + "on if %s.", + inet_ntoa (in2), mask_width (mask), ifa->ifa_name); + if (*error_ret) free (*error_ret); + *error_ret = strdup (buf); + continue; + } + + in = in2; + subnet_width = mask_width (mask); + } + + if (in.s_addr) + { + if (*error_ret) free (*error_ret); + *error_ret = 0; + n_base = in.s_addr; /* already in network order, I think? */ + } + else if (!*error_ret) + *error_ret = strdup ("Unable to determine\nlocal IP address\n"); + + if (all) + freeifaddrs (all); + + if (*error_ret) + return 0; + +# else /* !HAVE_GETIFADDRS */ + + /* If we can't walk the list of network interfaces to figure out + our local IP address, try to do it by finding the local host + name, then resolving that. + */ + char hostname[BUFSIZ]; + struct hostent *hent = 0; + + if (gethostname(hostname, BUFSIZ)) + { + *error_ret = strdup ("Unable to determine\n" + "local host name!"); + return 0; + } + + /* Get our IP address and convert it to a string */ - hent = gethostbyname(hostname); - if (! hent) - { - strcat (hostname, ".local"); /* Necessary on iphone */ hent = gethostbyname(hostname); - } + if (! hent) + { + strcat (hostname, ".local"); /* Necessary on iphone */ + hent = gethostbyname(hostname); + } - if (! hent) - { - /* Without being able to resolve localhost to an IP, we don't know - what our local subnet is. I don't know another way to find that, - short of running "ifconfig" and parsing the output... - */ - sprintf(buf, - "Unable to resolve\n" - "local host \"%s\"", - hostname); - *error_ret = strdup(buf); - return 0; + if (! hent) + { + sprintf(buf, + "Unable to resolve\n" + "local host \"%s\"", + hostname); + *error_ret = strdup(buf); + return 0; + } + + strcpy (address, inet_ntoa(*((struct in_addr *)hent->h_addr_list[0]))); + n_base = pack_addr (hent->h_addr_list[0][0], + hent->h_addr_list[0][1], + hent->h_addr_list[0][2], + hent->h_addr_list[0][3]); + + if (n_base == 0x0100007f) /* 127.0.0.1 in network order */ + { + unsigned int a, b, c, d; + unpack_addr (n_base, &a, &b, &c, &d); + sprintf (buf, + "Unable to determine\n" + "local subnet address:\n" + "\"%s\"\n" + "resolves to\n" + "loopback address\n" + "%u.%u.%u.%u.", + hostname, a, b, c, d); + *error_ret = strdup(buf); + return 0; + } + +# endif /* !HAVE_GETIFADDRS */ } - strcpy (address, inet_ntoa(*((struct in_addr *)hent->h_addr_list[0]))); /* Construct targets for all addresses in this subnet */ - h_mask = 0; - for (i = 0; i < subnet_width; i++) - h_mask |= (1L << (31-i)); - - /* If no base IP specified, assume localhost. */ - if (n_base == 0) - n_base = pack_addr (hent->h_addr_list[0][0], - hent->h_addr_list[0][1], - hent->h_addr_list[0][2], - hent->h_addr_list[0][3]); + h_mask = width_mask (subnet_width); h_base = ntohl (n_base); - if (h_base == 0x7F000001L) /* 127.0.0.1 in host order */ - { - unsigned int a, b, c, d; - unpack_addr (n_base, &a, &b, &c, &d); - sprintf (buf, - "Unable to determine\n" - "local subnet address:\n" - "\"%s\"\n" - "resolves to\n" - "loopback address\n" - "%u.%u.%u.%u.", - hostname, a, b, c, d); - *error_ret = strdup(buf); - return 0; - } + if (desc_ret && !*desc_ret) { + unsigned int a, b, c, d; + char buf[255]; + unpack_addr (n_base, &a, &b, &c, &d); + sprintf (buf, "%u.%u.%u.%u/%d", a, b, c, d, subnet_width); + *desc_ret = strdup (buf); + } for (i = 255; i >= 0; i--) { unsigned int a, b, c, d; int ip = (h_base & 0xFFFFFF00L) | i; /* host order */ - if ((ip & h_mask) != (h_base & h_mask)) /* not in mask range at all */ + if ((ip & h_mask) != (h_base & h_mask)) /* skip out-of-subnet host */ continue; - if ((ip & ~h_mask) == 0) /* broadcast address */ + else if (subnet_width == 31) /* 1-bit bridge: 2 hosts */ + ; + else if ((ip & ~h_mask) == 0) /* skip network address */ continue; - if ((ip & ~h_mask) == ~h_mask) /* broadcast address */ + else if ((ip & ~h_mask) == ~h_mask) /* skip broadcast address */ continue; unpack_addr (htonl (ip), &a, &b, &c, &d); @@ -749,7 +876,7 @@ checksum (u_short *packet, int size) static sonar_bogie * copy_ping_bogie (sonar_sensor_data *ssd, const sonar_bogie *b) { - sonar_bogie *b2 = copy_bogie (ssd, b); + sonar_bogie *b2 = sonar_copy_bogie (ssd, b); if (b->closure) { ping_bogie *pb = (ping_bogie *) b->closure; @@ -949,7 +1076,7 @@ ping_free_data (sonar_sensor_data *ssd, void *closure) while (b) { sonar_bogie *b2 = b->next; - free_bogie (ssd, b); + sonar_free_bogie (ssd, b); b = b2; } free (pd); @@ -1007,25 +1134,32 @@ ping_scan (sonar_sensor_data *ssd) /* Returns a list of hosts to ping based on the "-ping" argument. */ static sonar_bogie * -parse_mode (sonar_sensor_data *ssd, char **error_ret, +parse_mode (sonar_sensor_data *ssd, char **error_ret, char **desc_ret, const char *ping_arg, Bool ping_works_p) { ping_data *pd = (ping_data *) ssd->closure; char *source, *token, *end, dummy; sonar_bogie *hostlist = 0; + const char *fallback = "subnet"; - if (!ping_arg || !*ping_arg || !strcmp (ping_arg, "default")) - source = strdup("subnet/28"); - else + AGAIN: + + if (fallback && (!ping_arg || !*ping_arg || !strcmp (ping_arg, "default"))) + source = strdup(fallback); + else if (ping_arg) source = strdup(ping_arg); + else + return 0; token = source; end = source + strlen(source); while (token < end) { char *next; - sonar_bogie *new; + sonar_bogie *new = 0; +# ifdef READ_FILES struct stat st; +# endif unsigned int n0=0, n1=0, n2=0, n3=0, m=0; char d; @@ -1054,7 +1188,7 @@ parse_mode (sonar_sensor_data *ssd, char **error_ret, subnet: A.B.C/M */ unsigned long ip = pack_addr (n0, n1, n2, n3); - new = subnet_hosts (ssd, error_ret, ip, m); + new = subnet_hosts (ssd, error_ret, desc_ret, ip, m); } else if (4 == sscanf (token, "%u.%u.%u.%u %c", &n0, &n1, &n2, &n3, &d)) { @@ -1064,20 +1198,27 @@ parse_mode (sonar_sensor_data *ssd, char **error_ret, } else if (!strcmp (token, "subnet")) { - new = subnet_hosts (ssd, error_ret, 0, 24); + new = subnet_hosts (ssd, error_ret, desc_ret, 0, 24); } else if (1 == sscanf (token, "subnet/%u %c", &m, &dummy)) { - new = subnet_hosts (ssd, error_ret, 0, m); + new = subnet_hosts (ssd, error_ret, desc_ret, 0, m); } else if (*token == '.' || *token == '/' || - *token == '$' || *token == '~' || - !stat (token, &st)) + *token == '$' || *token == '~') { - /* file name - */ +# ifdef READ_FILES new = read_hosts_file (ssd, token); +# else + if (pd->debug_p) fprintf (stderr, "%s: skipping file\n", progname); +# endif } +# ifdef READ_FILES + else if (!stat (token, &st)) + { + new = read_hosts_file (ssd, token); + } +# endif /* READ_FILES */ else { /* not an existant file - must be a host name @@ -1102,20 +1243,35 @@ parse_mode (sonar_sensor_data *ssd, char **error_ret, } free (source); + + /* If the arg was completely unparsable, fall back to the local subnet. + This happens if the default is "/etc/hosts" but READ_FILES is off. + Or if we're on a /31 network, in which case we try twice then fail. + */ + if (!hostlist && fallback) + { + if (pd->debug_p) + fprintf (stderr, "%s: no hosts parsed! Trying %s\n", + progname, fallback); + ping_arg = fallback; + fallback = 0; + goto AGAIN; + } + return hostlist; } sonar_sensor_data * -init_ping (Display *dpy, char **error_ret, - const char *subnet, int timeout, - Bool resolve_p, Bool times_p, Bool debug_p) +sonar_init_ping (Display *dpy, char **error_ret, char **desc_ret, + const char *subnet, int timeout, + Bool resolve_p, Bool times_p, Bool debug_p) { sonar_sensor_data *ssd = (sonar_sensor_data *) calloc (1, sizeof(*ssd)); ping_data *pd = (ping_data *) calloc (1, sizeof(*pd)); sonar_bogie *b; char *s; - int i, div; + int i; Bool socket_initted_p = False; Bool socket_raw_p = False; @@ -1188,7 +1344,8 @@ init_ping (Display *dpy, char **error_ret, /* Generate a list of targets */ - pd->targets = parse_mode (ssd, error_ret, subnet, socket_initted_p); + pd->targets = parse_mode (ssd, error_ret, desc_ret, subnet, + socket_initted_p); pd->targets = delete_duplicate_hosts (ssd, pd->targets); if (debug_p) @@ -1220,12 +1377,21 @@ init_ping (Display *dpy, char **error_ret, return 0; } - /* Distribute them evenly around the display field. + /* Distribute them evenly around the display field, clockwise. + Even on a /24, allocated IPs tend to cluster together, so + don't put any two hosts closer together than N degrees to + avoid unnecessary overlap when we have plenty of space due + to addresses that probably won't respond. */ - div = pd->target_count; - if (div > 90) div = 90; /* no closer together than 4 degrees */ - for (i = 0, b = pd->targets; b; b = b->next, i++) - b->th = M_PI * 2 * ((div - i) % div) / div; + { + int min_separation = 23; /* degrees */ + int div = pd->target_count; + if (div > 360 / min_separation) + div = 360 / min_separation; + for (i = 0, b = pd->targets; b; b = b->next, i++) + b->th = (M_PI/2 - + M_PI * 2 * ((div - i) % div) / div); + } return ssd; } diff --git a/hacks/glx/sonar-sim.c b/hacks/glx/sonar-sim.c index f87de664..ea5452e7 100644 --- a/hacks/glx/sonar-sim.c +++ b/hacks/glx/sonar-sim.c @@ -1,4 +1,4 @@ -/* sonar, Copyright (c) 1998-2008 Jamie Zawinski and Stephen Martin +/* sonar, Copyright (c) 1998-2012 Jamie Zawinski and Stephen Martin * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -53,7 +53,7 @@ sim_scan (sonar_sensor_data *ssd) while (b->r < 0.2) b->r += scale * 0.1; while (b->r > 0.9) b->r -= scale * 0.1; - b2 = copy_bogie (ssd, b); + b2 = sonar_copy_bogie (ssd, b); b2->next = list; list = b2; } @@ -86,10 +86,10 @@ make_bogies (sonar_sensor_data *ssd) sonar_sensor_data * -init_simulation (Display *dpy, char **error_ret, - const char *team_a_name, const char *team_b_name, - int team_a_count, int team_b_count, - Bool debug_p) +sonar_init_simulation (Display *dpy, char **error_ret, char **desc_ret, + const char *team_a_name, const char *team_b_name, + int team_a_count, int team_b_count, + Bool debug_p) { sonar_sensor_data *ssd = (sonar_sensor_data *) calloc (1, sizeof(*ssd)); sim_data *sd = (sim_data *) calloc (1, sizeof(*sd)); diff --git a/hacks/glx/sonar.c b/hacks/glx/sonar.c index ac51a2ce..bafb43ed 100644 --- a/hacks/glx/sonar.c +++ b/hacks/glx/sonar.c @@ -43,11 +43,12 @@ * * It should be easy to extend this code to support other sorts of sensors. * Some ideas: + * * - search the output of "netstat" for the list of hosts to ping; * - plot the contents of /proc/interrupts; * - plot the process table, by process size, cpu usage, or total time; * - plot the logged on users by idle time or cpu usage. - * + * - plot IM contacts or Facebook friends and their last-activity times. */ #define DEF_FONT "-*-lucidatypewriter-bold-r-normal-*-*-480-*-*-*-*-iso8859-1" @@ -108,8 +109,10 @@ typedef struct { texture_font_data *texfont; + enum { MSG, RESOLVE, RUN } state; sonar_sensor_data *ssd; char *error; + char *desc; sonar_bogie *displayed; /* on screen and fading */ sonar_bogie *pending; /* returned by sensor, not yet on screen */ @@ -331,10 +334,10 @@ draw_text (ModeInfo *mi, const char *string, GLfloat r, GLfloat th, char *string2 = strdup (string); char *token = string2; char *line; - GLfloat color[4]; if (size <= 0) /* if size not specified, draw in yellow with alpha */ { + GLfloat color[4]; color[0] = 1; color[1] = 1; color[2] = 0; @@ -499,7 +502,7 @@ draw_bogies (ModeInfo *mi) /* called from sonar-sim.c and sonar-icmp.c */ sonar_bogie * -copy_bogie (sonar_sensor_data *ssd, const sonar_bogie *b) +sonar_copy_bogie (sonar_sensor_data *ssd, const sonar_bogie *b) { sonar_bogie *b2 = (sonar_bogie *) calloc (1, sizeof(*b2)); b2->name = strdup (b->name); @@ -519,7 +522,7 @@ copy_bogie (sonar_sensor_data *ssd, const sonar_bogie *b) /* called from sonar-icmp.c */ void -free_bogie (sonar_sensor_data *ssd, sonar_bogie *b) +sonar_free_bogie (sonar_sensor_data *ssd, sonar_bogie *b) { if (b->closure) ssd->free_bogie_cb (ssd, b->closure); @@ -542,7 +545,7 @@ delete_bogie (sonar_sensor_data *ssd, sonar_bogie *b, prev->next = b->next; else (*from_list) = b->next; - free_bogie (ssd, b); + sonar_free_bogie (ssd, b); break; } } @@ -569,7 +572,7 @@ copy_and_insert_bogie (sonar_sensor_data *ssd, sonar_bogie *b, } } - b = copy_bogie (ssd, b); + b = sonar_copy_bogie (ssd, b); b->next = *to_list; *to_list = b; } @@ -727,7 +730,7 @@ draw_startup_blurb (ModeInfo *mi) /* only leave error message up for N seconds */ if (sp->error && - sp->start_time + 4 < double_time()) + sp->start_time + 6 < double_time()) { free (sp->error); sp->error = 0; @@ -852,6 +855,7 @@ init_sonar (ModeInfo *mi) sp->start_time = double_time (); sp->sweep_offset = random() % 60; sp->sweep_th = -1; + sp->state = MSG; } @@ -865,18 +869,21 @@ init_sensor (ModeInfo *mi) if (!ping_arg || !*ping_arg || !strcmp(ping_arg, "default") || !!strcmp (ping_arg, "simulation")) - sp->ssd = init_ping (MI_DISPLAY (mi), &sp->error, ping_arg, - ping_timeout, resolve_p, times_p, debug_p); + sp->ssd = sonar_init_ping (MI_DISPLAY (mi), &sp->error, &sp->desc, + ping_arg, ping_timeout, resolve_p, times_p, + debug_p); + + sp->start_time = double_time (); /* for error message timing */ /* Disavow privs. This was already done in init_ping(), but we might not have called that at all, so do it again. */ setuid(getuid()); if (!sp->ssd) - sp->ssd = init_simulation (MI_DISPLAY (mi), &sp->error, - team_a_name, team_b_name, - team_a_count, team_b_count, - debug_p); + sp->ssd = sonar_init_simulation (MI_DISPLAY (mi), &sp->error, &sp->desc, + team_a_name, team_b_name, + team_a_count, team_b_count, + debug_p); if (!sp->ssd) abort(); } @@ -923,6 +930,8 @@ draw_sonar (ModeInfo *mi) } glPushMatrix (); + glRotatef(current_device_rotation(), 0, 0, 1); + { GLfloat s = 7; if (MI_WIDTH(mi) < MI_HEIGHT(mi)) @@ -931,7 +940,6 @@ draw_sonar (ModeInfo *mi) } gltrackball_rotate (sp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); if (wobble_p) { @@ -969,8 +977,33 @@ draw_sonar (ModeInfo *mi) glCallList (sp->grid_list); mi->polygon_count += sp->screen_polys; - if (! sp->ssd || sp->error) + if (sp->desc) /* local subnet */ + { + glPushMatrix(); + glTranslatef (0, 0, 0.00002); + mi->polygon_count += draw_text (mi, sp->desc, 1.35, M_PI * 0.75, 0, 10); + /* glRotatef (45, 0, 0, 1); */ + /* mi->polygon_count += draw_text (mi, sp->desc, 1.2, M_PI/2, 0, 10); */ + glPopMatrix(); + } + + if (sp->error) + sp->state = MSG; + + switch (sp->state) { + case MSG: /* Frame 1: get "Resolving Hosts" on screen. */ draw_startup_blurb(mi); + sp->state++; + break; + case RESOLVE: /* Frame 2: gethostbyaddr may take a while. */ + if (! sp->ssd) + init_sensor (mi); + sp->state++; + break; + case RUN: /* Frame N: ping away */ + sweep (sp); + break; + } glPopMatrix (); @@ -978,12 +1011,6 @@ draw_sonar (ModeInfo *mi) glFinish(); glXSwapBuffers(dpy, window); - - if (! sp->ssd) - /* Just starting up. "Resolving hosts" text printed. Go stall. */ - init_sensor (mi); - else - sweep (sp); } ENTRYPOINT void diff --git a/hacks/glx/sonar.h b/hacks/glx/sonar.h index 595dcac9..d6473e00 100644 --- a/hacks/glx/sonar.h +++ b/hacks/glx/sonar.h @@ -1,4 +1,4 @@ -/* sonar, Copyright (c) 1998-2008 Jamie Zawinski and Stephen Martin +/* sonar, Copyright (c) 1998-2012 Jamie Zawinski and Stephen Martin * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -42,27 +42,30 @@ struct sonar_sensor_data { }; /* frees bogie and its contents, including calling the free_bogie_cb. */ -extern void free_bogie (sonar_sensor_data *ssd, sonar_bogie *b); +extern void sonar_free_bogie (sonar_sensor_data *ssd, sonar_bogie *b); /* makes a copy of the bogie, not including the 'closure' data. */ -extern sonar_bogie *copy_bogie (sonar_sensor_data *ssd, const sonar_bogie *b); +extern sonar_bogie *sonar_copy_bogie (sonar_sensor_data *, + const sonar_bogie *); /* Set up and return sensor state for ICMP pings. */ -extern sonar_sensor_data *init_ping (Display *dpy, - char **error_ret, - const char *subnets, - int ping_timeout, - Bool resolve_p, Bool times_p, - Bool debug_p); - -/* Set up and return sensor state for the simulation. */ -extern sonar_sensor_data *init_simulation (Display *dpy, +extern sonar_sensor_data *sonar_init_ping (Display *dpy, char **error_ret, - const char *team_a_name, - const char *team_b_name, - int team_a_count, - int team_b_count, + char **desc_ret, + const char *subnets, + int ping_timeout, + Bool resolve_p, Bool times_p, Bool debug_p); +/* Set up and return sensor state for the simulation. */ +extern sonar_sensor_data *sonar_init_simulation (Display *dpy, + char **error_ret, + char **desc_ret, + const char *team_a_name, + const char *team_b_name, + int team_a_count, + int team_b_count, + Bool debug_p); + #endif /* __SONAR_XSCREENSAVER_H__ */ diff --git a/hacks/glx/sonar.man b/hacks/glx/sonar.man index bb3b07e1..9927b3bb 100644 --- a/hacks/glx/sonar.man +++ b/hacks/glx/sonar.man @@ -54,19 +54,22 @@ Run in simulation mode instead of pinging real hosts. Ping the given host. .TP 12 .I A.B.C.D -Ping the given IP address. +Ping the given IPv4 address. .TP 12 .B subnet -Ping the local class C subnet (the nearest 255 addresses). +Ping the local subnet. On systems where we can determine the local +network mask, we use that; otherwise, we assume Class C (254 hosts). .TP 12 .B subnet/\fINN\fP Ping a different-sized local subnet: e.g., \fBsubnet/28\fP would ping -a 4-bit subnet (the nearest 15 addresses). +a 4-bit subnet (the nearest 14 addresses). On systems where we can +determine the local network mask, we always use that. .TP 12 .I A.B.C.D/NN -Ping an arbitrary other subnet. The IP address specifies the base address, -and the part after the slash is how wide the subnet is. Typical values -are /24 (for 255 addresses) and /28 (for 15 addresses). +Ping an arbitrary other IPv4 subnet. The address specifies +the base address, and the part after the slash is how wide the +subnet is. Typical values are /24 (for 254 addresses) and /28 (for +14 addresses). .TP 12 .I filename Ping the hosts listed in the given file. This file can be in the @@ -138,12 +141,15 @@ This means that if any the hosts you are pinging take longer than 2 seconds to respond, they won't show up; and if you are pinging several hosts with very fast response times, they will all appear close to the center of the screen (making their names hard to read.) +.SH BUGS +Does not support IPv6. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), -.BR ping (8) +.BR ping (8), +.BR ping6 (8) .SH COPYRIGHT -Copyright \(co 2000-2008 by Jamie Zawinski +Copyright \(co 2000-2012 by Jamie Zawinski .RE Copyright \(co 1998 by Stephen Martin. diff --git a/hacks/glx/spheremonics.c b/hacks/glx/spheremonics.c index 4ad36c8e..0da7b0c7 100644 --- a/hacks/glx/spheremonics.c +++ b/hacks/glx/spheremonics.c @@ -851,7 +851,10 @@ draw_spheremonics (ModeInfo *mi) (y - 0.5) * 6, (z - 0.5) * 8); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (cc->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation (cc->rot, &x, &y, &z, !cc->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/stairs.c b/hacks/glx/stairs.c index 0bd61c2e..b300ee13 100644 --- a/hacks/glx/stairs.c +++ b/hacks/glx/stairs.c @@ -496,6 +496,7 @@ ENTRYPOINT void draw_stairs (ModeInfo * mi) { stairsstruct *sp = &stairs[MI_SCREEN(mi)]; + GLfloat rot = current_device_rotation(); Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); @@ -509,6 +510,14 @@ draw_stairs (ModeInfo * mi) glPushMatrix(); + glRotatef(rot, 0, 0, 1); + if ((rot > 45 && rot < 135) || + (rot < -45 && rot > -135)) + { + GLfloat s = MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi); + glScalef (s, 1/s, 1); + } + glTranslatef(0.0, 0.0, -10.0); if (!MI_IS_ICONIC(mi)) { @@ -518,7 +527,6 @@ draw_stairs (ModeInfo * mi) } gltrackball_rotate (sp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); glTranslatef(0, 0.5, 0); glRotatef(44.5, 1, 0, 0); diff --git a/hacks/glx/stonerview-move.c b/hacks/glx/stonerview-move.c index b8a2041b..fc2931d4 100644 --- a/hacks/glx/stonerview-move.c +++ b/hacks/glx/stonerview-move.c @@ -32,7 +32,7 @@ void -init_move(stonerview_state *st) +stonerview_init_move(stonerview_state *st) { /*st->theta = new_osc_linear( new_osc_wrap(0, 36000, 25), @@ -95,15 +95,12 @@ init_move(stonerview_state *st) new_osc_buffer(st, new_osc_wrap(st, 0, 3600, 17)), new_osc_buffer(st, new_osc_wrap(st, 0, 3600, 7))); - move_increment(st); -} - -void final_move(stonerview_state *st) -{ + stonerview_move_increment(st); } /* Set up the list of polygon data for rendering. */ -void move_increment(stonerview_state *st) +void +stonerview_move_increment(stonerview_state *st) { int ix, val; /* GLfloat fval; */ @@ -112,7 +109,7 @@ void move_increment(stonerview_state *st) GLfloat ptrad, pttheta; for (ix=0; ixnum_els; ix++) { - elem_t *el = &st->elist[ix]; + stonerview_elem_t *el = &st->elist[ix]; /* Grab r and theta... */ val = osc_get(st, st->theta, ix); diff --git a/hacks/glx/stonerview-move.h b/hacks/glx/stonerview-move.h index 096dbbc1..a3e0acd2 100644 --- a/hacks/glx/stonerview-move.h +++ b/hacks/glx/stonerview-move.h @@ -13,19 +13,20 @@ #ifndef __STONERVIEW_MOVE_H__ #define __STONERVIEW_MOVE_H__ -typedef struct elem_struct { +typedef struct { GLfloat pos[3]; GLfloat vervec[2]; GLfloat col[4]; -} elem_t; +} stonerview_elem_t; -extern void init_move(stonerview_state *); -extern void final_move(stonerview_state *); -extern void move_increment(stonerview_state *); +extern void stonerview_init_move(stonerview_state *); +extern void stonerview_final_move(stonerview_state *); +extern void stonerview_move_increment(stonerview_state *); -extern stonerview_state * init_view(int wireframe_p, int transparent_p); -extern void win_draw(stonerview_state *); -extern void win_release(stonerview_state *); +extern stonerview_state * stonerview_init_view(int wireframe_p, + int transparent_p); +extern void stonerview_win_draw(stonerview_state *); +extern void stonerview_win_release(stonerview_state *); #endif /* __STONERVIEW_MOVE_H__ */ diff --git a/hacks/glx/stonerview-view.c b/hacks/glx/stonerview-view.c index 08fc525e..d66eab28 100644 --- a/hacks/glx/stonerview-view.c +++ b/hacks/glx/stonerview-view.c @@ -27,14 +27,14 @@ static GLfloat view_scale = 4.0; stonerview_state * -init_view(int wireframe_p, int transparent_p) +stonerview_init_view(int wireframe_p, int transparent_p) { stonerview_state *st = (stonerview_state *) calloc (1, sizeof(*st)); st->wireframe = wireframe_p; st->transparent = transparent_p; st->num_els = NUM_ELS; - st->elist = (elem_t *) calloc (st->num_els, sizeof(*st->elist)); + st->elist = (stonerview_elem_t *) calloc (st->num_els, sizeof(*st->elist)); st->osctail = &st->oscroot; @@ -59,7 +59,8 @@ init_view(int wireframe_p, int transparent_p) } /* callback: draw everything */ -void win_draw(stonerview_state *st) +void +stonerview_win_draw(stonerview_state *st) { int ix; static const GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 }; @@ -78,7 +79,7 @@ void win_draw(stonerview_state *st) glShadeModel(GL_FLAT); for (ix=0; ix < st->num_els; ix++) { - elem_t *el = &st->elist[ix]; + stonerview_elem_t *el = &st->elist[ix]; glNormal3f(0.0, 0.0, 1.0); @@ -106,7 +107,8 @@ void win_draw(stonerview_state *st) glPopMatrix(); } -void win_release(stonerview_state *st) +void +stonerview_win_release(stonerview_state *st) { free (st->elist); /*free (st->oscroot); -- #### how do we free this? */ diff --git a/hacks/glx/stonerview.c b/hacks/glx/stonerview.c index 79b17fb6..0e11395e 100644 --- a/hacks/glx/stonerview.c +++ b/hacks/glx/stonerview.c @@ -95,8 +95,8 @@ init_stonerview (ModeInfo *mi) bp->glx_context = init_GL(mi); bp->trackball = gltrackball_init (); - bp->st = init_view(MI_IS_WIREFRAME(mi), transparent_p); - init_move(bp->st); + bp->st = stonerview_init_view(MI_IS_WIREFRAME(mi), transparent_p); + stonerview_init_move(bp->st); reshape_stonerview (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ @@ -111,10 +111,12 @@ draw_stonerview (ModeInfo *mi) glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glPushMatrix (); + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); - win_draw(bp->st); + + stonerview_win_draw(bp->st); if (! bp->button_down_p) - move_increment(bp->st); + stonerview_move_increment(bp->st); glPopMatrix (); mi->polygon_count = NUM_ELS; @@ -132,7 +134,7 @@ release_stonerview (ModeInfo *mi) for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { stonerview_configuration *bp = &bps[screen]; if (bp->st) - win_release (bp->st); + stonerview_win_release (bp->st); } free (bps); bps = 0; diff --git a/hacks/glx/stonerview.h b/hacks/glx/stonerview.h index 0946923a..afbd53c5 100644 --- a/hacks/glx/stonerview.h +++ b/hacks/glx/stonerview.h @@ -38,7 +38,7 @@ struct stonerview_state { /* The list of polygons. This is filled in by move_increment(), and rendered by perform_render(). */ int num_els; - elem_t *elist; + stonerview_elem_t *elist; /* A linked list of all osc_t objects created. New objects are added to the end of the list, not the beginning. */ diff --git a/hacks/glx/surfaces.c b/hacks/glx/surfaces.c index 459d1224..9dac523b 100644 --- a/hacks/glx/surfaces.c +++ b/hacks/glx/surfaces.c @@ -163,7 +163,10 @@ static void draw(ModeInfo *mi) get_position(sp->rot, &x, &y, &z, !sp->button_down_p); glTranslatef((x-0.5)*10, (y-0.5)*10, (z-0.5)*20); + /* Do it twice because we don't track the device's orientation. */ + glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate(sp->trackball); + glRotatef(-current_device_rotation(), 0, 0, 1); get_rotation(sp->rot, &x, &y, &z, !sp->button_down_p); glRotatef(x*360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/tangram.c b/hacks/glx/tangram.c index a7af6428..02247759 100644 --- a/hacks/glx/tangram.c +++ b/hacks/glx/tangram.c @@ -840,13 +840,13 @@ static void init_shapes(ModeInfo * mi) &tp->tlg2, &tp->sq, &tp->rh); get_solved_puzzle(mi, &tp->n_tsm1, &tp->n_tsm2, &tp->n_tm, &tp->n_tlg1, &tp->n_tlg2, &tp->n_sq, &tp->n_rh); - tp->tsm1.dl = get_sm_tri_dl(wire); - tp->tsm2.dl = get_sm_tri_dl(wire); - tp->tm.dl = get_md_tri_dl(wire); - tp->tlg1.dl = get_lg_tri_dl(wire); - tp->tlg2.dl = get_lg_tri_dl(wire); - tp->sq.dl = get_square_dl(wire); - tp->rh.dl = get_rhomboid_dl(wire); + tp->tsm1.dl = tangram_get_sm_tri_dl(wire); + tp->tsm2.dl = tangram_get_sm_tri_dl(wire); + tp->tm.dl = tangram_get_md_tri_dl(wire); + tp->tlg1.dl = tangram_get_lg_tri_dl(wire); + tp->tlg2.dl = tangram_get_lg_tri_dl(wire); + tp->sq.dl = tangram_get_square_dl(wire); + tp->rh.dl = tangram_get_rhomboid_dl(wire); } static void gl_init(ModeInfo * mi) diff --git a/hacks/glx/tangram_shapes.c b/hacks/glx/tangram_shapes.c index 32b7014c..19f065b0 100644 --- a/hacks/glx/tangram_shapes.c +++ b/hacks/glx/tangram_shapes.c @@ -29,7 +29,8 @@ #define alpha (0.05) -static void tri_45_90(int wire) +static void +tri_45_90(int wire) { GLfloat vertices[][3] = { {0, alpha, 0}, @@ -87,8 +88,8 @@ static void tri_45_90(int wire) glEnd(); } -static -void unit_cube(int wire) +static void +unit_cube(int wire) { glBegin((wire) ? GL_LINE_LOOP : GL_QUADS); @@ -132,8 +133,8 @@ void unit_cube(int wire) glEnd(); } -static -void unit_rhomboid(int wire) +static void +unit_rhomboid(int wire) { glBegin((wire) ? GL_LINE_LOOP : GL_QUADS); @@ -179,7 +180,8 @@ void unit_rhomboid(int wire) /* All of the pieces have the same thickness so all of the Y values are the same */ -GLuint get_sm_tri_dl(int wire) +GLuint +tangram_get_sm_tri_dl(int wire) { GLuint triangle = glGenLists(1); glNewList(triangle, GL_COMPILE); @@ -189,7 +191,8 @@ GLuint get_sm_tri_dl(int wire) return triangle; } -GLuint get_lg_tri_dl(int wire) +GLuint +tangram_get_lg_tri_dl(int wire) { GLuint triangle = glGenLists(1); glNewList(triangle, GL_COMPILE); @@ -199,7 +202,8 @@ GLuint get_lg_tri_dl(int wire) return triangle; } -GLuint get_md_tri_dl(int wire) +GLuint +tangram_get_md_tri_dl(int wire) { GLuint triangle = glGenLists(1); glNewList(triangle, GL_COMPILE); @@ -209,7 +213,8 @@ GLuint get_md_tri_dl(int wire) return triangle; } -GLuint get_square_dl(int wire) +GLuint +tangram_get_square_dl(int wire) { GLuint square = glGenLists(1); glNewList(square, GL_COMPILE); @@ -219,7 +224,8 @@ GLuint get_square_dl(int wire) return square; } -GLuint get_rhomboid_dl(int wire) +GLuint +tangram_get_rhomboid_dl(int wire) { GLuint rhomboid = glGenLists(1); glNewList(rhomboid, GL_COMPILE); diff --git a/hacks/glx/tangram_shapes.h b/hacks/glx/tangram_shapes.h index 95410f86..254f8f34 100644 --- a/hacks/glx/tangram_shapes.h +++ b/hacks/glx/tangram_shapes.h @@ -2,14 +2,14 @@ #define TANGRAM_SHAPES_H /* get_sm_tri_dl - Get small triangle Display List */ -GLuint get_sm_tri_dl(int wire); +GLuint tangram_get_sm_tri_dl(int wire); /* get_lg_tri_dl - Get large triangle Display List */ -GLuint get_lg_tri_dl(int wire); +GLuint tangram_get_lg_tri_dl(int wire); /* get_md_tri_dl - Get medium triangle Display List */ -GLuint get_md_tri_dl(int wire); +GLuint tangram_get_md_tri_dl(int wire); /* get_square_dl - Get square Display List */ -GLuint get_square_dl(int wire); +GLuint tangram_get_square_dl(int wire); /* get_rhomboid_dl - Get rhomboid Display List */ -GLuint get_rhomboid_dl(int wire); +GLuint tangram_get_rhomboid_dl(int wire); #endif diff --git a/hacks/glx/teapot.c b/hacks/glx/teapot.c index 3fc95ee3..05d652ed 100644 --- a/hacks/glx/teapot.c +++ b/hacks/glx/teapot.c @@ -50,19 +50,18 @@ OpenGL(TM) is a trademark of Silicon Graphics, Inc. #include "teapot.h" -#ifdef HAVE_JWZGLES -int unit_teapot (int grid, int wire_p) { return 0; } -#else /* !HAVE_JWZGLES */ - - #ifndef HAVE_COCOA # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" -#endif /* HAVE_JWZGLES */ +#else +# define HAVE_GLMAP +#endif + +#ifdef HAVE_GLMAP /* Rim, body, lid, and bottom data must be reflected in x and y; handle and spout data across the y axis only. */ @@ -198,20 +197,20 @@ unit_teapot (int grid, int wire_p) &p[0][0][0]); glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0); glEvalMesh2(type, 0, grid, 0, grid); - polys += grid*grid; + polys += grid*grid*2; glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &q[0][0][0]); glEvalMesh2(type, 0, grid, 0, grid); - polys += grid*grid; + polys += grid*grid*2; if (i < 6) { glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &r[0][0][0]); glEvalMesh2(type, 0, grid, 0, grid); - polys += grid*grid; + polys += grid*grid*2; glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &s[0][0][0]); glEvalMesh2(type, 0, grid, 0, grid); - polys += grid*grid; + polys += grid*grid*2; } } glPopMatrix(); @@ -220,4 +219,64 @@ unit_teapot (int grid, int wire_p) return polys; } -#endif /* !HAVE_JWZGLES */ +#else /* !HAVE_GLMAP */ + +# include "normals.h" +# include "teapot2.h" + +int +unit_teapot (int grid, int wire_p) +{ + int polys = sizeof (teapot_triangles) / sizeof (*teapot_triangles) / 9; + int i; + const GLfloat *p = teapot_triangles; + GLfloat scale = 1 / 2.3; + + glPushMatrix(); + glScalef (scale, scale, scale); + glTranslatef (0, -1.25, 0); + + if (wire_p) + { + glBegin (GL_LINES); + for (i = 0; i < polys; i++) + { + XYZ p1, p2, p3; + p1.x = *p++; p1.y = *p++; p1.z = *p++; + p2.x = *p++; p2.y = *p++; p2.z = *p++; + p3.x = *p++; p3.y = *p++; p3.z = *p++; + glVertex3f (p1.x, p1.y, p1.z); /* Draw 2 edges of each triangle */ + glVertex3f (p2.x, p2.y, p2.z); + glVertex3f (p1.x, p1.y, p1.z); + glVertex3f (p3.x, p3.y, p3.z); + i++; /* Skip every other triangle */ + p += 9; + } + glEnd(); + polys /= 2; + } + else + { + glFrontFace (GL_CCW); + glBegin (GL_TRIANGLES); + for (i = 0; i < polys; i++) + { + XYZ p1, p2, p3; + p1.x = *p++; p1.y = *p++; p1.z = *p++; + p2.x = *p++; p2.y = *p++; p2.z = *p++; + p3.x = *p++; p3.y = *p++; p3.z = *p++; + do_normal (p1.x, p1.y, p1.z, + p2.x, p2.y, p2.z, + p3.x, p3.y, p3.z); + glVertex3f (p1.x, p1.y, p1.z); + glVertex3f (p2.x, p2.y, p2.z); + glVertex3f (p3.x, p3.y, p3.z); + } + glEnd(); + } + glPopMatrix(); + + return polys; +} + +#endif /* !HAVE_GLMAP */ diff --git a/hacks/glx/teapot2.h b/hacks/glx/teapot2.h new file mode 100644 index 00000000..c9d4def0 --- /dev/null +++ b/hacks/glx/teapot2.h @@ -0,0 +1,6330 @@ +/* The Utah Teapot. Martin Newell, 1975. + + Since GLUtesselator doesn't exist in the iOS build, we use these + triangles there instead of generating the teapot from Newell's + original Bezier patches, because I didn't feel like re-implementing + that code. + */ + +static const GLfloat teapot_triangles[] = { + 1.368074,2.435437,-0.227403, 1.381968,2.4,-0.229712, 1.4,2.4,0, + 1.4,2.4,0, 1.385925,2.435437,0, 1.368074,2.435437,-0.227403, + 1.316296,2.435437,-0.442166, 1.329664,2.4,-0.446656, 1.381968,2.4,-0.229712, + 1.381968,2.4,-0.229712, 1.368074,2.435437,-0.227403, 1.316296,2.435437,-0.442166, + 1.233252,2.435437,-0.641628, 1.245776,2.4,-0.648144, 1.329664,2.4,-0.446656, + 1.329664,2.4,-0.446656, 1.316296,2.435437,-0.442166, 1.233252,2.435437,-0.641628, + 1.121601,2.435437,-0.823129, 1.132992,2.4,-0.831488, 1.245776,2.4,-0.648144, + 1.245776,2.4,-0.648144, 1.233252,2.435437,-0.641628, 1.121601,2.435437,-0.823129, + 0.984007,2.435437,-0.984007, 0.994,2.4,-0.994, 1.132992,2.4,-0.831488, + 1.132992,2.4,-0.831488, 1.121601,2.435437,-0.823129, 0.984007,2.435437,-0.984007, + 0.823129,2.435437,-1.121601, 0.831488,2.4,-1.132992, 0.994,2.4,-0.994, + 0.994,2.4,-0.994, 0.984007,2.435437,-0.984007, 0.823129,2.435437,-1.121601, + 0.641628,2.435437,-1.233252, 0.648144,2.4,-1.245776, 0.831488,2.4,-1.132992, + 0.831488,2.4,-1.132992, 0.823129,2.435437,-1.121601, 0.641628,2.435437,-1.233252, + 0.442166,2.435437,-1.316296, 0.446656,2.4,-1.329664, 0.648144,2.4,-1.245776, + 0.648144,2.4,-1.245776, 0.641628,2.435437,-1.233252, 0.442166,2.435437,-1.316296, + 0.227403,2.435437,-1.368074, 0.229712,2.4,-1.381968, 0.446656,2.4,-1.329664, + 0.446656,2.4,-1.329664, 0.442166,2.435437,-1.316296, 0.227403,2.435437,-1.368074, + 0,2.435437,-1.385925, 0,2.4,-1.4, 0.229712,2.4,-1.381968, + 0.229712,2.4,-1.381968, 0.227403,2.435437,-1.368074, 0,2.435437,-1.385925, + 1.36262,2.463,-0.226496, 1.368074,2.435437,-0.227403, 1.385925,2.435437,0, + 1.385925,2.435437,0, 1.3804,2.463,0, 1.36262,2.463,-0.226496, + 1.311049,2.463,-0.440403, 1.316296,2.435437,-0.442166, 1.368074,2.435437,-0.227403, + 1.368074,2.435437,-0.227403, 1.36262,2.463,-0.226496, 1.311049,2.463,-0.440403, + 1.228335,2.463,-0.63907, 1.233252,2.435437,-0.641628, 1.316296,2.435437,-0.442166, + 1.316296,2.435437,-0.442166, 1.311049,2.463,-0.440403, 1.228335,2.463,-0.63907, + 1.11713,2.463,-0.819847, 1.121601,2.435437,-0.823129, 1.233252,2.435437,-0.641628, + 1.233252,2.435437,-0.641628, 1.228335,2.463,-0.63907, 1.11713,2.463,-0.819847, + 0.980084,2.463,-0.980084, 0.984007,2.435437,-0.984007, 1.121601,2.435437,-0.823129, + 1.121601,2.435437,-0.823129, 1.11713,2.463,-0.819847, 0.980084,2.463,-0.980084, + 0.819847,2.463,-1.11713, 0.823129,2.435437,-1.121601, 0.984007,2.435437,-0.984007, + 0.984007,2.435437,-0.984007, 0.980084,2.463,-0.980084, 0.819847,2.463,-1.11713, + 0.63907,2.463,-1.228335, 0.641628,2.435437,-1.233252, 0.823129,2.435437,-1.121601, + 0.823129,2.435437,-1.121601, 0.819847,2.463,-1.11713, 0.63907,2.463,-1.228335, + 0.440403,2.463,-1.311049, 0.442166,2.435437,-1.316296, 0.641628,2.435437,-1.233252, + 0.641628,2.435437,-1.233252, 0.63907,2.463,-1.228335, 0.440403,2.463,-1.311049, + 0.226496,2.463,-1.36262, 0.227403,2.435437,-1.368074, 0.442166,2.435437,-1.316296, + 0.442166,2.435437,-1.316296, 0.440403,2.463,-1.311049, 0.226496,2.463,-1.36262, + 0,2.463,-1.3804, 0,2.435437,-1.385925, 0.227403,2.435437,-1.368074, + 0.227403,2.435437,-1.368074, 0.226496,2.463,-1.36262, 0,2.463,-1.3804, + 1.364422,2.482687,-0.226795, 1.36262,2.463,-0.226496, 1.3804,2.463,0, + 1.3804,2.463,0, 1.382225,2.482687,0, 1.364422,2.482687,-0.226795, + 1.312782,2.482687,-0.440985, 1.311049,2.463,-0.440403, 1.36262,2.463,-0.226496, + 1.36262,2.463,-0.226496, 1.364422,2.482687,-0.226795, 1.312782,2.482687,-0.440985, + 1.229959,2.482687,-0.639915, 1.228335,2.463,-0.63907, 1.311049,2.463,-0.440403, + 1.311049,2.463,-0.440403, 1.312782,2.482687,-0.440985, 1.229959,2.482687,-0.639915, + 1.118607,2.482687,-0.820931, 1.11713,2.463,-0.819847, 1.228335,2.463,-0.63907, + 1.228335,2.463,-0.63907, 1.229959,2.482687,-0.639915, 1.118607,2.482687,-0.820931, + 0.98138,2.482687,-0.98138, 0.980084,2.463,-0.980084, 1.11713,2.463,-0.819847, + 1.11713,2.463,-0.819847, 1.118607,2.482687,-0.820931, 0.98138,2.482687,-0.98138, + 0.820931,2.482687,-1.118607, 0.819847,2.463,-1.11713, 0.980084,2.463,-0.980084, + 0.980084,2.463,-0.980084, 0.98138,2.482687,-0.98138, 0.820931,2.482687,-1.118607, + 0.639915,2.482687,-1.229959, 0.63907,2.463,-1.228335, 0.819847,2.463,-1.11713, + 0.819847,2.463,-1.11713, 0.820931,2.482687,-1.118607, 0.639915,2.482687,-1.229959, + 0.440985,2.482687,-1.312782, 0.440403,2.463,-1.311049, 0.63907,2.463,-1.228335, + 0.63907,2.463,-1.228335, 0.639915,2.482687,-1.229959, 0.440985,2.482687,-1.312782, + 0.226795,2.482687,-1.364422, 0.226496,2.463,-1.36262, 0.440403,2.463,-1.311049, + 0.440403,2.463,-1.311049, 0.440985,2.482687,-1.312782, 0.226795,2.482687,-1.364422, + 0,2.482687,-1.382225, 0,2.463,-1.3804, 0.226496,2.463,-1.36262, + 0.226496,2.463,-1.36262, 0.226795,2.482687,-1.364422, 0,2.482687,-1.382225, + 1.372294,2.4945,-0.228104, 1.364422,2.482687,-0.226795, 1.382225,2.482687,0, + 1.382225,2.482687,0, 1.3902,2.4945,0, 1.372294,2.4945,-0.228104, + 1.320356,2.4945,-0.443529, 1.312782,2.482687,-0.440985, 1.364422,2.482687,-0.226795, + 1.364422,2.482687,-0.226795, 1.372294,2.4945,-0.228104, 1.320356,2.4945,-0.443529, + 1.237056,2.4945,-0.643607, 1.229959,2.482687,-0.639915, 1.312782,2.482687,-0.440985, + 1.312782,2.482687,-0.440985, 1.320356,2.4945,-0.443529, 1.237056,2.4945,-0.643607, + 1.125061,2.4945,-0.825668, 1.118607,2.482687,-0.820931, 1.229959,2.482687,-0.639915, + 1.229959,2.482687,-0.639915, 1.237056,2.4945,-0.643607, 1.125061,2.4945,-0.825668, + 0.987042,2.4945,-0.987042, 0.98138,2.482687,-0.98138, 1.118607,2.482687,-0.820931, + 1.118607,2.482687,-0.820931, 1.125061,2.4945,-0.825668, 0.987042,2.4945,-0.987042, + 0.825668,2.4945,-1.125061, 0.820931,2.482687,-1.118607, 0.98138,2.482687,-0.98138, + 0.98138,2.482687,-0.98138, 0.987042,2.4945,-0.987042, 0.825668,2.4945,-1.125061, + 0.643607,2.4945,-1.237056, 0.639915,2.482687,-1.229959, 0.820931,2.482687,-1.118607, + 0.820931,2.482687,-1.118607, 0.825668,2.4945,-1.125061, 0.643607,2.4945,-1.237056, + 0.443529,2.4945,-1.320356, 0.440985,2.482687,-1.312782, 0.639915,2.482687,-1.229959, + 0.639915,2.482687,-1.229959, 0.643607,2.4945,-1.237056, 0.443529,2.4945,-1.320356, + 0.228104,2.4945,-1.372294, 0.226795,2.482687,-1.364422, 0.440985,2.482687,-1.312782, + 0.440985,2.482687,-1.312782, 0.443529,2.4945,-1.320356, 0.228104,2.4945,-1.372294, + 0,2.4945,-1.3902, 0,2.482687,-1.382225, 0.226795,2.482687,-1.364422, + 0.226795,2.482687,-1.364422, 0.228104,2.4945,-1.372294, 0,2.4945,-1.3902, + 1.385053,2.498438,-0.230225, 1.372294,2.4945,-0.228104, 1.3902,2.4945,0, + 1.3902,2.4945,0, 1.403125,2.498438,0, 1.385053,2.498438,-0.230225, + 1.332632,2.498438,-0.447653, 1.320356,2.4945,-0.443529, 1.372294,2.4945,-0.228104, + 1.372294,2.4945,-0.228104, 1.385053,2.498438,-0.230225, 1.332632,2.498438,-0.447653, + 1.248557,2.498438,-0.649591, 1.237056,2.4945,-0.643607, 1.320356,2.4945,-0.443529, + 1.320356,2.4945,-0.443529, 1.332632,2.498438,-0.447653, 1.248557,2.498438,-0.649591, + 1.135521,2.498438,-0.833344, 1.125061,2.4945,-0.825668, 1.237056,2.4945,-0.643607, + 1.237056,2.4945,-0.643607, 1.248557,2.498438,-0.649591, 1.135521,2.498438,-0.833344, + 0.996219,2.498438,-0.996219, 0.987042,2.4945,-0.987042, 1.125061,2.4945,-0.825668, + 1.125061,2.4945,-0.825668, 1.135521,2.498438,-0.833344, 0.996219,2.498438,-0.996219, + 0.833344,2.498438,-1.135521, 0.825668,2.4945,-1.125061, 0.987042,2.4945,-0.987042, + 0.987042,2.4945,-0.987042, 0.996219,2.498438,-0.996219, 0.833344,2.498438,-1.135521, + 0.649591,2.498438,-1.248557, 0.643607,2.4945,-1.237056, 0.825668,2.4945,-1.125061, + 0.825668,2.4945,-1.125061, 0.833344,2.498438,-1.135521, 0.649591,2.498438,-1.248557, + 0.447653,2.498438,-1.332632, 0.443529,2.4945,-1.320356, 0.643607,2.4945,-1.237056, + 0.643607,2.4945,-1.237056, 0.649591,2.498438,-1.248557, 0.447653,2.498438,-1.332632, + 0.230225,2.498438,-1.385053, 0.228104,2.4945,-1.372294, 0.443529,2.4945,-1.320356, + 0.443529,2.4945,-1.320356, 0.447653,2.498438,-1.332632, 0.230225,2.498438,-1.385053, + 0,2.498438,-1.403125, 0,2.4945,-1.3902, 0.228104,2.4945,-1.372294, + 0.228104,2.4945,-1.372294, 0.230225,2.498438,-1.385053, 0,2.498438,-1.403125, + 1.401513,2.4945,-0.232961, 1.385053,2.498438,-0.230225, 1.403125,2.498438,0, + 1.403125,2.498438,0, 1.4198,2.4945,0, 1.401513,2.4945,-0.232961, + 1.348469,2.4945,-0.452973, 1.332632,2.498438,-0.447653, 1.385053,2.498438,-0.230225, + 1.385053,2.498438,-0.230225, 1.401513,2.4945,-0.232961, 1.348469,2.4945,-0.452973, + 1.263395,2.4945,-0.657311, 1.248557,2.498438,-0.649591, 1.332632,2.498438,-0.447653, + 1.332632,2.498438,-0.447653, 1.348469,2.4945,-0.452973, 1.263395,2.4945,-0.657311, + 1.149016,2.4945,-0.843248, 1.135521,2.498438,-0.833344, 1.248557,2.498438,-0.649591, + 1.248557,2.498438,-0.649591, 1.263395,2.4945,-0.657311, 1.149016,2.4945,-0.843248, + 1.008058,2.4945,-1.008058, 0.996219,2.498438,-0.996219, 1.135521,2.498438,-0.833344, + 1.135521,2.498438,-0.833344, 1.149016,2.4945,-0.843248, 1.008058,2.4945,-1.008058, + 0.843248,2.4945,-1.149016, 0.833344,2.498438,-1.135521, 0.996219,2.498438,-0.996219, + 0.996219,2.498438,-0.996219, 1.008058,2.4945,-1.008058, 0.843248,2.4945,-1.149016, + 0.657311,2.4945,-1.263395, 0.649591,2.498438,-1.248557, 0.833344,2.498438,-1.135521, + 0.833344,2.498438,-1.135521, 0.843248,2.4945,-1.149016, 0.657311,2.4945,-1.263395, + 0.452973,2.4945,-1.348469, 0.447653,2.498438,-1.332632, 0.649591,2.498438,-1.248557, + 0.649591,2.498438,-1.248557, 0.657311,2.4945,-1.263395, 0.452973,2.4945,-1.348469, + 0.232961,2.4945,-1.401513, 0.230225,2.498438,-1.385053, 0.447653,2.498438,-1.332632, + 0.447653,2.498438,-1.332632, 0.452973,2.4945,-1.348469, 0.232961,2.4945,-1.401513, + 0,2.4945,-1.4198, 0,2.498438,-1.403125, 0.230225,2.498438,-1.385053, + 0.230225,2.498438,-1.385053, 0.232961,2.4945,-1.401513, 0,2.4945,-1.4198, + 1.42049,2.482687,-0.236115, 1.401513,2.4945,-0.232961, 1.4198,2.4945,0, + 1.4198,2.4945,0, 1.439025,2.482687,0, 1.42049,2.482687,-0.236115, + 1.366728,2.482687,-0.459107, 1.348469,2.4945,-0.452973, 1.401513,2.4945,-0.232961, + 1.401513,2.4945,-0.232961, 1.42049,2.482687,-0.236115, 1.366728,2.482687,-0.459107, + 1.280502,2.482687,-0.666211, 1.263395,2.4945,-0.657311, 1.348469,2.4945,-0.452973, + 1.348469,2.4945,-0.452973, 1.366728,2.482687,-0.459107, 1.280502,2.482687,-0.666211, + 1.164574,2.482687,-0.854666, 1.149016,2.4945,-0.843248, 1.263395,2.4945,-0.657311, + 1.263395,2.4945,-0.657311, 1.280502,2.482687,-0.666211, 1.164574,2.482687,-0.854666, + 1.021708,2.482687,-1.021708, 1.008058,2.4945,-1.008058, 1.149016,2.4945,-0.843248, + 1.149016,2.4945,-0.843248, 1.164574,2.482687,-0.854666, 1.021708,2.482687,-1.021708, + 0.854666,2.482687,-1.164574, 0.843248,2.4945,-1.149016, 1.008058,2.4945,-1.008058, + 1.008058,2.4945,-1.008058, 1.021708,2.482687,-1.021708, 0.854666,2.482687,-1.164574, + 0.666211,2.482687,-1.280502, 0.657311,2.4945,-1.263395, 0.843248,2.4945,-1.149016, + 0.843248,2.4945,-1.149016, 0.854666,2.482687,-1.164574, 0.666211,2.482687,-1.280502, + 0.459107,2.482687,-1.366728, 0.452973,2.4945,-1.348469, 0.657311,2.4945,-1.263395, + 0.657311,2.4945,-1.263395, 0.666211,2.482687,-1.280502, 0.459107,2.482687,-1.366728, + 0.236115,2.482687,-1.42049, 0.232961,2.4945,-1.401513, 0.452973,2.4945,-1.348469, + 0.452973,2.4945,-1.348469, 0.459107,2.482687,-1.366728, 0.236115,2.482687,-1.42049, + 0,2.482687,-1.439025, 0,2.4945,-1.4198, 0.232961,2.4945,-1.401513, + 0.232961,2.4945,-1.401513, 0.236115,2.482687,-1.42049, 0,2.482687,-1.439025, + 1.4408,2.463,-0.239491, 1.42049,2.482687,-0.236115, 1.439025,2.482687,0, + 1.439025,2.482687,0, 1.4596,2.463,0, 1.4408,2.463,-0.239491, + 1.38627,2.463,-0.465671, 1.366728,2.482687,-0.459107, 1.42049,2.482687,-0.236115, + 1.42049,2.482687,-0.236115, 1.4408,2.463,-0.239491, 1.38627,2.463,-0.465671, + 1.29881,2.463,-0.675736, 1.280502,2.482687,-0.666211, 1.366728,2.482687,-0.459107, + 1.366728,2.482687,-0.459107, 1.38627,2.463,-0.465671, 1.29881,2.463,-0.675736, + 1.181225,2.463,-0.866886, 1.164574,2.482687,-0.854666, 1.280502,2.482687,-0.666211, + 1.280502,2.482687,-0.666211, 1.29881,2.463,-0.675736, 1.181225,2.463,-0.866886, + 1.036316,2.463,-1.036316, 1.021708,2.482687,-1.021708, 1.164574,2.482687,-0.854666, + 1.164574,2.482687,-0.854666, 1.181225,2.463,-0.866886, 1.036316,2.463,-1.036316, + 0.866886,2.463,-1.181225, 0.854666,2.482687,-1.164574, 1.021708,2.482687,-1.021708, + 1.021708,2.482687,-1.021708, 1.036316,2.463,-1.036316, 0.866886,2.463,-1.181225, + 0.675736,2.463,-1.29881, 0.666211,2.482687,-1.280502, 0.854666,2.482687,-1.164574, + 0.854666,2.482687,-1.164574, 0.866886,2.463,-1.181225, 0.675736,2.463,-1.29881, + 0.465671,2.463,-1.38627, 0.459107,2.482687,-1.366728, 0.666211,2.482687,-1.280502, + 0.666211,2.482687,-1.280502, 0.675736,2.463,-1.29881, 0.465671,2.463,-1.38627, + 0.239491,2.463,-1.4408, 0.236115,2.482687,-1.42049, 0.459107,2.482687,-1.366728, + 0.459107,2.482687,-1.366728, 0.465671,2.463,-1.38627, 0.239491,2.463,-1.4408, + 0,2.463,-1.4596, 0,2.482687,-1.439025, 0.236115,2.482687,-1.42049, + 0.236115,2.482687,-1.42049, 0.239491,2.463,-1.4408, 0,2.463,-1.4596, + 1.461258,2.435437,-0.242892, 1.4408,2.463,-0.239491, 1.4596,2.463,0, + 1.4596,2.463,0, 1.480325,2.435437,0, 1.461258,2.435437,-0.242892, + 1.405953,2.435437,-0.472283, 1.38627,2.463,-0.465671, 1.4408,2.463,-0.239491, + 1.4408,2.463,-0.239491, 1.461258,2.435437,-0.242892, 1.405953,2.435437,-0.472283, + 1.317252,2.435437,-0.685331, 1.29881,2.463,-0.675736, 1.38627,2.463,-0.465671, + 1.38627,2.463,-0.465671, 1.405953,2.435437,-0.472283, 1.317252,2.435437,-0.685331, + 1.197997,2.435437,-0.879195, 1.181225,2.463,-0.866886, 1.29881,2.463,-0.675736, + 1.29881,2.463,-0.675736, 1.317252,2.435437,-0.685331, 1.197997,2.435437,-0.879195, + 1.051031,2.435437,-1.051031, 1.036316,2.463,-1.036316, 1.181225,2.463,-0.866886, + 1.181225,2.463,-0.866886, 1.197997,2.435437,-0.879195, 1.051031,2.435437,-1.051031, + 0.879195,2.435437,-1.197997, 0.866886,2.463,-1.181225, 1.036316,2.463,-1.036316, + 1.036316,2.463,-1.036316, 1.051031,2.435437,-1.051031, 0.879195,2.435437,-1.197997, + 0.685331,2.435437,-1.317252, 0.675736,2.463,-1.29881, 0.866886,2.463,-1.181225, + 0.866886,2.463,-1.181225, 0.879195,2.435437,-1.197997, 0.685331,2.435437,-1.317252, + 0.472283,2.435437,-1.405953, 0.465671,2.463,-1.38627, 0.675736,2.463,-1.29881, + 0.675736,2.463,-1.29881, 0.685331,2.435437,-1.317252, 0.472283,2.435437,-1.405953, + 0.242892,2.435437,-1.461258, 0.239491,2.463,-1.4408, 0.465671,2.463,-1.38627, + 0.465671,2.463,-1.38627, 0.472283,2.435437,-1.405953, 0.242892,2.435437,-1.461258, + 0,2.435437,-1.480325, 0,2.463,-1.4596, 0.239491,2.463,-1.4408, + 0.239491,2.463,-1.4408, 0.242892,2.435437,-1.461258, 0,2.435437,-1.480325, + 1.48068,2.4,-0.24612, 1.461258,2.435437,-0.242892, 1.480325,2.435437,0, + 1.480325,2.435437,0, 1.5,2.4,0, 1.48068,2.4,-0.24612, + 1.42464,2.4,-0.47856, 1.405953,2.435437,-0.472283, 1.461258,2.435437,-0.242892, + 1.461258,2.435437,-0.242892, 1.48068,2.4,-0.24612, 1.42464,2.4,-0.47856, + 1.33476,2.4,-0.69444, 1.317252,2.435437,-0.685331, 1.405953,2.435437,-0.472283, + 1.405953,2.435437,-0.472283, 1.42464,2.4,-0.47856, 1.33476,2.4,-0.69444, + 1.21392,2.4,-0.89088, 1.197997,2.435437,-0.879195, 1.317252,2.435437,-0.685331, + 1.317252,2.435437,-0.685331, 1.33476,2.4,-0.69444, 1.21392,2.4,-0.89088, + 1.065,2.4,-1.065, 1.051031,2.435437,-1.051031, 1.197997,2.435437,-0.879195, + 1.197997,2.435437,-0.879195, 1.21392,2.4,-0.89088, 1.065,2.4,-1.065, + 0.89088,2.4,-1.21392, 0.879195,2.435437,-1.197997, 1.051031,2.435437,-1.051031, + 1.051031,2.435437,-1.051031, 1.065,2.4,-1.065, 0.89088,2.4,-1.21392, + 0.69444,2.4,-1.33476, 0.685331,2.435437,-1.317252, 0.879195,2.435437,-1.197997, + 0.879195,2.435437,-1.197997, 0.89088,2.4,-1.21392, 0.69444,2.4,-1.33476, + 0.47856,2.4,-1.42464, 0.472283,2.435437,-1.405953, 0.685331,2.435437,-1.317252, + 0.685331,2.435437,-1.317252, 0.69444,2.4,-1.33476, 0.47856,2.4,-1.42464, + 0.24612,2.4,-1.48068, 0.242892,2.435437,-1.461258, 0.472283,2.435437,-1.405953, + 0.472283,2.435437,-1.405953, 0.47856,2.4,-1.42464, 0.24612,2.4,-1.48068, + 0,2.4,-1.5, 0,2.435437,-1.480325, 0.242892,2.435437,-1.461258, + 0.242892,2.435437,-1.461258, 0.24612,2.4,-1.48068, 0,2.4,-1.5, + -0.227403,2.435437,-1.368074, -0.229712,2.4,-1.381968, 0,2.4,-1.4, + 0,2.4,-1.4, 0,2.435437,-1.385925, -0.227403,2.435437,-1.368074, + -0.442166,2.435437,-1.316296, -0.446656,2.4,-1.329664, -0.229712,2.4,-1.381968, + -0.229712,2.4,-1.381968, -0.227403,2.435437,-1.368074, -0.442166,2.435437,-1.316296, + -0.641628,2.435437,-1.233252, -0.648144,2.4,-1.245776, -0.446656,2.4,-1.329664, + -0.446656,2.4,-1.329664, -0.442166,2.435437,-1.316296, -0.641628,2.435437,-1.233252, + -0.823129,2.435437,-1.121601, -0.831488,2.4,-1.132992, -0.648144,2.4,-1.245776, + -0.648144,2.4,-1.245776, -0.641628,2.435437,-1.233252, -0.823129,2.435437,-1.121601, + -0.984007,2.435437,-0.984007, -0.994,2.4,-0.994, -0.831488,2.4,-1.132992, + -0.831488,2.4,-1.132992, -0.823129,2.435437,-1.121601, -0.984007,2.435437,-0.984007, + -1.121601,2.435437,-0.823129, -1.132992,2.4,-0.831488, -0.994,2.4,-0.994, + -0.994,2.4,-0.994, -0.984007,2.435437,-0.984007, -1.121601,2.435437,-0.823129, + -1.233252,2.435437,-0.641628, -1.245776,2.4,-0.648144, -1.132992,2.4,-0.831488, + -1.132992,2.4,-0.831488, -1.121601,2.435437,-0.823129, -1.233252,2.435437,-0.641628, + -1.316296,2.435437,-0.442166, -1.329664,2.4,-0.446656, -1.245776,2.4,-0.648144, + -1.245776,2.4,-0.648144, -1.233252,2.435437,-0.641628, -1.316296,2.435437,-0.442166, + -1.368074,2.435437,-0.227403, -1.381968,2.4,-0.229712, -1.329664,2.4,-0.446656, + -1.329664,2.4,-0.446656, -1.316296,2.435437,-0.442166, -1.368074,2.435437,-0.227403, + -1.385925,2.435437,0, -1.4,2.4,0, -1.381968,2.4,-0.229712, + -1.381968,2.4,-0.229712, -1.368074,2.435437,-0.227403, -1.385925,2.435437,0, + -0.226496,2.463,-1.36262, -0.227403,2.435437,-1.368074, 0,2.435437,-1.385925, + 0,2.435437,-1.385925, 0,2.463,-1.3804, -0.226496,2.463,-1.36262, + -0.440403,2.463,-1.311049, -0.442166,2.435437,-1.316296, -0.227403,2.435437,-1.368074, + -0.227403,2.435437,-1.368074, -0.226496,2.463,-1.36262, -0.440403,2.463,-1.311049, + -0.63907,2.463,-1.228335, -0.641628,2.435437,-1.233252, -0.442166,2.435437,-1.316296, + -0.442166,2.435437,-1.316296, -0.440403,2.463,-1.311049, -0.63907,2.463,-1.228335, + -0.819847,2.463,-1.11713, -0.823129,2.435437,-1.121601, -0.641628,2.435437,-1.233252, + -0.641628,2.435437,-1.233252, -0.63907,2.463,-1.228335, -0.819847,2.463,-1.11713, + -0.980084,2.463,-0.980084, -0.984007,2.435437,-0.984007, -0.823129,2.435437,-1.121601, + -0.823129,2.435437,-1.121601, -0.819847,2.463,-1.11713, -0.980084,2.463,-0.980084, + -1.11713,2.463,-0.819847, -1.121601,2.435437,-0.823129, -0.984007,2.435437,-0.984007, + -0.984007,2.435437,-0.984007, -0.980084,2.463,-0.980084, -1.11713,2.463,-0.819847, + -1.228335,2.463,-0.63907, -1.233252,2.435437,-0.641628, -1.121601,2.435437,-0.823129, + -1.121601,2.435437,-0.823129, -1.11713,2.463,-0.819847, -1.228335,2.463,-0.63907, + -1.311049,2.463,-0.440403, -1.316296,2.435437,-0.442166, -1.233252,2.435437,-0.641628, + -1.233252,2.435437,-0.641628, -1.228335,2.463,-0.63907, -1.311049,2.463,-0.440403, + -1.36262,2.463,-0.226496, -1.368074,2.435437,-0.227403, -1.316296,2.435437,-0.442166, + -1.316296,2.435437,-0.442166, -1.311049,2.463,-0.440403, -1.36262,2.463,-0.226496, + -1.3804,2.463,0, -1.385925,2.435437,0, -1.368074,2.435437,-0.227403, + -1.368074,2.435437,-0.227403, -1.36262,2.463,-0.226496, -1.3804,2.463,0, + -0.226795,2.482687,-1.364422, -0.226496,2.463,-1.36262, 0,2.463,-1.3804, + 0,2.463,-1.3804, 0,2.482687,-1.382225, -0.226795,2.482687,-1.364422, + -0.440985,2.482687,-1.312782, -0.440403,2.463,-1.311049, -0.226496,2.463,-1.36262, + -0.226496,2.463,-1.36262, -0.226795,2.482687,-1.364422, -0.440985,2.482687,-1.312782, + -0.639915,2.482687,-1.229959, -0.63907,2.463,-1.228335, -0.440403,2.463,-1.311049, + -0.440403,2.463,-1.311049, -0.440985,2.482687,-1.312782, -0.639915,2.482687,-1.229959, + -0.820931,2.482687,-1.118607, -0.819847,2.463,-1.11713, -0.63907,2.463,-1.228335, + -0.63907,2.463,-1.228335, -0.639915,2.482687,-1.229959, -0.820931,2.482687,-1.118607, + -0.98138,2.482687,-0.98138, -0.980084,2.463,-0.980084, -0.819847,2.463,-1.11713, + -0.819847,2.463,-1.11713, -0.820931,2.482687,-1.118607, -0.98138,2.482687,-0.98138, + -1.118607,2.482687,-0.820931, -1.11713,2.463,-0.819847, -0.980084,2.463,-0.980084, + -0.980084,2.463,-0.980084, -0.98138,2.482687,-0.98138, -1.118607,2.482687,-0.820931, + -1.229959,2.482687,-0.639915, -1.228335,2.463,-0.63907, -1.11713,2.463,-0.819847, + -1.11713,2.463,-0.819847, -1.118607,2.482687,-0.820931, -1.229959,2.482687,-0.639915, + -1.312782,2.482687,-0.440985, -1.311049,2.463,-0.440403, -1.228335,2.463,-0.63907, + -1.228335,2.463,-0.63907, -1.229959,2.482687,-0.639915, -1.312782,2.482687,-0.440985, + -1.364422,2.482687,-0.226795, -1.36262,2.463,-0.226496, -1.311049,2.463,-0.440403, + -1.311049,2.463,-0.440403, -1.312782,2.482687,-0.440985, -1.364422,2.482687,-0.226795, + -1.382225,2.482687,0, -1.3804,2.463,0, -1.36262,2.463,-0.226496, + -1.36262,2.463,-0.226496, -1.364422,2.482687,-0.226795, -1.382225,2.482687,0, + -0.228104,2.4945,-1.372294, -0.226795,2.482687,-1.364422, 0,2.482687,-1.382225, + 0,2.482687,-1.382225, 0,2.4945,-1.3902, -0.228104,2.4945,-1.372294, + -0.443529,2.4945,-1.320356, -0.440985,2.482687,-1.312782, -0.226795,2.482687,-1.364422, + -0.226795,2.482687,-1.364422, -0.228104,2.4945,-1.372294, -0.443529,2.4945,-1.320356, + -0.643607,2.4945,-1.237056, -0.639915,2.482687,-1.229959, -0.440985,2.482687,-1.312782, + -0.440985,2.482687,-1.312782, -0.443529,2.4945,-1.320356, -0.643607,2.4945,-1.237056, + -0.825668,2.4945,-1.125061, -0.820931,2.482687,-1.118607, -0.639915,2.482687,-1.229959, + -0.639915,2.482687,-1.229959, -0.643607,2.4945,-1.237056, -0.825668,2.4945,-1.125061, + -0.987042,2.4945,-0.987042, -0.98138,2.482687,-0.98138, -0.820931,2.482687,-1.118607, + -0.820931,2.482687,-1.118607, -0.825668,2.4945,-1.125061, -0.987042,2.4945,-0.987042, + -1.125061,2.4945,-0.825668, -1.118607,2.482687,-0.820931, -0.98138,2.482687,-0.98138, + -0.98138,2.482687,-0.98138, -0.987042,2.4945,-0.987042, -1.125061,2.4945,-0.825668, + -1.237056,2.4945,-0.643607, -1.229959,2.482687,-0.639915, -1.118607,2.482687,-0.820931, + -1.118607,2.482687,-0.820931, -1.125061,2.4945,-0.825668, -1.237056,2.4945,-0.643607, + -1.320356,2.4945,-0.443529, -1.312782,2.482687,-0.440985, -1.229959,2.482687,-0.639915, + -1.229959,2.482687,-0.639915, -1.237056,2.4945,-0.643607, -1.320356,2.4945,-0.443529, + -1.372294,2.4945,-0.228104, -1.364422,2.482687,-0.226795, -1.312782,2.482687,-0.440985, + -1.312782,2.482687,-0.440985, -1.320356,2.4945,-0.443529, -1.372294,2.4945,-0.228104, + -1.3902,2.4945,0, -1.382225,2.482687,0, -1.364422,2.482687,-0.226795, + -1.364422,2.482687,-0.226795, -1.372294,2.4945,-0.228104, -1.3902,2.4945,0, + -0.230225,2.498438,-1.385053, -0.228104,2.4945,-1.372294, 0,2.4945,-1.3902, + 0,2.4945,-1.3902, 0,2.498438,-1.403125, -0.230225,2.498438,-1.385053, + -0.447653,2.498438,-1.332632, -0.443529,2.4945,-1.320356, -0.228104,2.4945,-1.372294, + -0.228104,2.4945,-1.372294, -0.230225,2.498438,-1.385053, -0.447653,2.498438,-1.332632, + -0.649591,2.498438,-1.248557, -0.643607,2.4945,-1.237056, -0.443529,2.4945,-1.320356, + -0.443529,2.4945,-1.320356, -0.447653,2.498438,-1.332632, -0.649591,2.498438,-1.248557, + -0.833344,2.498438,-1.135521, -0.825668,2.4945,-1.125061, -0.643607,2.4945,-1.237056, + -0.643607,2.4945,-1.237056, -0.649591,2.498438,-1.248557, -0.833344,2.498438,-1.135521, + -0.996219,2.498438,-0.996219, -0.987042,2.4945,-0.987042, -0.825668,2.4945,-1.125061, + -0.825668,2.4945,-1.125061, -0.833344,2.498438,-1.135521, -0.996219,2.498438,-0.996219, + -1.135521,2.498438,-0.833344, -1.125061,2.4945,-0.825668, -0.987042,2.4945,-0.987042, + -0.987042,2.4945,-0.987042, -0.996219,2.498438,-0.996219, -1.135521,2.498438,-0.833344, + -1.248557,2.498438,-0.649591, -1.237056,2.4945,-0.643607, -1.125061,2.4945,-0.825668, + -1.125061,2.4945,-0.825668, -1.135521,2.498438,-0.833344, -1.248557,2.498438,-0.649591, + -1.332632,2.498438,-0.447653, -1.320356,2.4945,-0.443529, -1.237056,2.4945,-0.643607, + -1.237056,2.4945,-0.643607, -1.248557,2.498438,-0.649591, -1.332632,2.498438,-0.447653, + -1.385053,2.498438,-0.230225, -1.372294,2.4945,-0.228104, -1.320356,2.4945,-0.443529, + -1.320356,2.4945,-0.443529, -1.332632,2.498438,-0.447653, -1.385053,2.498438,-0.230225, + -1.403125,2.498438,0, -1.3902,2.4945,0, -1.372294,2.4945,-0.228104, + -1.372294,2.4945,-0.228104, -1.385053,2.498438,-0.230225, -1.403125,2.498438,0, + -0.232961,2.4945,-1.401513, -0.230225,2.498438,-1.385053, 0,2.498438,-1.403125, + 0,2.498438,-1.403125, 0,2.4945,-1.4198, -0.232961,2.4945,-1.401513, + -0.452973,2.4945,-1.348469, -0.447653,2.498438,-1.332632, -0.230225,2.498438,-1.385053, + -0.230225,2.498438,-1.385053, -0.232961,2.4945,-1.401513, -0.452973,2.4945,-1.348469, + -0.657311,2.4945,-1.263395, -0.649591,2.498438,-1.248557, -0.447653,2.498438,-1.332632, + -0.447653,2.498438,-1.332632, -0.452973,2.4945,-1.348469, -0.657311,2.4945,-1.263395, + -0.843248,2.4945,-1.149016, -0.833344,2.498438,-1.135521, -0.649591,2.498438,-1.248557, + -0.649591,2.498438,-1.248557, -0.657311,2.4945,-1.263395, -0.843248,2.4945,-1.149016, + -1.008058,2.4945,-1.008058, -0.996219,2.498438,-0.996219, -0.833344,2.498438,-1.135521, + -0.833344,2.498438,-1.135521, -0.843248,2.4945,-1.149016, -1.008058,2.4945,-1.008058, + -1.149016,2.4945,-0.843248, -1.135521,2.498438,-0.833344, -0.996219,2.498438,-0.996219, + -0.996219,2.498438,-0.996219, -1.008058,2.4945,-1.008058, -1.149016,2.4945,-0.843248, + -1.263395,2.4945,-0.657311, -1.248557,2.498438,-0.649591, -1.135521,2.498438,-0.833344, + -1.135521,2.498438,-0.833344, -1.149016,2.4945,-0.843248, -1.263395,2.4945,-0.657311, + -1.348469,2.4945,-0.452973, -1.332632,2.498438,-0.447653, -1.248557,2.498438,-0.649591, + -1.248557,2.498438,-0.649591, -1.263395,2.4945,-0.657311, -1.348469,2.4945,-0.452973, + -1.401513,2.4945,-0.232961, -1.385053,2.498438,-0.230225, -1.332632,2.498438,-0.447653, + -1.332632,2.498438,-0.447653, -1.348469,2.4945,-0.452973, -1.401513,2.4945,-0.232961, + -1.4198,2.4945,0, -1.403125,2.498438,0, -1.385053,2.498438,-0.230225, + -1.385053,2.498438,-0.230225, -1.401513,2.4945,-0.232961, -1.4198,2.4945,0, + -0.236115,2.482687,-1.42049, -0.232961,2.4945,-1.401513, 0,2.4945,-1.4198, + 0,2.4945,-1.4198, 0,2.482687,-1.439025, -0.236115,2.482687,-1.42049, + -0.459107,2.482687,-1.366728, -0.452973,2.4945,-1.348469, -0.232961,2.4945,-1.401513, + -0.232961,2.4945,-1.401513, -0.236115,2.482687,-1.42049, -0.459107,2.482687,-1.366728, + -0.666211,2.482687,-1.280502, -0.657311,2.4945,-1.263395, -0.452973,2.4945,-1.348469, + -0.452973,2.4945,-1.348469, -0.459107,2.482687,-1.366728, -0.666211,2.482687,-1.280502, + -0.854666,2.482687,-1.164574, -0.843248,2.4945,-1.149016, -0.657311,2.4945,-1.263395, + -0.657311,2.4945,-1.263395, -0.666211,2.482687,-1.280502, -0.854666,2.482687,-1.164574, + -1.021708,2.482687,-1.021708, -1.008058,2.4945,-1.008058, -0.843248,2.4945,-1.149016, + -0.843248,2.4945,-1.149016, -0.854666,2.482687,-1.164574, -1.021708,2.482687,-1.021708, + -1.164574,2.482687,-0.854666, -1.149016,2.4945,-0.843248, -1.008058,2.4945,-1.008058, + -1.008058,2.4945,-1.008058, -1.021708,2.482687,-1.021708, -1.164574,2.482687,-0.854666, + -1.280502,2.482687,-0.666211, -1.263395,2.4945,-0.657311, -1.149016,2.4945,-0.843248, + -1.149016,2.4945,-0.843248, -1.164574,2.482687,-0.854666, -1.280502,2.482687,-0.666211, + -1.366728,2.482687,-0.459107, -1.348469,2.4945,-0.452973, -1.263395,2.4945,-0.657311, + -1.263395,2.4945,-0.657311, -1.280502,2.482687,-0.666211, -1.366728,2.482687,-0.459107, + -1.42049,2.482687,-0.236115, -1.401513,2.4945,-0.232961, -1.348469,2.4945,-0.452973, + -1.348469,2.4945,-0.452973, -1.366728,2.482687,-0.459107, -1.42049,2.482687,-0.236115, + -1.439025,2.482687,0, -1.4198,2.4945,0, -1.401513,2.4945,-0.232961, + -1.401513,2.4945,-0.232961, -1.42049,2.482687,-0.236115, -1.439025,2.482687,0, + -0.239491,2.463,-1.4408, -0.236115,2.482687,-1.42049, 0,2.482687,-1.439025, + 0,2.482687,-1.439025, 0,2.463,-1.4596, -0.239491,2.463,-1.4408, + -0.465671,2.463,-1.38627, -0.459107,2.482687,-1.366728, -0.236115,2.482687,-1.42049, + -0.236115,2.482687,-1.42049, -0.239491,2.463,-1.4408, -0.465671,2.463,-1.38627, + -0.675736,2.463,-1.29881, -0.666211,2.482687,-1.280502, -0.459107,2.482687,-1.366728, + -0.459107,2.482687,-1.366728, -0.465671,2.463,-1.38627, -0.675736,2.463,-1.29881, + -0.866886,2.463,-1.181225, -0.854666,2.482687,-1.164574, -0.666211,2.482687,-1.280502, + -0.666211,2.482687,-1.280502, -0.675736,2.463,-1.29881, -0.866886,2.463,-1.181225, + -1.036316,2.463,-1.036316, -1.021708,2.482687,-1.021708, -0.854666,2.482687,-1.164574, + -0.854666,2.482687,-1.164574, -0.866886,2.463,-1.181225, -1.036316,2.463,-1.036316, + -1.181225,2.463,-0.866886, -1.164574,2.482687,-0.854666, -1.021708,2.482687,-1.021708, + -1.021708,2.482687,-1.021708, -1.036316,2.463,-1.036316, -1.181225,2.463,-0.866886, + -1.29881,2.463,-0.675736, -1.280502,2.482687,-0.666211, -1.164574,2.482687,-0.854666, + -1.164574,2.482687,-0.854666, -1.181225,2.463,-0.866886, -1.29881,2.463,-0.675736, + -1.38627,2.463,-0.465671, -1.366728,2.482687,-0.459107, -1.280502,2.482687,-0.666211, + -1.280502,2.482687,-0.666211, -1.29881,2.463,-0.675736, -1.38627,2.463,-0.465671, + -1.4408,2.463,-0.239491, -1.42049,2.482687,-0.236115, -1.366728,2.482687,-0.459107, + -1.366728,2.482687,-0.459107, -1.38627,2.463,-0.465671, -1.4408,2.463,-0.239491, + -1.4596,2.463,0, -1.439025,2.482687,0, -1.42049,2.482687,-0.236115, + -1.42049,2.482687,-0.236115, -1.4408,2.463,-0.239491, -1.4596,2.463,0, + -0.242892,2.435437,-1.461258, -0.239491,2.463,-1.4408, 0,2.463,-1.4596, + 0,2.463,-1.4596, 0,2.435437,-1.480325, -0.242892,2.435437,-1.461258, + -0.472283,2.435437,-1.405953, -0.465671,2.463,-1.38627, -0.239491,2.463,-1.4408, + -0.239491,2.463,-1.4408, -0.242892,2.435437,-1.461258, -0.472283,2.435437,-1.405953, + -0.685331,2.435437,-1.317252, -0.675736,2.463,-1.29881, -0.465671,2.463,-1.38627, + -0.465671,2.463,-1.38627, -0.472283,2.435437,-1.405953, -0.685331,2.435437,-1.317252, + -0.879195,2.435437,-1.197997, -0.866886,2.463,-1.181225, -0.675736,2.463,-1.29881, + -0.675736,2.463,-1.29881, -0.685331,2.435437,-1.317252, -0.879195,2.435437,-1.197997, + -1.051031,2.435437,-1.051031, -1.036316,2.463,-1.036316, -0.866886,2.463,-1.181225, + -0.866886,2.463,-1.181225, -0.879195,2.435437,-1.197997, -1.051031,2.435437,-1.051031, + -1.197997,2.435437,-0.879195, -1.181225,2.463,-0.866886, -1.036316,2.463,-1.036316, + -1.036316,2.463,-1.036316, -1.051031,2.435437,-1.051031, -1.197997,2.435437,-0.879195, + -1.317252,2.435437,-0.685331, -1.29881,2.463,-0.675736, -1.181225,2.463,-0.866886, + -1.181225,2.463,-0.866886, -1.197997,2.435437,-0.879195, -1.317252,2.435437,-0.685331, + -1.405953,2.435437,-0.472283, -1.38627,2.463,-0.465671, -1.29881,2.463,-0.675736, + -1.29881,2.463,-0.675736, -1.317252,2.435437,-0.685331, -1.405953,2.435437,-0.472283, + -1.461258,2.435437,-0.242892, -1.4408,2.463,-0.239491, -1.38627,2.463,-0.465671, + -1.38627,2.463,-0.465671, -1.405953,2.435437,-0.472283, -1.461258,2.435437,-0.242892, + -1.480325,2.435437,0, -1.4596,2.463,0, -1.4408,2.463,-0.239491, + -1.4408,2.463,-0.239491, -1.461258,2.435437,-0.242892, -1.480325,2.435437,0, + -0.24612,2.4,-1.48068, -0.242892,2.435437,-1.461258, 0,2.435437,-1.480325, + 0,2.435437,-1.480325, 0,2.4,-1.5, -0.24612,2.4,-1.48068, + -0.47856,2.4,-1.42464, -0.472283,2.435437,-1.405953, -0.242892,2.435437,-1.461258, + -0.242892,2.435437,-1.461258, -0.24612,2.4,-1.48068, -0.47856,2.4,-1.42464, + -0.69444,2.4,-1.33476, -0.685331,2.435437,-1.317252, -0.472283,2.435437,-1.405953, + -0.472283,2.435437,-1.405953, -0.47856,2.4,-1.42464, -0.69444,2.4,-1.33476, + -0.89088,2.4,-1.21392, -0.879195,2.435437,-1.197997, -0.685331,2.435437,-1.317252, + -0.685331,2.435437,-1.317252, -0.69444,2.4,-1.33476, -0.89088,2.4,-1.21392, + -1.065,2.4,-1.065, -1.051031,2.435437,-1.051031, -0.879195,2.435437,-1.197997, + -0.879195,2.435437,-1.197997, -0.89088,2.4,-1.21392, -1.065,2.4,-1.065, + -1.21392,2.4,-0.89088, -1.197997,2.435437,-0.879195, -1.051031,2.435437,-1.051031, + -1.051031,2.435437,-1.051031, -1.065,2.4,-1.065, -1.21392,2.4,-0.89088, + -1.33476,2.4,-0.69444, -1.317252,2.435437,-0.685331, -1.197997,2.435437,-0.879195, + -1.197997,2.435437,-0.879195, -1.21392,2.4,-0.89088, -1.33476,2.4,-0.69444, + -1.42464,2.4,-0.47856, -1.405953,2.435437,-0.472283, -1.317252,2.435437,-0.685331, + -1.317252,2.435437,-0.685331, -1.33476,2.4,-0.69444, -1.42464,2.4,-0.47856, + -1.48068,2.4,-0.24612, -1.461258,2.435437,-0.242892, -1.405953,2.435437,-0.472283, + -1.405953,2.435437,-0.472283, -1.42464,2.4,-0.47856, -1.48068,2.4,-0.24612, + -1.5,2.4,0, -1.480325,2.435437,0, -1.461258,2.435437,-0.242892, + -1.461258,2.435437,-0.242892, -1.48068,2.4,-0.24612, -1.5,2.4,0, + -1.368074,2.435437,0.227403, -1.381968,2.4,0.229712, -1.4,2.4,0, + -1.4,2.4,0, -1.385925,2.435437,0, -1.368074,2.435437,0.227403, + -1.316296,2.435437,0.442166, -1.329664,2.4,0.446656, -1.381968,2.4,0.229712, + -1.381968,2.4,0.229712, -1.368074,2.435437,0.227403, -1.316296,2.435437,0.442166, + -1.233252,2.435437,0.641628, -1.245776,2.4,0.648144, -1.329664,2.4,0.446656, + -1.329664,2.4,0.446656, -1.316296,2.435437,0.442166, -1.233252,2.435437,0.641628, + -1.121601,2.435437,0.823129, -1.132992,2.4,0.831488, -1.245776,2.4,0.648144, + -1.245776,2.4,0.648144, -1.233252,2.435437,0.641628, -1.121601,2.435437,0.823129, + -0.984007,2.435437,0.984007, -0.994,2.4,0.994, -1.132992,2.4,0.831488, + -1.132992,2.4,0.831488, -1.121601,2.435437,0.823129, -0.984007,2.435437,0.984007, + -0.823129,2.435437,1.121601, -0.831488,2.4,1.132992, -0.994,2.4,0.994, + -0.994,2.4,0.994, -0.984007,2.435437,0.984007, -0.823129,2.435437,1.121601, + -0.641628,2.435437,1.233252, -0.648144,2.4,1.245776, -0.831488,2.4,1.132992, + -0.831488,2.4,1.132992, -0.823129,2.435437,1.121601, -0.641628,2.435437,1.233252, + -0.442166,2.435437,1.316296, -0.446656,2.4,1.329664, -0.648144,2.4,1.245776, + -0.648144,2.4,1.245776, -0.641628,2.435437,1.233252, -0.442166,2.435437,1.316296, + -0.227403,2.435437,1.368074, -0.229712,2.4,1.381968, -0.446656,2.4,1.329664, + -0.446656,2.4,1.329664, -0.442166,2.435437,1.316296, -0.227403,2.435437,1.368074, + 0,2.435437,1.385925, 0,2.4,1.4, -0.229712,2.4,1.381968, + -0.229712,2.4,1.381968, -0.227403,2.435437,1.368074, 0,2.435437,1.385925, + -1.36262,2.463,0.226496, -1.368074,2.435437,0.227403, -1.385925,2.435437,0, + -1.385925,2.435437,0, -1.3804,2.463,0, -1.36262,2.463,0.226496, + -1.311049,2.463,0.440403, -1.316296,2.435437,0.442166, -1.368074,2.435437,0.227403, + -1.368074,2.435437,0.227403, -1.36262,2.463,0.226496, -1.311049,2.463,0.440403, + -1.228335,2.463,0.63907, -1.233252,2.435437,0.641628, -1.316296,2.435437,0.442166, + -1.316296,2.435437,0.442166, -1.311049,2.463,0.440403, -1.228335,2.463,0.63907, + -1.11713,2.463,0.819847, -1.121601,2.435437,0.823129, -1.233252,2.435437,0.641628, + -1.233252,2.435437,0.641628, -1.228335,2.463,0.63907, -1.11713,2.463,0.819847, + -0.980084,2.463,0.980084, -0.984007,2.435437,0.984007, -1.121601,2.435437,0.823129, + -1.121601,2.435437,0.823129, -1.11713,2.463,0.819847, -0.980084,2.463,0.980084, + -0.819847,2.463,1.11713, -0.823129,2.435437,1.121601, -0.984007,2.435437,0.984007, + -0.984007,2.435437,0.984007, -0.980084,2.463,0.980084, -0.819847,2.463,1.11713, + -0.63907,2.463,1.228335, -0.641628,2.435437,1.233252, -0.823129,2.435437,1.121601, + -0.823129,2.435437,1.121601, -0.819847,2.463,1.11713, -0.63907,2.463,1.228335, + -0.440403,2.463,1.311049, -0.442166,2.435437,1.316296, -0.641628,2.435437,1.233252, + -0.641628,2.435437,1.233252, -0.63907,2.463,1.228335, -0.440403,2.463,1.311049, + -0.226496,2.463,1.36262, -0.227403,2.435437,1.368074, -0.442166,2.435437,1.316296, + -0.442166,2.435437,1.316296, -0.440403,2.463,1.311049, -0.226496,2.463,1.36262, + 0,2.463,1.3804, 0,2.435437,1.385925, -0.227403,2.435437,1.368074, + -0.227403,2.435437,1.368074, -0.226496,2.463,1.36262, 0,2.463,1.3804, + -1.364422,2.482687,0.226795, -1.36262,2.463,0.226496, -1.3804,2.463,0, + -1.3804,2.463,0, -1.382225,2.482687,0, -1.364422,2.482687,0.226795, + -1.312782,2.482687,0.440985, -1.311049,2.463,0.440403, -1.36262,2.463,0.226496, + -1.36262,2.463,0.226496, -1.364422,2.482687,0.226795, -1.312782,2.482687,0.440985, + -1.229959,2.482687,0.639915, -1.228335,2.463,0.63907, -1.311049,2.463,0.440403, + -1.311049,2.463,0.440403, -1.312782,2.482687,0.440985, -1.229959,2.482687,0.639915, + -1.118607,2.482687,0.820931, -1.11713,2.463,0.819847, -1.228335,2.463,0.63907, + -1.228335,2.463,0.63907, -1.229959,2.482687,0.639915, -1.118607,2.482687,0.820931, + -0.98138,2.482687,0.98138, -0.980084,2.463,0.980084, -1.11713,2.463,0.819847, + -1.11713,2.463,0.819847, -1.118607,2.482687,0.820931, -0.98138,2.482687,0.98138, + -0.820931,2.482687,1.118607, -0.819847,2.463,1.11713, -0.980084,2.463,0.980084, + -0.980084,2.463,0.980084, -0.98138,2.482687,0.98138, -0.820931,2.482687,1.118607, + -0.639915,2.482687,1.229959, -0.63907,2.463,1.228335, -0.819847,2.463,1.11713, + -0.819847,2.463,1.11713, -0.820931,2.482687,1.118607, -0.639915,2.482687,1.229959, + -0.440985,2.482687,1.312782, -0.440403,2.463,1.311049, -0.63907,2.463,1.228335, + -0.63907,2.463,1.228335, -0.639915,2.482687,1.229959, -0.440985,2.482687,1.312782, + -0.226795,2.482687,1.364422, -0.226496,2.463,1.36262, -0.440403,2.463,1.311049, + -0.440403,2.463,1.311049, -0.440985,2.482687,1.312782, -0.226795,2.482687,1.364422, + 0,2.482687,1.382225, 0,2.463,1.3804, -0.226496,2.463,1.36262, + -0.226496,2.463,1.36262, -0.226795,2.482687,1.364422, 0,2.482687,1.382225, + -1.372294,2.4945,0.228104, -1.364422,2.482687,0.226795, -1.382225,2.482687,0, + -1.382225,2.482687,0, -1.3902,2.4945,0, -1.372294,2.4945,0.228104, + -1.320356,2.4945,0.443529, -1.312782,2.482687,0.440985, -1.364422,2.482687,0.226795, + -1.364422,2.482687,0.226795, -1.372294,2.4945,0.228104, -1.320356,2.4945,0.443529, + -1.237056,2.4945,0.643607, -1.229959,2.482687,0.639915, -1.312782,2.482687,0.440985, + -1.312782,2.482687,0.440985, -1.320356,2.4945,0.443529, -1.237056,2.4945,0.643607, + -1.125061,2.4945,0.825668, -1.118607,2.482687,0.820931, -1.229959,2.482687,0.639915, + -1.229959,2.482687,0.639915, -1.237056,2.4945,0.643607, -1.125061,2.4945,0.825668, + -0.987042,2.4945,0.987042, -0.98138,2.482687,0.98138, -1.118607,2.482687,0.820931, + -1.118607,2.482687,0.820931, -1.125061,2.4945,0.825668, -0.987042,2.4945,0.987042, + -0.825668,2.4945,1.125061, -0.820931,2.482687,1.118607, -0.98138,2.482687,0.98138, + -0.98138,2.482687,0.98138, -0.987042,2.4945,0.987042, -0.825668,2.4945,1.125061, + -0.643607,2.4945,1.237056, -0.639915,2.482687,1.229959, -0.820931,2.482687,1.118607, + -0.820931,2.482687,1.118607, -0.825668,2.4945,1.125061, -0.643607,2.4945,1.237056, + -0.443529,2.4945,1.320356, -0.440985,2.482687,1.312782, -0.639915,2.482687,1.229959, + -0.639915,2.482687,1.229959, -0.643607,2.4945,1.237056, -0.443529,2.4945,1.320356, + -0.228104,2.4945,1.372294, -0.226795,2.482687,1.364422, -0.440985,2.482687,1.312782, + -0.440985,2.482687,1.312782, -0.443529,2.4945,1.320356, -0.228104,2.4945,1.372294, + 0,2.4945,1.3902, 0,2.482687,1.382225, -0.226795,2.482687,1.364422, + -0.226795,2.482687,1.364422, -0.228104,2.4945,1.372294, 0,2.4945,1.3902, + -1.385053,2.498438,0.230225, -1.372294,2.4945,0.228104, -1.3902,2.4945,0, + -1.3902,2.4945,0, -1.403125,2.498438,0, -1.385053,2.498438,0.230225, + -1.332632,2.498438,0.447653, -1.320356,2.4945,0.443529, -1.372294,2.4945,0.228104, + -1.372294,2.4945,0.228104, -1.385053,2.498438,0.230225, -1.332632,2.498438,0.447653, + -1.248557,2.498438,0.649591, -1.237056,2.4945,0.643607, -1.320356,2.4945,0.443529, + -1.320356,2.4945,0.443529, -1.332632,2.498438,0.447653, -1.248557,2.498438,0.649591, + -1.135521,2.498438,0.833344, -1.125061,2.4945,0.825668, -1.237056,2.4945,0.643607, + -1.237056,2.4945,0.643607, -1.248557,2.498438,0.649591, -1.135521,2.498438,0.833344, + -0.996219,2.498438,0.996219, -0.987042,2.4945,0.987042, -1.125061,2.4945,0.825668, + -1.125061,2.4945,0.825668, -1.135521,2.498438,0.833344, -0.996219,2.498438,0.996219, + -0.833344,2.498438,1.135521, -0.825668,2.4945,1.125061, -0.987042,2.4945,0.987042, + -0.987042,2.4945,0.987042, -0.996219,2.498438,0.996219, -0.833344,2.498438,1.135521, + -0.649591,2.498438,1.248557, -0.643607,2.4945,1.237056, -0.825668,2.4945,1.125061, + -0.825668,2.4945,1.125061, -0.833344,2.498438,1.135521, -0.649591,2.498438,1.248557, + -0.447653,2.498438,1.332632, -0.443529,2.4945,1.320356, -0.643607,2.4945,1.237056, + -0.643607,2.4945,1.237056, -0.649591,2.498438,1.248557, -0.447653,2.498438,1.332632, + -0.230225,2.498438,1.385053, -0.228104,2.4945,1.372294, -0.443529,2.4945,1.320356, + -0.443529,2.4945,1.320356, -0.447653,2.498438,1.332632, -0.230225,2.498438,1.385053, + 0,2.498438,1.403125, 0,2.4945,1.3902, -0.228104,2.4945,1.372294, + -0.228104,2.4945,1.372294, -0.230225,2.498438,1.385053, 0,2.498438,1.403125, + -1.401513,2.4945,0.232961, -1.385053,2.498438,0.230225, -1.403125,2.498438,0, + -1.403125,2.498438,0, -1.4198,2.4945,0, -1.401513,2.4945,0.232961, + -1.348469,2.4945,0.452973, -1.332632,2.498438,0.447653, -1.385053,2.498438,0.230225, + -1.385053,2.498438,0.230225, -1.401513,2.4945,0.232961, -1.348469,2.4945,0.452973, + -1.263395,2.4945,0.657311, -1.248557,2.498438,0.649591, -1.332632,2.498438,0.447653, + -1.332632,2.498438,0.447653, -1.348469,2.4945,0.452973, -1.263395,2.4945,0.657311, + -1.149016,2.4945,0.843248, -1.135521,2.498438,0.833344, -1.248557,2.498438,0.649591, + -1.248557,2.498438,0.649591, -1.263395,2.4945,0.657311, -1.149016,2.4945,0.843248, + -1.008058,2.4945,1.008058, -0.996219,2.498438,0.996219, -1.135521,2.498438,0.833344, + -1.135521,2.498438,0.833344, -1.149016,2.4945,0.843248, -1.008058,2.4945,1.008058, + -0.843248,2.4945,1.149016, -0.833344,2.498438,1.135521, -0.996219,2.498438,0.996219, + -0.996219,2.498438,0.996219, -1.008058,2.4945,1.008058, -0.843248,2.4945,1.149016, + -0.657311,2.4945,1.263395, -0.649591,2.498438,1.248557, -0.833344,2.498438,1.135521, + -0.833344,2.498438,1.135521, -0.843248,2.4945,1.149016, -0.657311,2.4945,1.263395, + -0.452973,2.4945,1.348469, -0.447653,2.498438,1.332632, -0.649591,2.498438,1.248557, + -0.649591,2.498438,1.248557, -0.657311,2.4945,1.263395, -0.452973,2.4945,1.348469, + -0.232961,2.4945,1.401513, -0.230225,2.498438,1.385053, -0.447653,2.498438,1.332632, + -0.447653,2.498438,1.332632, -0.452973,2.4945,1.348469, -0.232961,2.4945,1.401513, + 0,2.4945,1.4198, 0,2.498438,1.403125, -0.230225,2.498438,1.385053, + -0.230225,2.498438,1.385053, -0.232961,2.4945,1.401513, 0,2.4945,1.4198, + -1.42049,2.482687,0.236115, -1.401513,2.4945,0.232961, -1.4198,2.4945,0, + -1.4198,2.4945,0, -1.439025,2.482687,0, -1.42049,2.482687,0.236115, + -1.366728,2.482687,0.459107, -1.348469,2.4945,0.452973, -1.401513,2.4945,0.232961, + -1.401513,2.4945,0.232961, -1.42049,2.482687,0.236115, -1.366728,2.482687,0.459107, + -1.280502,2.482687,0.666211, -1.263395,2.4945,0.657311, -1.348469,2.4945,0.452973, + -1.348469,2.4945,0.452973, -1.366728,2.482687,0.459107, -1.280502,2.482687,0.666211, + -1.164574,2.482687,0.854666, -1.149016,2.4945,0.843248, -1.263395,2.4945,0.657311, + -1.263395,2.4945,0.657311, -1.280502,2.482687,0.666211, -1.164574,2.482687,0.854666, + -1.021708,2.482687,1.021708, -1.008058,2.4945,1.008058, -1.149016,2.4945,0.843248, + -1.149016,2.4945,0.843248, -1.164574,2.482687,0.854666, -1.021708,2.482687,1.021708, + -0.854666,2.482687,1.164574, -0.843248,2.4945,1.149016, -1.008058,2.4945,1.008058, + -1.008058,2.4945,1.008058, -1.021708,2.482687,1.021708, -0.854666,2.482687,1.164574, + -0.666211,2.482687,1.280502, -0.657311,2.4945,1.263395, -0.843248,2.4945,1.149016, + -0.843248,2.4945,1.149016, -0.854666,2.482687,1.164574, -0.666211,2.482687,1.280502, + -0.459107,2.482687,1.366728, -0.452973,2.4945,1.348469, -0.657311,2.4945,1.263395, + -0.657311,2.4945,1.263395, -0.666211,2.482687,1.280502, -0.459107,2.482687,1.366728, + -0.236115,2.482687,1.42049, -0.232961,2.4945,1.401513, -0.452973,2.4945,1.348469, + -0.452973,2.4945,1.348469, -0.459107,2.482687,1.366728, -0.236115,2.482687,1.42049, + 0,2.482687,1.439025, 0,2.4945,1.4198, -0.232961,2.4945,1.401513, + -0.232961,2.4945,1.401513, -0.236115,2.482687,1.42049, 0,2.482687,1.439025, + -1.4408,2.463,0.239491, -1.42049,2.482687,0.236115, -1.439025,2.482687,0, + -1.439025,2.482687,0, -1.4596,2.463,0, -1.4408,2.463,0.239491, + -1.38627,2.463,0.465671, -1.366728,2.482687,0.459107, -1.42049,2.482687,0.236115, + -1.42049,2.482687,0.236115, -1.4408,2.463,0.239491, -1.38627,2.463,0.465671, + -1.29881,2.463,0.675736, -1.280502,2.482687,0.666211, -1.366728,2.482687,0.459107, + -1.366728,2.482687,0.459107, -1.38627,2.463,0.465671, -1.29881,2.463,0.675736, + -1.181225,2.463,0.866886, -1.164574,2.482687,0.854666, -1.280502,2.482687,0.666211, + -1.280502,2.482687,0.666211, -1.29881,2.463,0.675736, -1.181225,2.463,0.866886, + -1.036316,2.463,1.036316, -1.021708,2.482687,1.021708, -1.164574,2.482687,0.854666, + -1.164574,2.482687,0.854666, -1.181225,2.463,0.866886, -1.036316,2.463,1.036316, + -0.866886,2.463,1.181225, -0.854666,2.482687,1.164574, -1.021708,2.482687,1.021708, + -1.021708,2.482687,1.021708, -1.036316,2.463,1.036316, -0.866886,2.463,1.181225, + -0.675736,2.463,1.29881, -0.666211,2.482687,1.280502, -0.854666,2.482687,1.164574, + -0.854666,2.482687,1.164574, -0.866886,2.463,1.181225, -0.675736,2.463,1.29881, + -0.465671,2.463,1.38627, -0.459107,2.482687,1.366728, -0.666211,2.482687,1.280502, + -0.666211,2.482687,1.280502, -0.675736,2.463,1.29881, -0.465671,2.463,1.38627, + -0.239491,2.463,1.4408, -0.236115,2.482687,1.42049, -0.459107,2.482687,1.366728, + -0.459107,2.482687,1.366728, -0.465671,2.463,1.38627, -0.239491,2.463,1.4408, + 0,2.463,1.4596, 0,2.482687,1.439025, -0.236115,2.482687,1.42049, + -0.236115,2.482687,1.42049, -0.239491,2.463,1.4408, 0,2.463,1.4596, + -1.461258,2.435437,0.242892, -1.4408,2.463,0.239491, -1.4596,2.463,0, + -1.4596,2.463,0, -1.480325,2.435437,0, -1.461258,2.435437,0.242892, + -1.405953,2.435437,0.472283, -1.38627,2.463,0.465671, -1.4408,2.463,0.239491, + -1.4408,2.463,0.239491, -1.461258,2.435437,0.242892, -1.405953,2.435437,0.472283, + -1.317252,2.435437,0.685331, -1.29881,2.463,0.675736, -1.38627,2.463,0.465671, + -1.38627,2.463,0.465671, -1.405953,2.435437,0.472283, -1.317252,2.435437,0.685331, + -1.197997,2.435437,0.879195, -1.181225,2.463,0.866886, -1.29881,2.463,0.675736, + -1.29881,2.463,0.675736, -1.317252,2.435437,0.685331, -1.197997,2.435437,0.879195, + -1.051031,2.435437,1.051031, -1.036316,2.463,1.036316, -1.181225,2.463,0.866886, + -1.181225,2.463,0.866886, -1.197997,2.435437,0.879195, -1.051031,2.435437,1.051031, + -0.879195,2.435437,1.197997, -0.866886,2.463,1.181225, -1.036316,2.463,1.036316, + -1.036316,2.463,1.036316, -1.051031,2.435437,1.051031, -0.879195,2.435437,1.197997, + -0.685331,2.435437,1.317252, -0.675736,2.463,1.29881, -0.866886,2.463,1.181225, + -0.866886,2.463,1.181225, -0.879195,2.435437,1.197997, -0.685331,2.435437,1.317252, + -0.472283,2.435437,1.405953, -0.465671,2.463,1.38627, -0.675736,2.463,1.29881, + -0.675736,2.463,1.29881, -0.685331,2.435437,1.317252, -0.472283,2.435437,1.405953, + -0.242892,2.435437,1.461258, -0.239491,2.463,1.4408, -0.465671,2.463,1.38627, + -0.465671,2.463,1.38627, -0.472283,2.435437,1.405953, -0.242892,2.435437,1.461258, + 0,2.435437,1.480325, 0,2.463,1.4596, -0.239491,2.463,1.4408, + -0.239491,2.463,1.4408, -0.242892,2.435437,1.461258, 0,2.435437,1.480325, + -1.48068,2.4,0.24612, -1.461258,2.435437,0.242892, -1.480325,2.435437,0, + -1.480325,2.435437,0, -1.5,2.4,0, -1.48068,2.4,0.24612, + -1.42464,2.4,0.47856, -1.405953,2.435437,0.472283, -1.461258,2.435437,0.242892, + -1.461258,2.435437,0.242892, -1.48068,2.4,0.24612, -1.42464,2.4,0.47856, + -1.33476,2.4,0.69444, -1.317252,2.435437,0.685331, -1.405953,2.435437,0.472283, + -1.405953,2.435437,0.472283, -1.42464,2.4,0.47856, -1.33476,2.4,0.69444, + -1.21392,2.4,0.89088, -1.197997,2.435437,0.879195, -1.317252,2.435437,0.685331, + -1.317252,2.435437,0.685331, -1.33476,2.4,0.69444, -1.21392,2.4,0.89088, + -1.065,2.4,1.065, -1.051031,2.435437,1.051031, -1.197997,2.435437,0.879195, + -1.197997,2.435437,0.879195, -1.21392,2.4,0.89088, -1.065,2.4,1.065, + -0.89088,2.4,1.21392, -0.879195,2.435437,1.197997, -1.051031,2.435437,1.051031, + -1.051031,2.435437,1.051031, -1.065,2.4,1.065, -0.89088,2.4,1.21392, + -0.69444,2.4,1.33476, -0.685331,2.435437,1.317252, -0.879195,2.435437,1.197997, + -0.879195,2.435437,1.197997, -0.89088,2.4,1.21392, -0.69444,2.4,1.33476, + -0.47856,2.4,1.42464, -0.472283,2.435437,1.405953, -0.685331,2.435437,1.317252, + -0.685331,2.435437,1.317252, -0.69444,2.4,1.33476, -0.47856,2.4,1.42464, + -0.24612,2.4,1.48068, -0.242892,2.435437,1.461258, -0.472283,2.435437,1.405953, + -0.472283,2.435437,1.405953, -0.47856,2.4,1.42464, -0.24612,2.4,1.48068, + 0,2.4,1.5, 0,2.435437,1.480325, -0.242892,2.435437,1.461258, + -0.242892,2.435437,1.461258, -0.24612,2.4,1.48068, 0,2.4,1.5, + 0.227403,2.435437,1.368074, 0.229712,2.4,1.381968, 0,2.4,1.4, + 0,2.4,1.4, 0,2.435437,1.385925, 0.227403,2.435437,1.368074, + 0.442166,2.435437,1.316296, 0.446656,2.4,1.329664, 0.229712,2.4,1.381968, + 0.229712,2.4,1.381968, 0.227403,2.435437,1.368074, 0.442166,2.435437,1.316296, + 0.641628,2.435437,1.233252, 0.648144,2.4,1.245776, 0.446656,2.4,1.329664, + 0.446656,2.4,1.329664, 0.442166,2.435437,1.316296, 0.641628,2.435437,1.233252, + 0.823129,2.435437,1.121601, 0.831488,2.4,1.132992, 0.648144,2.4,1.245776, + 0.648144,2.4,1.245776, 0.641628,2.435437,1.233252, 0.823129,2.435437,1.121601, + 0.984007,2.435437,0.984007, 0.994,2.4,0.994, 0.831488,2.4,1.132992, + 0.831488,2.4,1.132992, 0.823129,2.435437,1.121601, 0.984007,2.435437,0.984007, + 1.121601,2.435437,0.823129, 1.132992,2.4,0.831488, 0.994,2.4,0.994, + 0.994,2.4,0.994, 0.984007,2.435437,0.984007, 1.121601,2.435437,0.823129, + 1.233252,2.435437,0.641628, 1.245776,2.4,0.648144, 1.132992,2.4,0.831488, + 1.132992,2.4,0.831488, 1.121601,2.435437,0.823129, 1.233252,2.435437,0.641628, + 1.316296,2.435437,0.442166, 1.329664,2.4,0.446656, 1.245776,2.4,0.648144, + 1.245776,2.4,0.648144, 1.233252,2.435437,0.641628, 1.316296,2.435437,0.442166, + 1.368074,2.435437,0.227403, 1.381968,2.4,0.229712, 1.329664,2.4,0.446656, + 1.329664,2.4,0.446656, 1.316296,2.435437,0.442166, 1.368074,2.435437,0.227403, + 1.385925,2.435437,0, 1.4,2.4,0, 1.381968,2.4,0.229712, + 1.381968,2.4,0.229712, 1.368074,2.435437,0.227403, 1.385925,2.435437,0, + 0.226496,2.463,1.36262, 0.227403,2.435437,1.368074, 0,2.435437,1.385925, + 0,2.435437,1.385925, 0,2.463,1.3804, 0.226496,2.463,1.36262, + 0.440403,2.463,1.311049, 0.442166,2.435437,1.316296, 0.227403,2.435437,1.368074, + 0.227403,2.435437,1.368074, 0.226496,2.463,1.36262, 0.440403,2.463,1.311049, + 0.63907,2.463,1.228335, 0.641628,2.435437,1.233252, 0.442166,2.435437,1.316296, + 0.442166,2.435437,1.316296, 0.440403,2.463,1.311049, 0.63907,2.463,1.228335, + 0.819847,2.463,1.11713, 0.823129,2.435437,1.121601, 0.641628,2.435437,1.233252, + 0.641628,2.435437,1.233252, 0.63907,2.463,1.228335, 0.819847,2.463,1.11713, + 0.980084,2.463,0.980084, 0.984007,2.435437,0.984007, 0.823129,2.435437,1.121601, + 0.823129,2.435437,1.121601, 0.819847,2.463,1.11713, 0.980084,2.463,0.980084, + 1.11713,2.463,0.819847, 1.121601,2.435437,0.823129, 0.984007,2.435437,0.984007, + 0.984007,2.435437,0.984007, 0.980084,2.463,0.980084, 1.11713,2.463,0.819847, + 1.228335,2.463,0.63907, 1.233252,2.435437,0.641628, 1.121601,2.435437,0.823129, + 1.121601,2.435437,0.823129, 1.11713,2.463,0.819847, 1.228335,2.463,0.63907, + 1.311049,2.463,0.440403, 1.316296,2.435437,0.442166, 1.233252,2.435437,0.641628, + 1.233252,2.435437,0.641628, 1.228335,2.463,0.63907, 1.311049,2.463,0.440403, + 1.36262,2.463,0.226496, 1.368074,2.435437,0.227403, 1.316296,2.435437,0.442166, + 1.316296,2.435437,0.442166, 1.311049,2.463,0.440403, 1.36262,2.463,0.226496, + 1.3804,2.463,0, 1.385925,2.435437,0, 1.368074,2.435437,0.227403, + 1.368074,2.435437,0.227403, 1.36262,2.463,0.226496, 1.3804,2.463,0, + 0.226795,2.482687,1.364422, 0.226496,2.463,1.36262, 0,2.463,1.3804, + 0,2.463,1.3804, 0,2.482687,1.382225, 0.226795,2.482687,1.364422, + 0.440985,2.482687,1.312782, 0.440403,2.463,1.311049, 0.226496,2.463,1.36262, + 0.226496,2.463,1.36262, 0.226795,2.482687,1.364422, 0.440985,2.482687,1.312782, + 0.639915,2.482687,1.229959, 0.63907,2.463,1.228335, 0.440403,2.463,1.311049, + 0.440403,2.463,1.311049, 0.440985,2.482687,1.312782, 0.639915,2.482687,1.229959, + 0.820931,2.482687,1.118607, 0.819847,2.463,1.11713, 0.63907,2.463,1.228335, + 0.63907,2.463,1.228335, 0.639915,2.482687,1.229959, 0.820931,2.482687,1.118607, + 0.98138,2.482687,0.98138, 0.980084,2.463,0.980084, 0.819847,2.463,1.11713, + 0.819847,2.463,1.11713, 0.820931,2.482687,1.118607, 0.98138,2.482687,0.98138, + 1.118607,2.482687,0.820931, 1.11713,2.463,0.819847, 0.980084,2.463,0.980084, + 0.980084,2.463,0.980084, 0.98138,2.482687,0.98138, 1.118607,2.482687,0.820931, + 1.229959,2.482687,0.639915, 1.228335,2.463,0.63907, 1.11713,2.463,0.819847, + 1.11713,2.463,0.819847, 1.118607,2.482687,0.820931, 1.229959,2.482687,0.639915, + 1.312782,2.482687,0.440985, 1.311049,2.463,0.440403, 1.228335,2.463,0.63907, + 1.228335,2.463,0.63907, 1.229959,2.482687,0.639915, 1.312782,2.482687,0.440985, + 1.364422,2.482687,0.226795, 1.36262,2.463,0.226496, 1.311049,2.463,0.440403, + 1.311049,2.463,0.440403, 1.312782,2.482687,0.440985, 1.364422,2.482687,0.226795, + 1.382225,2.482687,0, 1.3804,2.463,0, 1.36262,2.463,0.226496, + 1.36262,2.463,0.226496, 1.364422,2.482687,0.226795, 1.382225,2.482687,0, + 0.228104,2.4945,1.372294, 0.226795,2.482687,1.364422, 0,2.482687,1.382225, + 0,2.482687,1.382225, 0,2.4945,1.3902, 0.228104,2.4945,1.372294, + 0.443529,2.4945,1.320356, 0.440985,2.482687,1.312782, 0.226795,2.482687,1.364422, + 0.226795,2.482687,1.364422, 0.228104,2.4945,1.372294, 0.443529,2.4945,1.320356, + 0.643607,2.4945,1.237056, 0.639915,2.482687,1.229959, 0.440985,2.482687,1.312782, + 0.440985,2.482687,1.312782, 0.443529,2.4945,1.320356, 0.643607,2.4945,1.237056, + 0.825668,2.4945,1.125061, 0.820931,2.482687,1.118607, 0.639915,2.482687,1.229959, + 0.639915,2.482687,1.229959, 0.643607,2.4945,1.237056, 0.825668,2.4945,1.125061, + 0.987042,2.4945,0.987042, 0.98138,2.482687,0.98138, 0.820931,2.482687,1.118607, + 0.820931,2.482687,1.118607, 0.825668,2.4945,1.125061, 0.987042,2.4945,0.987042, + 1.125061,2.4945,0.825668, 1.118607,2.482687,0.820931, 0.98138,2.482687,0.98138, + 0.98138,2.482687,0.98138, 0.987042,2.4945,0.987042, 1.125061,2.4945,0.825668, + 1.237056,2.4945,0.643607, 1.229959,2.482687,0.639915, 1.118607,2.482687,0.820931, + 1.118607,2.482687,0.820931, 1.125061,2.4945,0.825668, 1.237056,2.4945,0.643607, + 1.320356,2.4945,0.443529, 1.312782,2.482687,0.440985, 1.229959,2.482687,0.639915, + 1.229959,2.482687,0.639915, 1.237056,2.4945,0.643607, 1.320356,2.4945,0.443529, + 1.372294,2.4945,0.228104, 1.364422,2.482687,0.226795, 1.312782,2.482687,0.440985, + 1.312782,2.482687,0.440985, 1.320356,2.4945,0.443529, 1.372294,2.4945,0.228104, + 1.3902,2.4945,0, 1.382225,2.482687,0, 1.364422,2.482687,0.226795, + 1.364422,2.482687,0.226795, 1.372294,2.4945,0.228104, 1.3902,2.4945,0, + 0.230225,2.498438,1.385053, 0.228104,2.4945,1.372294, 0,2.4945,1.3902, + 0,2.4945,1.3902, 0,2.498438,1.403125, 0.230225,2.498438,1.385053, + 0.447653,2.498438,1.332632, 0.443529,2.4945,1.320356, 0.228104,2.4945,1.372294, + 0.228104,2.4945,1.372294, 0.230225,2.498438,1.385053, 0.447653,2.498438,1.332632, + 0.649591,2.498438,1.248557, 0.643607,2.4945,1.237056, 0.443529,2.4945,1.320356, + 0.443529,2.4945,1.320356, 0.447653,2.498438,1.332632, 0.649591,2.498438,1.248557, + 0.833344,2.498438,1.135521, 0.825668,2.4945,1.125061, 0.643607,2.4945,1.237056, + 0.643607,2.4945,1.237056, 0.649591,2.498438,1.248557, 0.833344,2.498438,1.135521, + 0.996219,2.498438,0.996219, 0.987042,2.4945,0.987042, 0.825668,2.4945,1.125061, + 0.825668,2.4945,1.125061, 0.833344,2.498438,1.135521, 0.996219,2.498438,0.996219, + 1.135521,2.498438,0.833344, 1.125061,2.4945,0.825668, 0.987042,2.4945,0.987042, + 0.987042,2.4945,0.987042, 0.996219,2.498438,0.996219, 1.135521,2.498438,0.833344, + 1.248557,2.498438,0.649591, 1.237056,2.4945,0.643607, 1.125061,2.4945,0.825668, + 1.125061,2.4945,0.825668, 1.135521,2.498438,0.833344, 1.248557,2.498438,0.649591, + 1.332632,2.498438,0.447653, 1.320356,2.4945,0.443529, 1.237056,2.4945,0.643607, + 1.237056,2.4945,0.643607, 1.248557,2.498438,0.649591, 1.332632,2.498438,0.447653, + 1.385053,2.498438,0.230225, 1.372294,2.4945,0.228104, 1.320356,2.4945,0.443529, + 1.320356,2.4945,0.443529, 1.332632,2.498438,0.447653, 1.385053,2.498438,0.230225, + 1.403125,2.498438,0, 1.3902,2.4945,0, 1.372294,2.4945,0.228104, + 1.372294,2.4945,0.228104, 1.385053,2.498438,0.230225, 1.403125,2.498438,0, + 0.232961,2.4945,1.401513, 0.230225,2.498438,1.385053, 0,2.498438,1.403125, + 0,2.498438,1.403125, 0,2.4945,1.4198, 0.232961,2.4945,1.401513, + 0.452973,2.4945,1.348469, 0.447653,2.498438,1.332632, 0.230225,2.498438,1.385053, + 0.230225,2.498438,1.385053, 0.232961,2.4945,1.401513, 0.452973,2.4945,1.348469, + 0.657311,2.4945,1.263395, 0.649591,2.498438,1.248557, 0.447653,2.498438,1.332632, + 0.447653,2.498438,1.332632, 0.452973,2.4945,1.348469, 0.657311,2.4945,1.263395, + 0.843248,2.4945,1.149016, 0.833344,2.498438,1.135521, 0.649591,2.498438,1.248557, + 0.649591,2.498438,1.248557, 0.657311,2.4945,1.263395, 0.843248,2.4945,1.149016, + 1.008058,2.4945,1.008058, 0.996219,2.498438,0.996219, 0.833344,2.498438,1.135521, + 0.833344,2.498438,1.135521, 0.843248,2.4945,1.149016, 1.008058,2.4945,1.008058, + 1.149016,2.4945,0.843248, 1.135521,2.498438,0.833344, 0.996219,2.498438,0.996219, + 0.996219,2.498438,0.996219, 1.008058,2.4945,1.008058, 1.149016,2.4945,0.843248, + 1.263395,2.4945,0.657311, 1.248557,2.498438,0.649591, 1.135521,2.498438,0.833344, + 1.135521,2.498438,0.833344, 1.149016,2.4945,0.843248, 1.263395,2.4945,0.657311, + 1.348469,2.4945,0.452973, 1.332632,2.498438,0.447653, 1.248557,2.498438,0.649591, + 1.248557,2.498438,0.649591, 1.263395,2.4945,0.657311, 1.348469,2.4945,0.452973, + 1.401513,2.4945,0.232961, 1.385053,2.498438,0.230225, 1.332632,2.498438,0.447653, + 1.332632,2.498438,0.447653, 1.348469,2.4945,0.452973, 1.401513,2.4945,0.232961, + 1.4198,2.4945,0, 1.403125,2.498438,0, 1.385053,2.498438,0.230225, + 1.385053,2.498438,0.230225, 1.401513,2.4945,0.232961, 1.4198,2.4945,0, + 0.236115,2.482687,1.42049, 0.232961,2.4945,1.401513, 0,2.4945,1.4198, + 0,2.4945,1.4198, 0,2.482687,1.439025, 0.236115,2.482687,1.42049, + 0.459107,2.482687,1.366728, 0.452973,2.4945,1.348469, 0.232961,2.4945,1.401513, + 0.232961,2.4945,1.401513, 0.236115,2.482687,1.42049, 0.459107,2.482687,1.366728, + 0.666211,2.482687,1.280502, 0.657311,2.4945,1.263395, 0.452973,2.4945,1.348469, + 0.452973,2.4945,1.348469, 0.459107,2.482687,1.366728, 0.666211,2.482687,1.280502, + 0.854666,2.482687,1.164574, 0.843248,2.4945,1.149016, 0.657311,2.4945,1.263395, + 0.657311,2.4945,1.263395, 0.666211,2.482687,1.280502, 0.854666,2.482687,1.164574, + 1.021708,2.482687,1.021708, 1.008058,2.4945,1.008058, 0.843248,2.4945,1.149016, + 0.843248,2.4945,1.149016, 0.854666,2.482687,1.164574, 1.021708,2.482687,1.021708, + 1.164574,2.482687,0.854666, 1.149016,2.4945,0.843248, 1.008058,2.4945,1.008058, + 1.008058,2.4945,1.008058, 1.021708,2.482687,1.021708, 1.164574,2.482687,0.854666, + 1.280502,2.482687,0.666211, 1.263395,2.4945,0.657311, 1.149016,2.4945,0.843248, + 1.149016,2.4945,0.843248, 1.164574,2.482687,0.854666, 1.280502,2.482687,0.666211, + 1.366728,2.482687,0.459107, 1.348469,2.4945,0.452973, 1.263395,2.4945,0.657311, + 1.263395,2.4945,0.657311, 1.280502,2.482687,0.666211, 1.366728,2.482687,0.459107, + 1.42049,2.482687,0.236115, 1.401513,2.4945,0.232961, 1.348469,2.4945,0.452973, + 1.348469,2.4945,0.452973, 1.366728,2.482687,0.459107, 1.42049,2.482687,0.236115, + 1.439025,2.482687,0, 1.4198,2.4945,0, 1.401513,2.4945,0.232961, + 1.401513,2.4945,0.232961, 1.42049,2.482687,0.236115, 1.439025,2.482687,0, + 0.239491,2.463,1.4408, 0.236115,2.482687,1.42049, 0,2.482687,1.439025, + 0,2.482687,1.439025, 0,2.463,1.4596, 0.239491,2.463,1.4408, + 0.465671,2.463,1.38627, 0.459107,2.482687,1.366728, 0.236115,2.482687,1.42049, + 0.236115,2.482687,1.42049, 0.239491,2.463,1.4408, 0.465671,2.463,1.38627, + 0.675736,2.463,1.29881, 0.666211,2.482687,1.280502, 0.459107,2.482687,1.366728, + 0.459107,2.482687,1.366728, 0.465671,2.463,1.38627, 0.675736,2.463,1.29881, + 0.866886,2.463,1.181225, 0.854666,2.482687,1.164574, 0.666211,2.482687,1.280502, + 0.666211,2.482687,1.280502, 0.675736,2.463,1.29881, 0.866886,2.463,1.181225, + 1.036316,2.463,1.036316, 1.021708,2.482687,1.021708, 0.854666,2.482687,1.164574, + 0.854666,2.482687,1.164574, 0.866886,2.463,1.181225, 1.036316,2.463,1.036316, + 1.181225,2.463,0.866886, 1.164574,2.482687,0.854666, 1.021708,2.482687,1.021708, + 1.021708,2.482687,1.021708, 1.036316,2.463,1.036316, 1.181225,2.463,0.866886, + 1.29881,2.463,0.675736, 1.280502,2.482687,0.666211, 1.164574,2.482687,0.854666, + 1.164574,2.482687,0.854666, 1.181225,2.463,0.866886, 1.29881,2.463,0.675736, + 1.38627,2.463,0.465671, 1.366728,2.482687,0.459107, 1.280502,2.482687,0.666211, + 1.280502,2.482687,0.666211, 1.29881,2.463,0.675736, 1.38627,2.463,0.465671, + 1.4408,2.463,0.239491, 1.42049,2.482687,0.236115, 1.366728,2.482687,0.459107, + 1.366728,2.482687,0.459107, 1.38627,2.463,0.465671, 1.4408,2.463,0.239491, + 1.4596,2.463,0, 1.439025,2.482687,0, 1.42049,2.482687,0.236115, + 1.42049,2.482687,0.236115, 1.4408,2.463,0.239491, 1.4596,2.463,0, + 0.242892,2.435437,1.461258, 0.239491,2.463,1.4408, 0,2.463,1.4596, + 0,2.463,1.4596, 0,2.435437,1.480325, 0.242892,2.435437,1.461258, + 0.472283,2.435437,1.405953, 0.465671,2.463,1.38627, 0.239491,2.463,1.4408, + 0.239491,2.463,1.4408, 0.242892,2.435437,1.461258, 0.472283,2.435437,1.405953, + 0.685331,2.435437,1.317252, 0.675736,2.463,1.29881, 0.465671,2.463,1.38627, + 0.465671,2.463,1.38627, 0.472283,2.435437,1.405953, 0.685331,2.435437,1.317252, + 0.879195,2.435437,1.197997, 0.866886,2.463,1.181225, 0.675736,2.463,1.29881, + 0.675736,2.463,1.29881, 0.685331,2.435437,1.317252, 0.879195,2.435437,1.197997, + 1.051031,2.435437,1.051031, 1.036316,2.463,1.036316, 0.866886,2.463,1.181225, + 0.866886,2.463,1.181225, 0.879195,2.435437,1.197997, 1.051031,2.435437,1.051031, + 1.197997,2.435437,0.879195, 1.181225,2.463,0.866886, 1.036316,2.463,1.036316, + 1.036316,2.463,1.036316, 1.051031,2.435437,1.051031, 1.197997,2.435437,0.879195, + 1.317252,2.435437,0.685331, 1.29881,2.463,0.675736, 1.181225,2.463,0.866886, + 1.181225,2.463,0.866886, 1.197997,2.435437,0.879195, 1.317252,2.435437,0.685331, + 1.405953,2.435437,0.472283, 1.38627,2.463,0.465671, 1.29881,2.463,0.675736, + 1.29881,2.463,0.675736, 1.317252,2.435437,0.685331, 1.405953,2.435437,0.472283, + 1.461258,2.435437,0.242892, 1.4408,2.463,0.239491, 1.38627,2.463,0.465671, + 1.38627,2.463,0.465671, 1.405953,2.435437,0.472283, 1.461258,2.435437,0.242892, + 1.480325,2.435437,0, 1.4596,2.463,0, 1.4408,2.463,0.239491, + 1.4408,2.463,0.239491, 1.461258,2.435437,0.242892, 1.480325,2.435437,0, + 0.24612,2.4,1.48068, 0.242892,2.435437,1.461258, 0,2.435437,1.480325, + 0,2.435437,1.480325, 0,2.4,1.5, 0.24612,2.4,1.48068, + 0.47856,2.4,1.42464, 0.472283,2.435437,1.405953, 0.242892,2.435437,1.461258, + 0.242892,2.435437,1.461258, 0.24612,2.4,1.48068, 0.47856,2.4,1.42464, + 0.69444,2.4,1.33476, 0.685331,2.435437,1.317252, 0.472283,2.435437,1.405953, + 0.472283,2.435437,1.405953, 0.47856,2.4,1.42464, 0.69444,2.4,1.33476, + 0.89088,2.4,1.21392, 0.879195,2.435437,1.197997, 0.685331,2.435437,1.317252, + 0.685331,2.435437,1.317252, 0.69444,2.4,1.33476, 0.89088,2.4,1.21392, + 1.065,2.4,1.065, 1.051031,2.435437,1.051031, 0.879195,2.435437,1.197997, + 0.879195,2.435437,1.197997, 0.89088,2.4,1.21392, 1.065,2.4,1.065, + 1.21392,2.4,0.89088, 1.197997,2.435437,0.879195, 1.051031,2.435437,1.051031, + 1.051031,2.435437,1.051031, 1.065,2.4,1.065, 1.21392,2.4,0.89088, + 1.33476,2.4,0.69444, 1.317252,2.435437,0.685331, 1.197997,2.435437,0.879195, + 1.197997,2.435437,0.879195, 1.21392,2.4,0.89088, 1.33476,2.4,0.69444, + 1.42464,2.4,0.47856, 1.405953,2.435437,0.472283, 1.317252,2.435437,0.685331, + 1.317252,2.435437,0.685331, 1.33476,2.4,0.69444, 1.42464,2.4,0.47856, + 1.48068,2.4,0.24612, 1.461258,2.435437,0.242892, 1.405953,2.435437,0.472283, + 1.405953,2.435437,0.472283, 1.42464,2.4,0.47856, 1.48068,2.4,0.24612, + 1.5,2.4,0, 1.480325,2.435437,0, 1.461258,2.435437,0.242892, + 1.461258,2.435437,0.242892, 1.48068,2.4,0.24612, 1.5,2.4,0, + 1.554467,2.242575,-0.258385, 1.48068,2.4,-0.24612, 1.5,2.4,0, + 1.5,2.4,0, 1.57475,2.242575,0, 1.554467,2.242575,-0.258385, + 1.495635,2.242575,-0.502408, 1.42464,2.4,-0.47856, 1.48068,2.4,-0.24612, + 1.48068,2.4,-0.24612, 1.554467,2.242575,-0.258385, 1.495635,2.242575,-0.502408, + 1.401276,2.242575,-0.729046, 1.33476,2.4,-0.69444, 1.42464,2.4,-0.47856, + 1.42464,2.4,-0.47856, 1.495635,2.242575,-0.502408, 1.401276,2.242575,-0.729046, + 1.274414,2.242575,-0.935276, 1.21392,2.4,-0.89088, 1.33476,2.4,-0.69444, + 1.33476,2.4,-0.69444, 1.401276,2.242575,-0.729046, 1.274414,2.242575,-0.935276, + 1.118073,2.242575,-1.118073, 1.065,2.4,-1.065, 1.21392,2.4,-0.89088, + 1.21392,2.4,-0.89088, 1.274414,2.242575,-0.935276, 1.118073,2.242575,-1.118073, + 0.935276,2.242575,-1.274414, 0.89088,2.4,-1.21392, 1.065,2.4,-1.065, + 1.065,2.4,-1.065, 1.118073,2.242575,-1.118073, 0.935276,2.242575,-1.274414, + 0.729046,2.242575,-1.401276, 0.69444,2.4,-1.33476, 0.89088,2.4,-1.21392, + 0.89088,2.4,-1.21392, 0.935276,2.242575,-1.274414, 0.729046,2.242575,-1.401276, + 0.502408,2.242575,-1.495635, 0.47856,2.4,-1.42464, 0.69444,2.4,-1.33476, + 0.69444,2.4,-1.33476, 0.729046,2.242575,-1.401276, 0.502408,2.242575,-1.495635, + 0.258385,2.242575,-1.554467, 0.24612,2.4,-1.48068, 0.47856,2.4,-1.42464, + 0.47856,2.4,-1.42464, 0.502408,2.242575,-1.495635, 0.258385,2.242575,-1.554467, + 0,2.242575,-1.57475, 0,2.4,-1.5, 0.24612,2.4,-1.48068, + 0.24612,2.4,-1.48068, 0.258385,2.242575,-1.554467, 0,2.242575,-1.57475, + 1.626774,2.0856,-0.270404, 1.554467,2.242575,-0.258385, 1.57475,2.242575,0, + 1.57475,2.242575,0, 1.648,2.0856,0, 1.626774,2.0856,-0.270404, + 1.565204,2.0856,-0.525778, 1.495635,2.242575,-0.502408, 1.554467,2.242575,-0.258385, + 1.554467,2.242575,-0.258385, 1.626774,2.0856,-0.270404, 1.565204,2.0856,-0.525778, + 1.466456,2.0856,-0.762958, 1.401276,2.242575,-0.729046, 1.495635,2.242575,-0.502408, + 1.495635,2.242575,-0.502408, 1.565204,2.0856,-0.525778, 1.466456,2.0856,-0.762958, + 1.333693,2.0856,-0.97878, 1.274414,2.242575,-0.935276, 1.401276,2.242575,-0.729046, + 1.401276,2.242575,-0.729046, 1.466456,2.0856,-0.762958, 1.333693,2.0856,-0.97878, + 1.17008,2.0856,-1.17008, 1.118073,2.242575,-1.118073, 1.274414,2.242575,-0.935276, + 1.274414,2.242575,-0.935276, 1.333693,2.0856,-0.97878, 1.17008,2.0856,-1.17008, + 0.97878,2.0856,-1.333693, 0.935276,2.242575,-1.274414, 1.118073,2.242575,-1.118073, + 1.118073,2.242575,-1.118073, 1.17008,2.0856,-1.17008, 0.97878,2.0856,-1.333693, + 0.762958,2.0856,-1.466456, 0.729046,2.242575,-1.401276, 0.935276,2.242575,-1.274414, + 0.935276,2.242575,-1.274414, 0.97878,2.0856,-1.333693, 0.762958,2.0856,-1.466456, + 0.525778,2.0856,-1.565204, 0.502408,2.242575,-1.495635, 0.729046,2.242575,-1.401276, + 0.729046,2.242575,-1.401276, 0.762958,2.0856,-1.466456, 0.525778,2.0856,-1.565204, + 0.270404,2.0856,-1.626774, 0.258385,2.242575,-1.554467, 0.502408,2.242575,-1.495635, + 0.502408,2.242575,-1.495635, 0.525778,2.0856,-1.565204, 0.270404,2.0856,-1.626774, + 0,2.0856,-1.648, 0,2.242575,-1.57475, 0.258385,2.242575,-1.554467, + 0.258385,2.242575,-1.554467, 0.270404,2.0856,-1.626774, 0,2.0856,-1.648, + 1.696119,1.929525,-0.28193, 1.626774,2.0856,-0.270404, 1.648,2.0856,0, + 1.648,2.0856,0, 1.71825,1.929525,0, 1.696119,1.929525,-0.28193, + 1.631925,1.929525,-0.54819, 1.565204,2.0856,-0.525778, 1.626774,2.0856,-0.270404, + 1.626774,2.0856,-0.270404, 1.696119,1.929525,-0.28193, 1.631925,1.929525,-0.54819, + 1.528968,1.929525,-0.795481, 1.466456,2.0856,-0.762958, 1.565204,2.0856,-0.525778, + 1.565204,2.0856,-0.525778, 1.631925,1.929525,-0.54819, 1.528968,1.929525,-0.795481, + 1.390545,1.929525,-1.020503, 1.333693,2.0856,-0.97878, 1.466456,2.0856,-0.762958, + 1.466456,2.0856,-0.762958, 1.528968,1.929525,-0.795481, 1.390545,1.929525,-1.020503, + 1.219958,1.929525,-1.219958, 1.17008,2.0856,-1.17008, 1.333693,2.0856,-0.97878, + 1.333693,2.0856,-0.97878, 1.390545,1.929525,-1.020503, 1.219958,1.929525,-1.219958, + 1.020503,1.929525,-1.390545, 0.97878,2.0856,-1.333693, 1.17008,2.0856,-1.17008, + 1.17008,2.0856,-1.17008, 1.219958,1.929525,-1.219958, 1.020503,1.929525,-1.390545, + 0.795481,1.929525,-1.528968, 0.762958,2.0856,-1.466456, 0.97878,2.0856,-1.333693, + 0.97878,2.0856,-1.333693, 1.020503,1.929525,-1.390545, 0.795481,1.929525,-1.528968, + 0.54819,1.929525,-1.631925, 0.525778,2.0856,-1.565204, 0.762958,2.0856,-1.466456, + 0.762958,2.0856,-1.466456, 0.795481,1.929525,-1.528968, 0.54819,1.929525,-1.631925, + 0.28193,1.929525,-1.696119, 0.270404,2.0856,-1.626774, 0.525778,2.0856,-1.565204, + 0.525778,2.0856,-1.565204, 0.54819,1.929525,-1.631925, 0.28193,1.929525,-1.696119, + 0,1.929525,-1.71825, 0,2.0856,-1.648, 0.270404,2.0856,-1.626774, + 0.270404,2.0856,-1.626774, 0.28193,1.929525,-1.696119, 0,1.929525,-1.71825, + 1.761022,1.7748,-0.292719, 1.696119,1.929525,-0.28193, 1.71825,1.929525,0, + 1.71825,1.929525,0, 1.784,1.7748,0, 1.761022,1.7748,-0.292719, + 1.694372,1.7748,-0.569167, 1.631925,1.929525,-0.54819, 1.696119,1.929525,-0.28193, + 1.696119,1.929525,-0.28193, 1.761022,1.7748,-0.292719, 1.694372,1.7748,-0.569167, + 1.587475,1.7748,-0.825921, 1.528968,1.929525,-0.795481, 1.631925,1.929525,-0.54819, + 1.631925,1.929525,-0.54819, 1.694372,1.7748,-0.569167, 1.587475,1.7748,-0.825921, + 1.443756,1.7748,-1.059553, 1.390545,1.929525,-1.020503, 1.528968,1.929525,-0.795481, + 1.528968,1.929525,-0.795481, 1.587475,1.7748,-0.825921, 1.443756,1.7748,-1.059553, + 1.26664,1.7748,-1.26664, 1.219958,1.929525,-1.219958, 1.390545,1.929525,-1.020503, + 1.390545,1.929525,-1.020503, 1.443756,1.7748,-1.059553, 1.26664,1.7748,-1.26664, + 1.059553,1.7748,-1.443756, 1.020503,1.929525,-1.390545, 1.219958,1.929525,-1.219958, + 1.219958,1.929525,-1.219958, 1.26664,1.7748,-1.26664, 1.059553,1.7748,-1.443756, + 0.825921,1.7748,-1.587475, 0.795481,1.929525,-1.528968, 1.020503,1.929525,-1.390545, + 1.020503,1.929525,-1.390545, 1.059553,1.7748,-1.443756, 0.825921,1.7748,-1.587475, + 0.569167,1.7748,-1.694372, 0.54819,1.929525,-1.631925, 0.795481,1.929525,-1.528968, + 0.795481,1.929525,-1.528968, 0.825921,1.7748,-1.587475, 0.569167,1.7748,-1.694372, + 0.292719,1.7748,-1.761022, 0.28193,1.929525,-1.696119, 0.54819,1.929525,-1.631925, + 0.54819,1.929525,-1.631925, 0.569167,1.7748,-1.694372, 0.292719,1.7748,-1.761022, + 0,1.7748,-1.784, 0,1.929525,-1.71825, 0.28193,1.929525,-1.696119, + 0.28193,1.929525,-1.696119, 0.292719,1.7748,-1.761022, 0,1.7748,-1.784, + 1.820003,1.621875,-0.302523, 1.761022,1.7748,-0.292719, 1.784,1.7748,0, + 1.784,1.7748,0, 1.84375,1.621875,0, 1.820003,1.621875,-0.302523, + 1.75112,1.621875,-0.58823, 1.694372,1.7748,-0.569167, 1.761022,1.7748,-0.292719, + 1.761022,1.7748,-0.292719, 1.820003,1.621875,-0.302523, 1.75112,1.621875,-0.58823, + 1.640643,1.621875,-0.853583, 1.587475,1.7748,-0.825921, 1.694372,1.7748,-0.569167, + 1.694372,1.7748,-0.569167, 1.75112,1.621875,-0.58823, 1.640643,1.621875,-0.853583, + 1.49211,1.621875,-1.09504, 1.443756,1.7748,-1.059553, 1.587475,1.7748,-0.825921, + 1.587475,1.7748,-0.825921, 1.640643,1.621875,-0.853583, 1.49211,1.621875,-1.09504, + 1.309063,1.621875,-1.309063, 1.26664,1.7748,-1.26664, 1.443756,1.7748,-1.059553, + 1.443756,1.7748,-1.059553, 1.49211,1.621875,-1.09504, 1.309063,1.621875,-1.309063, + 1.09504,1.621875,-1.49211, 1.059553,1.7748,-1.443756, 1.26664,1.7748,-1.26664, + 1.26664,1.7748,-1.26664, 1.309063,1.621875,-1.309063, 1.09504,1.621875,-1.49211, + 0.853583,1.621875,-1.640643, 0.825921,1.7748,-1.587475, 1.059553,1.7748,-1.443756, + 1.059553,1.7748,-1.443756, 1.09504,1.621875,-1.49211, 0.853583,1.621875,-1.640643, + 0.58823,1.621875,-1.75112, 0.569167,1.7748,-1.694372, 0.825921,1.7748,-1.587475, + 0.825921,1.7748,-1.587475, 0.853583,1.621875,-1.640643, 0.58823,1.621875,-1.75112, + 0.302522,1.621875,-1.820003, 0.292719,1.7748,-1.761022, 0.569167,1.7748,-1.694372, + 0.569167,1.7748,-1.694372, 0.58823,1.621875,-1.75112, 0.302522,1.621875,-1.820003, + 0,1.621875,-1.84375, 0,1.7748,-1.784, 0.292719,1.7748,-1.761022, + 0.292719,1.7748,-1.761022, 0.302522,1.621875,-1.820003, 0,1.621875,-1.84375, + 1.87158,1.4712,-0.311096, 1.820003,1.621875,-0.302523, 1.84375,1.621875,0, + 1.84375,1.621875,0, 1.896,1.4712,0, 1.87158,1.4712,-0.311096, + 1.800745,1.4712,-0.6049, 1.75112,1.621875,-0.58823, 1.820003,1.621875,-0.302523, + 1.820003,1.621875,-0.302523, 1.87158,1.4712,-0.311096, 1.800745,1.4712,-0.6049, + 1.687137,1.4712,-0.877772, 1.640643,1.621875,-0.853583, 1.75112,1.621875,-0.58823, + 1.75112,1.621875,-0.58823, 1.800745,1.4712,-0.6049, 1.687137,1.4712,-0.877772, + 1.534395,1.4712,-1.126072, 1.49211,1.621875,-1.09504, 1.640643,1.621875,-0.853583, + 1.640643,1.621875,-0.853583, 1.687137,1.4712,-0.877772, 1.534395,1.4712,-1.126072, + 1.34616,1.4712,-1.34616, 1.309063,1.621875,-1.309063, 1.49211,1.621875,-1.09504, + 1.49211,1.621875,-1.09504, 1.534395,1.4712,-1.126072, 1.34616,1.4712,-1.34616, + 1.126072,1.4712,-1.534395, 1.09504,1.621875,-1.49211, 1.309063,1.621875,-1.309063, + 1.309063,1.621875,-1.309063, 1.34616,1.4712,-1.34616, 1.126072,1.4712,-1.534395, + 0.877772,1.4712,-1.687137, 0.853583,1.621875,-1.640643, 1.09504,1.621875,-1.49211, + 1.09504,1.621875,-1.49211, 1.126072,1.4712,-1.534395, 0.877772,1.4712,-1.687137, + 0.6049,1.4712,-1.800745, 0.58823,1.621875,-1.75112, 0.853583,1.621875,-1.640643, + 0.853583,1.621875,-1.640643, 0.877772,1.4712,-1.687137, 0.6049,1.4712,-1.800745, + 0.311096,1.4712,-1.87158, 0.302522,1.621875,-1.820003, 0.58823,1.621875,-1.75112, + 0.58823,1.621875,-1.75112, 0.6049,1.4712,-1.800745, 0.311096,1.4712,-1.87158, + 0,1.4712,-1.896, 0,1.621875,-1.84375, 0.302522,1.621875,-1.820003, + 0.302522,1.621875,-1.820003, 0.311096,1.4712,-1.87158, 0,1.4712,-1.896, + 1.914272,1.323225,-0.318192, 1.87158,1.4712,-0.311096, 1.896,1.4712,0, + 1.896,1.4712,0, 1.93925,1.323225,0, 1.914272,1.323225,-0.318192, + 1.841822,1.323225,-0.618698, 1.800745,1.4712,-0.6049, 1.87158,1.4712,-0.311096, + 1.87158,1.4712,-0.311096, 1.914272,1.323225,-0.318192, 1.841822,1.323225,-0.618698, + 1.725622,1.323225,-0.897795, 1.687137,1.4712,-0.877772, 1.800745,1.4712,-0.6049, + 1.800745,1.4712,-0.6049, 1.841822,1.323225,-0.618698, 1.725622,1.323225,-0.897795, + 1.569396,1.323225,-1.151759, 1.534395,1.4712,-1.126072, 1.687137,1.4712,-0.877772, + 1.687137,1.4712,-0.877772, 1.725622,1.323225,-0.897795, 1.569396,1.323225,-1.151759, + 1.376867,1.323225,-1.376868, 1.34616,1.4712,-1.34616, 1.534395,1.4712,-1.126072, + 1.534395,1.4712,-1.126072, 1.569396,1.323225,-1.151759, 1.376867,1.323225,-1.376868, + 1.151759,1.323225,-1.569396, 1.126072,1.4712,-1.534395, 1.34616,1.4712,-1.34616, + 1.34616,1.4712,-1.34616, 1.376867,1.323225,-1.376868, 1.151759,1.323225,-1.569396, + 0.897795,1.323225,-1.725622, 0.877772,1.4712,-1.687137, 1.126072,1.4712,-1.534395, + 1.126072,1.4712,-1.534395, 1.151759,1.323225,-1.569396, 0.897795,1.323225,-1.725622, + 0.618698,1.323225,-1.841822, 0.6049,1.4712,-1.800745, 0.877772,1.4712,-1.687137, + 0.877772,1.4712,-1.687137, 0.897795,1.323225,-1.725622, 0.618698,1.323225,-1.841822, + 0.318192,1.323225,-1.914272, 0.311096,1.4712,-1.87158, 0.6049,1.4712,-1.800745, + 0.6049,1.4712,-1.800745, 0.618698,1.323225,-1.841822, 0.318192,1.323225,-1.914272, + 0,1.323225,-1.93925, 0,1.4712,-1.896, 0.311096,1.4712,-1.87158, + 0.311096,1.4712,-1.87158, 0.318192,1.323225,-1.914272, 0,1.323225,-1.93925, + 1.946601,1.1784,-0.323566, 1.914272,1.323225,-0.318192, 1.93925,1.323225,0, + 1.93925,1.323225,0, 1.972,1.1784,0, 1.946601,1.1784,-0.323566, + 1.872927,1.1784,-0.629147, 1.841822,1.323225,-0.618698, 1.914272,1.323225,-0.318192, + 1.914272,1.323225,-0.318192, 1.946601,1.1784,-0.323566, 1.872927,1.1784,-0.629147, + 1.754764,1.1784,-0.912957, 1.725622,1.323225,-0.897795, 1.841822,1.323225,-0.618698, + 1.841822,1.323225,-0.618698, 1.872927,1.1784,-0.629147, 1.754764,1.1784,-0.912957, + 1.5959,1.1784,-1.17121, 1.569396,1.323225,-1.151759, 1.725622,1.323225,-0.897795, + 1.725622,1.323225,-0.897795, 1.754764,1.1784,-0.912957, 1.5959,1.1784,-1.17121, + 1.40012,1.1784,-1.40012, 1.376867,1.323225,-1.376868, 1.569396,1.323225,-1.151759, + 1.569396,1.323225,-1.151759, 1.5959,1.1784,-1.17121, 1.40012,1.1784,-1.40012, + 1.17121,1.1784,-1.5959, 1.151759,1.323225,-1.569396, 1.376867,1.323225,-1.376868, + 1.376867,1.323225,-1.376868, 1.40012,1.1784,-1.40012, 1.17121,1.1784,-1.5959, + 0.912957,1.1784,-1.754764, 0.897795,1.323225,-1.725622, 1.151759,1.323225,-1.569396, + 1.151759,1.323225,-1.569396, 1.17121,1.1784,-1.5959, 0.912957,1.1784,-1.754764, + 0.629147,1.1784,-1.872927, 0.618698,1.323225,-1.841822, 0.897795,1.323225,-1.725622, + 0.897795,1.323225,-1.725622, 0.912957,1.1784,-1.754764, 0.629147,1.1784,-1.872927, + 0.323566,1.1784,-1.946601, 0.318192,1.323225,-1.914272, 0.618698,1.323225,-1.841822, + 0.618698,1.323225,-1.841822, 0.629147,1.1784,-1.872927, 0.323566,1.1784,-1.946601, + 0,1.1784,-1.972, 0,1.323225,-1.93925, 0.318192,1.323225,-1.914272, + 0.318192,1.323225,-1.914272, 0.323566,1.1784,-1.946601, 0,1.1784,-1.972, + 1.967083,1.037175,-0.32697, 1.946601,1.1784,-0.323566, 1.972,1.1784,0, + 1.972,1.1784,0, 1.99275,1.037175,0, 1.967083,1.037175,-0.32697, + 1.892634,1.037175,-0.635767, 1.872927,1.1784,-0.629147, 1.946601,1.1784,-0.323566, + 1.946601,1.1784,-0.323566, 1.967083,1.037175,-0.32697, 1.892634,1.037175,-0.635767, + 1.773229,1.037175,-0.922564, 1.754764,1.1784,-0.912957, 1.872927,1.1784,-0.629147, + 1.872927,1.1784,-0.629147, 1.892634,1.037175,-0.635767, 1.773229,1.037175,-0.922564, + 1.612693,1.037175,-1.183534, 1.5959,1.1784,-1.17121, 1.754764,1.1784,-0.912957, + 1.754764,1.1784,-0.912957, 1.773229,1.037175,-0.922564, 1.612693,1.037175,-1.183534, + 1.414853,1.037175,-1.414853, 1.40012,1.1784,-1.40012, 1.5959,1.1784,-1.17121, + 1.5959,1.1784,-1.17121, 1.612693,1.037175,-1.183534, 1.414853,1.037175,-1.414853, + 1.183534,1.037175,-1.612693, 1.17121,1.1784,-1.5959, 1.40012,1.1784,-1.40012, + 1.40012,1.1784,-1.40012, 1.414853,1.037175,-1.414853, 1.183534,1.037175,-1.612693, + 0.922564,1.037175,-1.773229, 0.912957,1.1784,-1.754764, 1.17121,1.1784,-1.5959, + 1.17121,1.1784,-1.5959, 1.183534,1.037175,-1.612693, 0.922564,1.037175,-1.773229, + 0.635767,1.037175,-1.892634, 0.629147,1.1784,-1.872927, 0.912957,1.1784,-1.754764, + 0.912957,1.1784,-1.754764, 0.922564,1.037175,-1.773229, 0.635767,1.037175,-1.892634, + 0.32697,1.037175,-1.967083, 0.323566,1.1784,-1.946601, 0.629147,1.1784,-1.872927, + 0.629147,1.1784,-1.872927, 0.635767,1.037175,-1.892634, 0.32697,1.037175,-1.967083, + 0,1.037175,-1.99275, 0,1.1784,-1.972, 0.323566,1.1784,-1.946601, + 0.323566,1.1784,-1.946601, 0.32697,1.037175,-1.967083, 0,1.037175,-1.99275, + 1.97424,0.9,-0.32816, 1.967083,1.037175,-0.32697, 1.99275,1.037175,0, + 1.99275,1.037175,0, 2,0.9,0, 1.97424,0.9,-0.32816, + 1.89952,0.9,-0.63808, 1.892634,1.037175,-0.635767, 1.967083,1.037175,-0.32697, + 1.967083,1.037175,-0.32697, 1.97424,0.9,-0.32816, 1.89952,0.9,-0.63808, + 1.77968,0.9,-0.92592, 1.773229,1.037175,-0.922564, 1.892634,1.037175,-0.635767, + 1.892634,1.037175,-0.635767, 1.89952,0.9,-0.63808, 1.77968,0.9,-0.92592, + 1.61856,0.9,-1.18784, 1.612693,1.037175,-1.183534, 1.773229,1.037175,-0.922564, + 1.773229,1.037175,-0.922564, 1.77968,0.9,-0.92592, 1.61856,0.9,-1.18784, + 1.42,0.9,-1.42, 1.414853,1.037175,-1.414853, 1.612693,1.037175,-1.183534, + 1.612693,1.037175,-1.183534, 1.61856,0.9,-1.18784, 1.42,0.9,-1.42, + 1.18784,0.9,-1.61856, 1.183534,1.037175,-1.612693, 1.414853,1.037175,-1.414853, + 1.414853,1.037175,-1.414853, 1.42,0.9,-1.42, 1.18784,0.9,-1.61856, + 0.92592,0.9,-1.77968, 0.922564,1.037175,-1.773229, 1.183534,1.037175,-1.612693, + 1.183534,1.037175,-1.612693, 1.18784,0.9,-1.61856, 0.92592,0.9,-1.77968, + 0.63808,0.9,-1.89952, 0.635767,1.037175,-1.892634, 0.922564,1.037175,-1.773229, + 0.922564,1.037175,-1.773229, 0.92592,0.9,-1.77968, 0.63808,0.9,-1.89952, + 0.32816,0.9,-1.97424, 0.32697,1.037175,-1.967083, 0.635767,1.037175,-1.892634, + 0.635767,1.037175,-1.892634, 0.63808,0.9,-1.89952, 0.32816,0.9,-1.97424, + 0,0.9,-2, 0,1.037175,-1.99275, 0.32697,1.037175,-1.967083, + 0.32697,1.037175,-1.967083, 0.32816,0.9,-1.97424, 0,0.9,-2, + -0.258385,2.242575,-1.554467, -0.24612,2.4,-1.48068, 0,2.4,-1.5, + 0,2.4,-1.5, 0,2.242575,-1.57475, -0.258385,2.242575,-1.554467, + -0.502408,2.242575,-1.495635, -0.47856,2.4,-1.42464, -0.24612,2.4,-1.48068, + -0.24612,2.4,-1.48068, -0.258385,2.242575,-1.554467, -0.502408,2.242575,-1.495635, + -0.729046,2.242575,-1.401276, -0.69444,2.4,-1.33476, -0.47856,2.4,-1.42464, + -0.47856,2.4,-1.42464, -0.502408,2.242575,-1.495635, -0.729046,2.242575,-1.401276, + -0.935276,2.242575,-1.274414, -0.89088,2.4,-1.21392, -0.69444,2.4,-1.33476, + -0.69444,2.4,-1.33476, -0.729046,2.242575,-1.401276, -0.935276,2.242575,-1.274414, + -1.118073,2.242575,-1.118073, -1.065,2.4,-1.065, -0.89088,2.4,-1.21392, + -0.89088,2.4,-1.21392, -0.935276,2.242575,-1.274414, -1.118073,2.242575,-1.118073, + -1.274414,2.242575,-0.935276, -1.21392,2.4,-0.89088, -1.065,2.4,-1.065, + -1.065,2.4,-1.065, -1.118073,2.242575,-1.118073, -1.274414,2.242575,-0.935276, + -1.401276,2.242575,-0.729046, -1.33476,2.4,-0.69444, -1.21392,2.4,-0.89088, + -1.21392,2.4,-0.89088, -1.274414,2.242575,-0.935276, -1.401276,2.242575,-0.729046, + -1.495635,2.242575,-0.502408, -1.42464,2.4,-0.47856, -1.33476,2.4,-0.69444, + -1.33476,2.4,-0.69444, -1.401276,2.242575,-0.729046, -1.495635,2.242575,-0.502408, + -1.554467,2.242575,-0.258385, -1.48068,2.4,-0.24612, -1.42464,2.4,-0.47856, + -1.42464,2.4,-0.47856, -1.495635,2.242575,-0.502408, -1.554467,2.242575,-0.258385, + -1.57475,2.242575,0, -1.5,2.4,0, -1.48068,2.4,-0.24612, + -1.48068,2.4,-0.24612, -1.554467,2.242575,-0.258385, -1.57475,2.242575,0, + -0.270404,2.0856,-1.626774, -0.258385,2.242575,-1.554467, 0,2.242575,-1.57475, + 0,2.242575,-1.57475, 0,2.0856,-1.648, -0.270404,2.0856,-1.626774, + -0.525778,2.0856,-1.565204, -0.502408,2.242575,-1.495635, -0.258385,2.242575,-1.554467, + -0.258385,2.242575,-1.554467, -0.270404,2.0856,-1.626774, -0.525778,2.0856,-1.565204, + -0.762958,2.0856,-1.466456, -0.729046,2.242575,-1.401276, -0.502408,2.242575,-1.495635, + -0.502408,2.242575,-1.495635, -0.525778,2.0856,-1.565204, -0.762958,2.0856,-1.466456, + -0.97878,2.0856,-1.333693, -0.935276,2.242575,-1.274414, -0.729046,2.242575,-1.401276, + -0.729046,2.242575,-1.401276, -0.762958,2.0856,-1.466456, -0.97878,2.0856,-1.333693, + -1.17008,2.0856,-1.17008, -1.118073,2.242575,-1.118073, -0.935276,2.242575,-1.274414, + -0.935276,2.242575,-1.274414, -0.97878,2.0856,-1.333693, -1.17008,2.0856,-1.17008, + -1.333693,2.0856,-0.97878, -1.274414,2.242575,-0.935276, -1.118073,2.242575,-1.118073, + -1.118073,2.242575,-1.118073, -1.17008,2.0856,-1.17008, -1.333693,2.0856,-0.97878, + -1.466456,2.0856,-0.762958, -1.401276,2.242575,-0.729046, -1.274414,2.242575,-0.935276, + -1.274414,2.242575,-0.935276, -1.333693,2.0856,-0.97878, -1.466456,2.0856,-0.762958, + -1.565204,2.0856,-0.525778, -1.495635,2.242575,-0.502408, -1.401276,2.242575,-0.729046, + -1.401276,2.242575,-0.729046, -1.466456,2.0856,-0.762958, -1.565204,2.0856,-0.525778, + -1.626774,2.0856,-0.270404, -1.554467,2.242575,-0.258385, -1.495635,2.242575,-0.502408, + -1.495635,2.242575,-0.502408, -1.565204,2.0856,-0.525778, -1.626774,2.0856,-0.270404, + -1.648,2.0856,0, -1.57475,2.242575,0, -1.554467,2.242575,-0.258385, + -1.554467,2.242575,-0.258385, -1.626774,2.0856,-0.270404, -1.648,2.0856,0, + -0.28193,1.929525,-1.696119, -0.270404,2.0856,-1.626774, 0,2.0856,-1.648, + 0,2.0856,-1.648, 0,1.929525,-1.71825, -0.28193,1.929525,-1.696119, + -0.54819,1.929525,-1.631925, -0.525778,2.0856,-1.565204, -0.270404,2.0856,-1.626774, + -0.270404,2.0856,-1.626774, -0.28193,1.929525,-1.696119, -0.54819,1.929525,-1.631925, + -0.795481,1.929525,-1.528968, -0.762958,2.0856,-1.466456, -0.525778,2.0856,-1.565204, + -0.525778,2.0856,-1.565204, -0.54819,1.929525,-1.631925, -0.795481,1.929525,-1.528968, + -1.020503,1.929525,-1.390545, -0.97878,2.0856,-1.333693, -0.762958,2.0856,-1.466456, + -0.762958,2.0856,-1.466456, -0.795481,1.929525,-1.528968, -1.020503,1.929525,-1.390545, + -1.219958,1.929525,-1.219958, -1.17008,2.0856,-1.17008, -0.97878,2.0856,-1.333693, + -0.97878,2.0856,-1.333693, -1.020503,1.929525,-1.390545, -1.219958,1.929525,-1.219958, + -1.390545,1.929525,-1.020503, -1.333693,2.0856,-0.97878, -1.17008,2.0856,-1.17008, + -1.17008,2.0856,-1.17008, -1.219958,1.929525,-1.219958, -1.390545,1.929525,-1.020503, + -1.528968,1.929525,-0.795481, -1.466456,2.0856,-0.762958, -1.333693,2.0856,-0.97878, + -1.333693,2.0856,-0.97878, -1.390545,1.929525,-1.020503, -1.528968,1.929525,-0.795481, + -1.631925,1.929525,-0.54819, -1.565204,2.0856,-0.525778, -1.466456,2.0856,-0.762958, + -1.466456,2.0856,-0.762958, -1.528968,1.929525,-0.795481, -1.631925,1.929525,-0.54819, + -1.696119,1.929525,-0.28193, -1.626774,2.0856,-0.270404, -1.565204,2.0856,-0.525778, + -1.565204,2.0856,-0.525778, -1.631925,1.929525,-0.54819, -1.696119,1.929525,-0.28193, + -1.71825,1.929525,0, -1.648,2.0856,0, -1.626774,2.0856,-0.270404, + -1.626774,2.0856,-0.270404, -1.696119,1.929525,-0.28193, -1.71825,1.929525,0, + -0.292719,1.7748,-1.761022, -0.28193,1.929525,-1.696119, 0,1.929525,-1.71825, + 0,1.929525,-1.71825, 0,1.7748,-1.784, -0.292719,1.7748,-1.761022, + -0.569167,1.7748,-1.694372, -0.54819,1.929525,-1.631925, -0.28193,1.929525,-1.696119, + -0.28193,1.929525,-1.696119, -0.292719,1.7748,-1.761022, -0.569167,1.7748,-1.694372, + -0.825921,1.7748,-1.587475, -0.795481,1.929525,-1.528968, -0.54819,1.929525,-1.631925, + -0.54819,1.929525,-1.631925, -0.569167,1.7748,-1.694372, -0.825921,1.7748,-1.587475, + -1.059553,1.7748,-1.443756, -1.020503,1.929525,-1.390545, -0.795481,1.929525,-1.528968, + -0.795481,1.929525,-1.528968, -0.825921,1.7748,-1.587475, -1.059553,1.7748,-1.443756, + -1.26664,1.7748,-1.26664, -1.219958,1.929525,-1.219958, -1.020503,1.929525,-1.390545, + -1.020503,1.929525,-1.390545, -1.059553,1.7748,-1.443756, -1.26664,1.7748,-1.26664, + -1.443756,1.7748,-1.059553, -1.390545,1.929525,-1.020503, -1.219958,1.929525,-1.219958, + -1.219958,1.929525,-1.219958, -1.26664,1.7748,-1.26664, -1.443756,1.7748,-1.059553, + -1.587475,1.7748,-0.825921, -1.528968,1.929525,-0.795481, -1.390545,1.929525,-1.020503, + -1.390545,1.929525,-1.020503, -1.443756,1.7748,-1.059553, -1.587475,1.7748,-0.825921, + -1.694372,1.7748,-0.569167, -1.631925,1.929525,-0.54819, -1.528968,1.929525,-0.795481, + -1.528968,1.929525,-0.795481, -1.587475,1.7748,-0.825921, -1.694372,1.7748,-0.569167, + -1.761022,1.7748,-0.292719, -1.696119,1.929525,-0.28193, -1.631925,1.929525,-0.54819, + -1.631925,1.929525,-0.54819, -1.694372,1.7748,-0.569167, -1.761022,1.7748,-0.292719, + -1.784,1.7748,0, -1.71825,1.929525,0, -1.696119,1.929525,-0.28193, + -1.696119,1.929525,-0.28193, -1.761022,1.7748,-0.292719, -1.784,1.7748,0, + -0.302523,1.621875,-1.820003, -0.292719,1.7748,-1.761022, 0,1.7748,-1.784, + 0,1.7748,-1.784, 0,1.621875,-1.84375, -0.302523,1.621875,-1.820003, + -0.58823,1.621875,-1.75112, -0.569167,1.7748,-1.694372, -0.292719,1.7748,-1.761022, + -0.292719,1.7748,-1.761022, -0.302523,1.621875,-1.820003, -0.58823,1.621875,-1.75112, + -0.853583,1.621875,-1.640643, -0.825921,1.7748,-1.587475, -0.569167,1.7748,-1.694372, + -0.569167,1.7748,-1.694372, -0.58823,1.621875,-1.75112, -0.853583,1.621875,-1.640643, + -1.09504,1.621875,-1.49211, -1.059553,1.7748,-1.443756, -0.825921,1.7748,-1.587475, + -0.825921,1.7748,-1.587475, -0.853583,1.621875,-1.640643, -1.09504,1.621875,-1.49211, + -1.309063,1.621875,-1.309063, -1.26664,1.7748,-1.26664, -1.059553,1.7748,-1.443756, + -1.059553,1.7748,-1.443756, -1.09504,1.621875,-1.49211, -1.309063,1.621875,-1.309063, + -1.49211,1.621875,-1.09504, -1.443756,1.7748,-1.059553, -1.26664,1.7748,-1.26664, + -1.26664,1.7748,-1.26664, -1.309063,1.621875,-1.309063, -1.49211,1.621875,-1.09504, + -1.640643,1.621875,-0.853583, -1.587475,1.7748,-0.825921, -1.443756,1.7748,-1.059553, + -1.443756,1.7748,-1.059553, -1.49211,1.621875,-1.09504, -1.640643,1.621875,-0.853583, + -1.75112,1.621875,-0.58823, -1.694372,1.7748,-0.569167, -1.587475,1.7748,-0.825921, + -1.587475,1.7748,-0.825921, -1.640643,1.621875,-0.853583, -1.75112,1.621875,-0.58823, + -1.820003,1.621875,-0.302522, -1.761022,1.7748,-0.292719, -1.694372,1.7748,-0.569167, + -1.694372,1.7748,-0.569167, -1.75112,1.621875,-0.58823, -1.820003,1.621875,-0.302522, + -1.84375,1.621875,0, -1.784,1.7748,0, -1.761022,1.7748,-0.292719, + -1.761022,1.7748,-0.292719, -1.820003,1.621875,-0.302522, -1.84375,1.621875,0, + -0.311096,1.4712,-1.87158, -0.302523,1.621875,-1.820003, 0,1.621875,-1.84375, + 0,1.621875,-1.84375, 0,1.4712,-1.896, -0.311096,1.4712,-1.87158, + -0.6049,1.4712,-1.800745, -0.58823,1.621875,-1.75112, -0.302523,1.621875,-1.820003, + -0.302523,1.621875,-1.820003, -0.311096,1.4712,-1.87158, -0.6049,1.4712,-1.800745, + -0.877772,1.4712,-1.687137, -0.853583,1.621875,-1.640643, -0.58823,1.621875,-1.75112, + -0.58823,1.621875,-1.75112, -0.6049,1.4712,-1.800745, -0.877772,1.4712,-1.687137, + -1.126072,1.4712,-1.534395, -1.09504,1.621875,-1.49211, -0.853583,1.621875,-1.640643, + -0.853583,1.621875,-1.640643, -0.877772,1.4712,-1.687137, -1.126072,1.4712,-1.534395, + -1.34616,1.4712,-1.34616, -1.309063,1.621875,-1.309063, -1.09504,1.621875,-1.49211, + -1.09504,1.621875,-1.49211, -1.126072,1.4712,-1.534395, -1.34616,1.4712,-1.34616, + -1.534395,1.4712,-1.126072, -1.49211,1.621875,-1.09504, -1.309063,1.621875,-1.309063, + -1.309063,1.621875,-1.309063, -1.34616,1.4712,-1.34616, -1.534395,1.4712,-1.126072, + -1.687137,1.4712,-0.877772, -1.640643,1.621875,-0.853583, -1.49211,1.621875,-1.09504, + -1.49211,1.621875,-1.09504, -1.534395,1.4712,-1.126072, -1.687137,1.4712,-0.877772, + -1.800745,1.4712,-0.6049, -1.75112,1.621875,-0.58823, -1.640643,1.621875,-0.853583, + -1.640643,1.621875,-0.853583, -1.687137,1.4712,-0.877772, -1.800745,1.4712,-0.6049, + -1.87158,1.4712,-0.311096, -1.820003,1.621875,-0.302522, -1.75112,1.621875,-0.58823, + -1.75112,1.621875,-0.58823, -1.800745,1.4712,-0.6049, -1.87158,1.4712,-0.311096, + -1.896,1.4712,0, -1.84375,1.621875,0, -1.820003,1.621875,-0.302522, + -1.820003,1.621875,-0.302522, -1.87158,1.4712,-0.311096, -1.896,1.4712,0, + -0.318192,1.323225,-1.914272, -0.311096,1.4712,-1.87158, 0,1.4712,-1.896, + 0,1.4712,-1.896, 0,1.323225,-1.93925, -0.318192,1.323225,-1.914272, + -0.618698,1.323225,-1.841822, -0.6049,1.4712,-1.800745, -0.311096,1.4712,-1.87158, + -0.311096,1.4712,-1.87158, -0.318192,1.323225,-1.914272, -0.618698,1.323225,-1.841822, + -0.897795,1.323225,-1.725622, -0.877772,1.4712,-1.687137, -0.6049,1.4712,-1.800745, + -0.6049,1.4712,-1.800745, -0.618698,1.323225,-1.841822, -0.897795,1.323225,-1.725622, + -1.151759,1.323225,-1.569396, -1.126072,1.4712,-1.534395, -0.877772,1.4712,-1.687137, + -0.877772,1.4712,-1.687137, -0.897795,1.323225,-1.725622, -1.151759,1.323225,-1.569396, + -1.376868,1.323225,-1.376867, -1.34616,1.4712,-1.34616, -1.126072,1.4712,-1.534395, + -1.126072,1.4712,-1.534395, -1.151759,1.323225,-1.569396, -1.376868,1.323225,-1.376867, + -1.569396,1.323225,-1.151759, -1.534395,1.4712,-1.126072, -1.34616,1.4712,-1.34616, + -1.34616,1.4712,-1.34616, -1.376868,1.323225,-1.376867, -1.569396,1.323225,-1.151759, + -1.725622,1.323225,-0.897795, -1.687137,1.4712,-0.877772, -1.534395,1.4712,-1.126072, + -1.534395,1.4712,-1.126072, -1.569396,1.323225,-1.151759, -1.725622,1.323225,-0.897795, + -1.841822,1.323225,-0.618698, -1.800745,1.4712,-0.6049, -1.687137,1.4712,-0.877772, + -1.687137,1.4712,-0.877772, -1.725622,1.323225,-0.897795, -1.841822,1.323225,-0.618698, + -1.914272,1.323225,-0.318192, -1.87158,1.4712,-0.311096, -1.800745,1.4712,-0.6049, + -1.800745,1.4712,-0.6049, -1.841822,1.323225,-0.618698, -1.914272,1.323225,-0.318192, + -1.93925,1.323225,0, -1.896,1.4712,0, -1.87158,1.4712,-0.311096, + -1.87158,1.4712,-0.311096, -1.914272,1.323225,-0.318192, -1.93925,1.323225,0, + -0.323566,1.1784,-1.946601, -0.318192,1.323225,-1.914272, 0,1.323225,-1.93925, + 0,1.323225,-1.93925, 0,1.1784,-1.972, -0.323566,1.1784,-1.946601, + -0.629147,1.1784,-1.872927, -0.618698,1.323225,-1.841822, -0.318192,1.323225,-1.914272, + -0.318192,1.323225,-1.914272, -0.323566,1.1784,-1.946601, -0.629147,1.1784,-1.872927, + -0.912957,1.1784,-1.754764, -0.897795,1.323225,-1.725622, -0.618698,1.323225,-1.841822, + -0.618698,1.323225,-1.841822, -0.629147,1.1784,-1.872927, -0.912957,1.1784,-1.754764, + -1.17121,1.1784,-1.5959, -1.151759,1.323225,-1.569396, -0.897795,1.323225,-1.725622, + -0.897795,1.323225,-1.725622, -0.912957,1.1784,-1.754764, -1.17121,1.1784,-1.5959, + -1.40012,1.1784,-1.40012, -1.376868,1.323225,-1.376867, -1.151759,1.323225,-1.569396, + -1.151759,1.323225,-1.569396, -1.17121,1.1784,-1.5959, -1.40012,1.1784,-1.40012, + -1.5959,1.1784,-1.17121, -1.569396,1.323225,-1.151759, -1.376868,1.323225,-1.376867, + -1.376868,1.323225,-1.376867, -1.40012,1.1784,-1.40012, -1.5959,1.1784,-1.17121, + -1.754764,1.1784,-0.912957, -1.725622,1.323225,-0.897795, -1.569396,1.323225,-1.151759, + -1.569396,1.323225,-1.151759, -1.5959,1.1784,-1.17121, -1.754764,1.1784,-0.912957, + -1.872927,1.1784,-0.629147, -1.841822,1.323225,-0.618698, -1.725622,1.323225,-0.897795, + -1.725622,1.323225,-0.897795, -1.754764,1.1784,-0.912957, -1.872927,1.1784,-0.629147, + -1.946601,1.1784,-0.323566, -1.914272,1.323225,-0.318192, -1.841822,1.323225,-0.618698, + -1.841822,1.323225,-0.618698, -1.872927,1.1784,-0.629147, -1.946601,1.1784,-0.323566, + -1.972,1.1784,0, -1.93925,1.323225,0, -1.914272,1.323225,-0.318192, + -1.914272,1.323225,-0.318192, -1.946601,1.1784,-0.323566, -1.972,1.1784,0, + -0.32697,1.037175,-1.967083, -0.323566,1.1784,-1.946601, 0,1.1784,-1.972, + 0,1.1784,-1.972, 0,1.037175,-1.99275, -0.32697,1.037175,-1.967083, + -0.635767,1.037175,-1.892634, -0.629147,1.1784,-1.872927, -0.323566,1.1784,-1.946601, + -0.323566,1.1784,-1.946601, -0.32697,1.037175,-1.967083, -0.635767,1.037175,-1.892634, + -0.922564,1.037175,-1.773229, -0.912957,1.1784,-1.754764, -0.629147,1.1784,-1.872927, + -0.629147,1.1784,-1.872927, -0.635767,1.037175,-1.892634, -0.922564,1.037175,-1.773229, + -1.183534,1.037175,-1.612693, -1.17121,1.1784,-1.5959, -0.912957,1.1784,-1.754764, + -0.912957,1.1784,-1.754764, -0.922564,1.037175,-1.773229, -1.183534,1.037175,-1.612693, + -1.414853,1.037175,-1.414853, -1.40012,1.1784,-1.40012, -1.17121,1.1784,-1.5959, + -1.17121,1.1784,-1.5959, -1.183534,1.037175,-1.612693, -1.414853,1.037175,-1.414853, + -1.612693,1.037175,-1.183534, -1.5959,1.1784,-1.17121, -1.40012,1.1784,-1.40012, + -1.40012,1.1784,-1.40012, -1.414853,1.037175,-1.414853, -1.612693,1.037175,-1.183534, + -1.773229,1.037175,-0.922564, -1.754764,1.1784,-0.912957, -1.5959,1.1784,-1.17121, + -1.5959,1.1784,-1.17121, -1.612693,1.037175,-1.183534, -1.773229,1.037175,-0.922564, + -1.892634,1.037175,-0.635767, -1.872927,1.1784,-0.629147, -1.754764,1.1784,-0.912957, + -1.754764,1.1784,-0.912957, -1.773229,1.037175,-0.922564, -1.892634,1.037175,-0.635767, + -1.967083,1.037175,-0.32697, -1.946601,1.1784,-0.323566, -1.872927,1.1784,-0.629147, + -1.872927,1.1784,-0.629147, -1.892634,1.037175,-0.635767, -1.967083,1.037175,-0.32697, + -1.99275,1.037175,0, -1.972,1.1784,0, -1.946601,1.1784,-0.323566, + -1.946601,1.1784,-0.323566, -1.967083,1.037175,-0.32697, -1.99275,1.037175,0, + -0.32816,0.9,-1.97424, -0.32697,1.037175,-1.967083, 0,1.037175,-1.99275, + 0,1.037175,-1.99275, 0,0.9,-2, -0.32816,0.9,-1.97424, + -0.63808,0.9,-1.89952, -0.635767,1.037175,-1.892634, -0.32697,1.037175,-1.967083, + -0.32697,1.037175,-1.967083, -0.32816,0.9,-1.97424, -0.63808,0.9,-1.89952, + -0.92592,0.9,-1.77968, -0.922564,1.037175,-1.773229, -0.635767,1.037175,-1.892634, + -0.635767,1.037175,-1.892634, -0.63808,0.9,-1.89952, -0.92592,0.9,-1.77968, + -1.18784,0.9,-1.61856, -1.183534,1.037175,-1.612693, -0.922564,1.037175,-1.773229, + -0.922564,1.037175,-1.773229, -0.92592,0.9,-1.77968, -1.18784,0.9,-1.61856, + -1.42,0.9,-1.42, -1.414853,1.037175,-1.414853, -1.183534,1.037175,-1.612693, + -1.183534,1.037175,-1.612693, -1.18784,0.9,-1.61856, -1.42,0.9,-1.42, + -1.61856,0.9,-1.18784, -1.612693,1.037175,-1.183534, -1.414853,1.037175,-1.414853, + -1.414853,1.037175,-1.414853, -1.42,0.9,-1.42, -1.61856,0.9,-1.18784, + -1.77968,0.9,-0.92592, -1.773229,1.037175,-0.922564, -1.612693,1.037175,-1.183534, + -1.612693,1.037175,-1.183534, -1.61856,0.9,-1.18784, -1.77968,0.9,-0.92592, + -1.89952,0.9,-0.63808, -1.892634,1.037175,-0.635767, -1.773229,1.037175,-0.922564, + -1.773229,1.037175,-0.922564, -1.77968,0.9,-0.92592, -1.89952,0.9,-0.63808, + -1.97424,0.9,-0.32816, -1.967083,1.037175,-0.32697, -1.892634,1.037175,-0.635767, + -1.892634,1.037175,-0.635767, -1.89952,0.9,-0.63808, -1.97424,0.9,-0.32816, + -2,0.9,0, -1.99275,1.037175,0, -1.967083,1.037175,-0.32697, + -1.967083,1.037175,-0.32697, -1.97424,0.9,-0.32816, -2,0.9,0, + -1.554467,2.242575,0.258385, -1.48068,2.4,0.24612, -1.5,2.4,0, + -1.5,2.4,0, -1.57475,2.242575,0, -1.554467,2.242575,0.258385, + -1.495635,2.242575,0.502408, -1.42464,2.4,0.47856, -1.48068,2.4,0.24612, + -1.48068,2.4,0.24612, -1.554467,2.242575,0.258385, -1.495635,2.242575,0.502408, + -1.401276,2.242575,0.729046, -1.33476,2.4,0.69444, -1.42464,2.4,0.47856, + -1.42464,2.4,0.47856, -1.495635,2.242575,0.502408, -1.401276,2.242575,0.729046, + -1.274414,2.242575,0.935276, -1.21392,2.4,0.89088, -1.33476,2.4,0.69444, + -1.33476,2.4,0.69444, -1.401276,2.242575,0.729046, -1.274414,2.242575,0.935276, + -1.118073,2.242575,1.118073, -1.065,2.4,1.065, -1.21392,2.4,0.89088, + -1.21392,2.4,0.89088, -1.274414,2.242575,0.935276, -1.118073,2.242575,1.118073, + -0.935276,2.242575,1.274414, -0.89088,2.4,1.21392, -1.065,2.4,1.065, + -1.065,2.4,1.065, -1.118073,2.242575,1.118073, -0.935276,2.242575,1.274414, + -0.729046,2.242575,1.401276, -0.69444,2.4,1.33476, -0.89088,2.4,1.21392, + -0.89088,2.4,1.21392, -0.935276,2.242575,1.274414, -0.729046,2.242575,1.401276, + -0.502408,2.242575,1.495635, -0.47856,2.4,1.42464, -0.69444,2.4,1.33476, + -0.69444,2.4,1.33476, -0.729046,2.242575,1.401276, -0.502408,2.242575,1.495635, + -0.258385,2.242575,1.554467, -0.24612,2.4,1.48068, -0.47856,2.4,1.42464, + -0.47856,2.4,1.42464, -0.502408,2.242575,1.495635, -0.258385,2.242575,1.554467, + 0,2.242575,1.57475, 0,2.4,1.5, -0.24612,2.4,1.48068, + -0.24612,2.4,1.48068, -0.258385,2.242575,1.554467, 0,2.242575,1.57475, + -1.626774,2.0856,0.270404, -1.554467,2.242575,0.258385, -1.57475,2.242575,0, + -1.57475,2.242575,0, -1.648,2.0856,0, -1.626774,2.0856,0.270404, + -1.565204,2.0856,0.525778, -1.495635,2.242575,0.502408, -1.554467,2.242575,0.258385, + -1.554467,2.242575,0.258385, -1.626774,2.0856,0.270404, -1.565204,2.0856,0.525778, + -1.466456,2.0856,0.762958, -1.401276,2.242575,0.729046, -1.495635,2.242575,0.502408, + -1.495635,2.242575,0.502408, -1.565204,2.0856,0.525778, -1.466456,2.0856,0.762958, + -1.333693,2.0856,0.97878, -1.274414,2.242575,0.935276, -1.401276,2.242575,0.729046, + -1.401276,2.242575,0.729046, -1.466456,2.0856,0.762958, -1.333693,2.0856,0.97878, + -1.17008,2.0856,1.17008, -1.118073,2.242575,1.118073, -1.274414,2.242575,0.935276, + -1.274414,2.242575,0.935276, -1.333693,2.0856,0.97878, -1.17008,2.0856,1.17008, + -0.97878,2.0856,1.333693, -0.935276,2.242575,1.274414, -1.118073,2.242575,1.118073, + -1.118073,2.242575,1.118073, -1.17008,2.0856,1.17008, -0.97878,2.0856,1.333693, + -0.762958,2.0856,1.466456, -0.729046,2.242575,1.401276, -0.935276,2.242575,1.274414, + -0.935276,2.242575,1.274414, -0.97878,2.0856,1.333693, -0.762958,2.0856,1.466456, + -0.525778,2.0856,1.565204, -0.502408,2.242575,1.495635, -0.729046,2.242575,1.401276, + -0.729046,2.242575,1.401276, -0.762958,2.0856,1.466456, -0.525778,2.0856,1.565204, + -0.270404,2.0856,1.626774, -0.258385,2.242575,1.554467, -0.502408,2.242575,1.495635, + -0.502408,2.242575,1.495635, -0.525778,2.0856,1.565204, -0.270404,2.0856,1.626774, + 0,2.0856,1.648, 0,2.242575,1.57475, -0.258385,2.242575,1.554467, + -0.258385,2.242575,1.554467, -0.270404,2.0856,1.626774, 0,2.0856,1.648, + -1.696119,1.929525,0.28193, -1.626774,2.0856,0.270404, -1.648,2.0856,0, + -1.648,2.0856,0, -1.71825,1.929525,0, -1.696119,1.929525,0.28193, + -1.631925,1.929525,0.54819, -1.565204,2.0856,0.525778, -1.626774,2.0856,0.270404, + -1.626774,2.0856,0.270404, -1.696119,1.929525,0.28193, -1.631925,1.929525,0.54819, + -1.528968,1.929525,0.795481, -1.466456,2.0856,0.762958, -1.565204,2.0856,0.525778, + -1.565204,2.0856,0.525778, -1.631925,1.929525,0.54819, -1.528968,1.929525,0.795481, + -1.390545,1.929525,1.020503, -1.333693,2.0856,0.97878, -1.466456,2.0856,0.762958, + -1.466456,2.0856,0.762958, -1.528968,1.929525,0.795481, -1.390545,1.929525,1.020503, + -1.219958,1.929525,1.219958, -1.17008,2.0856,1.17008, -1.333693,2.0856,0.97878, + -1.333693,2.0856,0.97878, -1.390545,1.929525,1.020503, -1.219958,1.929525,1.219958, + -1.020503,1.929525,1.390545, -0.97878,2.0856,1.333693, -1.17008,2.0856,1.17008, + -1.17008,2.0856,1.17008, -1.219958,1.929525,1.219958, -1.020503,1.929525,1.390545, + -0.795481,1.929525,1.528968, -0.762958,2.0856,1.466456, -0.97878,2.0856,1.333693, + -0.97878,2.0856,1.333693, -1.020503,1.929525,1.390545, -0.795481,1.929525,1.528968, + -0.54819,1.929525,1.631925, -0.525778,2.0856,1.565204, -0.762958,2.0856,1.466456, + -0.762958,2.0856,1.466456, -0.795481,1.929525,1.528968, -0.54819,1.929525,1.631925, + -0.28193,1.929525,1.696119, -0.270404,2.0856,1.626774, -0.525778,2.0856,1.565204, + -0.525778,2.0856,1.565204, -0.54819,1.929525,1.631925, -0.28193,1.929525,1.696119, + 0,1.929525,1.71825, 0,2.0856,1.648, -0.270404,2.0856,1.626774, + -0.270404,2.0856,1.626774, -0.28193,1.929525,1.696119, 0,1.929525,1.71825, + -1.761022,1.7748,0.292719, -1.696119,1.929525,0.28193, -1.71825,1.929525,0, + -1.71825,1.929525,0, -1.784,1.7748,0, -1.761022,1.7748,0.292719, + -1.694372,1.7748,0.569167, -1.631925,1.929525,0.54819, -1.696119,1.929525,0.28193, + -1.696119,1.929525,0.28193, -1.761022,1.7748,0.292719, -1.694372,1.7748,0.569167, + -1.587475,1.7748,0.825921, -1.528968,1.929525,0.795481, -1.631925,1.929525,0.54819, + -1.631925,1.929525,0.54819, -1.694372,1.7748,0.569167, -1.587475,1.7748,0.825921, + -1.443756,1.7748,1.059553, -1.390545,1.929525,1.020503, -1.528968,1.929525,0.795481, + -1.528968,1.929525,0.795481, -1.587475,1.7748,0.825921, -1.443756,1.7748,1.059553, + -1.26664,1.7748,1.26664, -1.219958,1.929525,1.219958, -1.390545,1.929525,1.020503, + -1.390545,1.929525,1.020503, -1.443756,1.7748,1.059553, -1.26664,1.7748,1.26664, + -1.059553,1.7748,1.443756, -1.020503,1.929525,1.390545, -1.219958,1.929525,1.219958, + -1.219958,1.929525,1.219958, -1.26664,1.7748,1.26664, -1.059553,1.7748,1.443756, + -0.825921,1.7748,1.587475, -0.795481,1.929525,1.528968, -1.020503,1.929525,1.390545, + -1.020503,1.929525,1.390545, -1.059553,1.7748,1.443756, -0.825921,1.7748,1.587475, + -0.569167,1.7748,1.694372, -0.54819,1.929525,1.631925, -0.795481,1.929525,1.528968, + -0.795481,1.929525,1.528968, -0.825921,1.7748,1.587475, -0.569167,1.7748,1.694372, + -0.292719,1.7748,1.761022, -0.28193,1.929525,1.696119, -0.54819,1.929525,1.631925, + -0.54819,1.929525,1.631925, -0.569167,1.7748,1.694372, -0.292719,1.7748,1.761022, + 0,1.7748,1.784, 0,1.929525,1.71825, -0.28193,1.929525,1.696119, + -0.28193,1.929525,1.696119, -0.292719,1.7748,1.761022, 0,1.7748,1.784, + -1.820003,1.621875,0.302523, -1.761022,1.7748,0.292719, -1.784,1.7748,0, + -1.784,1.7748,0, -1.84375,1.621875,0, -1.820003,1.621875,0.302523, + -1.75112,1.621875,0.58823, -1.694372,1.7748,0.569167, -1.761022,1.7748,0.292719, + -1.761022,1.7748,0.292719, -1.820003,1.621875,0.302523, -1.75112,1.621875,0.58823, + -1.640643,1.621875,0.853583, -1.587475,1.7748,0.825921, -1.694372,1.7748,0.569167, + -1.694372,1.7748,0.569167, -1.75112,1.621875,0.58823, -1.640643,1.621875,0.853583, + -1.49211,1.621875,1.09504, -1.443756,1.7748,1.059553, -1.587475,1.7748,0.825921, + -1.587475,1.7748,0.825921, -1.640643,1.621875,0.853583, -1.49211,1.621875,1.09504, + -1.309063,1.621875,1.309063, -1.26664,1.7748,1.26664, -1.443756,1.7748,1.059553, + -1.443756,1.7748,1.059553, -1.49211,1.621875,1.09504, -1.309063,1.621875,1.309063, + -1.09504,1.621875,1.49211, -1.059553,1.7748,1.443756, -1.26664,1.7748,1.26664, + -1.26664,1.7748,1.26664, -1.309063,1.621875,1.309063, -1.09504,1.621875,1.49211, + -0.853583,1.621875,1.640643, -0.825921,1.7748,1.587475, -1.059553,1.7748,1.443756, + -1.059553,1.7748,1.443756, -1.09504,1.621875,1.49211, -0.853583,1.621875,1.640643, + -0.58823,1.621875,1.75112, -0.569167,1.7748,1.694372, -0.825921,1.7748,1.587475, + -0.825921,1.7748,1.587475, -0.853583,1.621875,1.640643, -0.58823,1.621875,1.75112, + -0.302522,1.621875,1.820003, -0.292719,1.7748,1.761022, -0.569167,1.7748,1.694372, + -0.569167,1.7748,1.694372, -0.58823,1.621875,1.75112, -0.302522,1.621875,1.820003, + 0,1.621875,1.84375, 0,1.7748,1.784, -0.292719,1.7748,1.761022, + -0.292719,1.7748,1.761022, -0.302522,1.621875,1.820003, 0,1.621875,1.84375, + -1.87158,1.4712,0.311096, -1.820003,1.621875,0.302523, -1.84375,1.621875,0, + -1.84375,1.621875,0, -1.896,1.4712,0, -1.87158,1.4712,0.311096, + -1.800745,1.4712,0.6049, -1.75112,1.621875,0.58823, -1.820003,1.621875,0.302523, + -1.820003,1.621875,0.302523, -1.87158,1.4712,0.311096, -1.800745,1.4712,0.6049, + -1.687137,1.4712,0.877772, -1.640643,1.621875,0.853583, -1.75112,1.621875,0.58823, + -1.75112,1.621875,0.58823, -1.800745,1.4712,0.6049, -1.687137,1.4712,0.877772, + -1.534395,1.4712,1.126072, -1.49211,1.621875,1.09504, -1.640643,1.621875,0.853583, + -1.640643,1.621875,0.853583, -1.687137,1.4712,0.877772, -1.534395,1.4712,1.126072, + -1.34616,1.4712,1.34616, -1.309063,1.621875,1.309063, -1.49211,1.621875,1.09504, + -1.49211,1.621875,1.09504, -1.534395,1.4712,1.126072, -1.34616,1.4712,1.34616, + -1.126072,1.4712,1.534395, -1.09504,1.621875,1.49211, -1.309063,1.621875,1.309063, + -1.309063,1.621875,1.309063, -1.34616,1.4712,1.34616, -1.126072,1.4712,1.534395, + -0.877772,1.4712,1.687137, -0.853583,1.621875,1.640643, -1.09504,1.621875,1.49211, + -1.09504,1.621875,1.49211, -1.126072,1.4712,1.534395, -0.877772,1.4712,1.687137, + -0.6049,1.4712,1.800745, -0.58823,1.621875,1.75112, -0.853583,1.621875,1.640643, + -0.853583,1.621875,1.640643, -0.877772,1.4712,1.687137, -0.6049,1.4712,1.800745, + -0.311096,1.4712,1.87158, -0.302522,1.621875,1.820003, -0.58823,1.621875,1.75112, + -0.58823,1.621875,1.75112, -0.6049,1.4712,1.800745, -0.311096,1.4712,1.87158, + 0,1.4712,1.896, 0,1.621875,1.84375, -0.302522,1.621875,1.820003, + -0.302522,1.621875,1.820003, -0.311096,1.4712,1.87158, 0,1.4712,1.896, + -1.914272,1.323225,0.318192, -1.87158,1.4712,0.311096, -1.896,1.4712,0, + -1.896,1.4712,0, -1.93925,1.323225,0, -1.914272,1.323225,0.318192, + -1.841822,1.323225,0.618698, -1.800745,1.4712,0.6049, -1.87158,1.4712,0.311096, + -1.87158,1.4712,0.311096, -1.914272,1.323225,0.318192, -1.841822,1.323225,0.618698, + -1.725622,1.323225,0.897795, -1.687137,1.4712,0.877772, -1.800745,1.4712,0.6049, + -1.800745,1.4712,0.6049, -1.841822,1.323225,0.618698, -1.725622,1.323225,0.897795, + -1.569396,1.323225,1.151759, -1.534395,1.4712,1.126072, -1.687137,1.4712,0.877772, + -1.687137,1.4712,0.877772, -1.725622,1.323225,0.897795, -1.569396,1.323225,1.151759, + -1.376867,1.323225,1.376868, -1.34616,1.4712,1.34616, -1.534395,1.4712,1.126072, + -1.534395,1.4712,1.126072, -1.569396,1.323225,1.151759, -1.376867,1.323225,1.376868, + -1.151759,1.323225,1.569396, -1.126072,1.4712,1.534395, -1.34616,1.4712,1.34616, + -1.34616,1.4712,1.34616, -1.376867,1.323225,1.376868, -1.151759,1.323225,1.569396, + -0.897795,1.323225,1.725622, -0.877772,1.4712,1.687137, -1.126072,1.4712,1.534395, + -1.126072,1.4712,1.534395, -1.151759,1.323225,1.569396, -0.897795,1.323225,1.725622, + -0.618698,1.323225,1.841822, -0.6049,1.4712,1.800745, -0.877772,1.4712,1.687137, + -0.877772,1.4712,1.687137, -0.897795,1.323225,1.725622, -0.618698,1.323225,1.841822, + -0.318192,1.323225,1.914272, -0.311096,1.4712,1.87158, -0.6049,1.4712,1.800745, + -0.6049,1.4712,1.800745, -0.618698,1.323225,1.841822, -0.318192,1.323225,1.914272, + 0,1.323225,1.93925, 0,1.4712,1.896, -0.311096,1.4712,1.87158, + -0.311096,1.4712,1.87158, -0.318192,1.323225,1.914272, 0,1.323225,1.93925, + -1.946601,1.1784,0.323566, -1.914272,1.323225,0.318192, -1.93925,1.323225,0, + -1.93925,1.323225,0, -1.972,1.1784,0, -1.946601,1.1784,0.323566, + -1.872927,1.1784,0.629147, -1.841822,1.323225,0.618698, -1.914272,1.323225,0.318192, + -1.914272,1.323225,0.318192, -1.946601,1.1784,0.323566, -1.872927,1.1784,0.629147, + -1.754764,1.1784,0.912957, -1.725622,1.323225,0.897795, -1.841822,1.323225,0.618698, + -1.841822,1.323225,0.618698, -1.872927,1.1784,0.629147, -1.754764,1.1784,0.912957, + -1.5959,1.1784,1.17121, -1.569396,1.323225,1.151759, -1.725622,1.323225,0.897795, + -1.725622,1.323225,0.897795, -1.754764,1.1784,0.912957, -1.5959,1.1784,1.17121, + -1.40012,1.1784,1.40012, -1.376867,1.323225,1.376868, -1.569396,1.323225,1.151759, + -1.569396,1.323225,1.151759, -1.5959,1.1784,1.17121, -1.40012,1.1784,1.40012, + -1.17121,1.1784,1.5959, -1.151759,1.323225,1.569396, -1.376867,1.323225,1.376868, + -1.376867,1.323225,1.376868, -1.40012,1.1784,1.40012, -1.17121,1.1784,1.5959, + -0.912957,1.1784,1.754764, -0.897795,1.323225,1.725622, -1.151759,1.323225,1.569396, + -1.151759,1.323225,1.569396, -1.17121,1.1784,1.5959, -0.912957,1.1784,1.754764, + -0.629147,1.1784,1.872927, -0.618698,1.323225,1.841822, -0.897795,1.323225,1.725622, + -0.897795,1.323225,1.725622, -0.912957,1.1784,1.754764, -0.629147,1.1784,1.872927, + -0.323566,1.1784,1.946601, -0.318192,1.323225,1.914272, -0.618698,1.323225,1.841822, + -0.618698,1.323225,1.841822, -0.629147,1.1784,1.872927, -0.323566,1.1784,1.946601, + 0,1.1784,1.972, 0,1.323225,1.93925, -0.318192,1.323225,1.914272, + -0.318192,1.323225,1.914272, -0.323566,1.1784,1.946601, 0,1.1784,1.972, + -1.967083,1.037175,0.32697, -1.946601,1.1784,0.323566, -1.972,1.1784,0, + -1.972,1.1784,0, -1.99275,1.037175,0, -1.967083,1.037175,0.32697, + -1.892634,1.037175,0.635767, -1.872927,1.1784,0.629147, -1.946601,1.1784,0.323566, + -1.946601,1.1784,0.323566, -1.967083,1.037175,0.32697, -1.892634,1.037175,0.635767, + -1.773229,1.037175,0.922564, -1.754764,1.1784,0.912957, -1.872927,1.1784,0.629147, + -1.872927,1.1784,0.629147, -1.892634,1.037175,0.635767, -1.773229,1.037175,0.922564, + -1.612693,1.037175,1.183534, -1.5959,1.1784,1.17121, -1.754764,1.1784,0.912957, + -1.754764,1.1784,0.912957, -1.773229,1.037175,0.922564, -1.612693,1.037175,1.183534, + -1.414853,1.037175,1.414853, -1.40012,1.1784,1.40012, -1.5959,1.1784,1.17121, + -1.5959,1.1784,1.17121, -1.612693,1.037175,1.183534, -1.414853,1.037175,1.414853, + -1.183534,1.037175,1.612693, -1.17121,1.1784,1.5959, -1.40012,1.1784,1.40012, + -1.40012,1.1784,1.40012, -1.414853,1.037175,1.414853, -1.183534,1.037175,1.612693, + -0.922564,1.037175,1.773229, -0.912957,1.1784,1.754764, -1.17121,1.1784,1.5959, + -1.17121,1.1784,1.5959, -1.183534,1.037175,1.612693, -0.922564,1.037175,1.773229, + -0.635767,1.037175,1.892634, -0.629147,1.1784,1.872927, -0.912957,1.1784,1.754764, + -0.912957,1.1784,1.754764, -0.922564,1.037175,1.773229, -0.635767,1.037175,1.892634, + -0.32697,1.037175,1.967083, -0.323566,1.1784,1.946601, -0.629147,1.1784,1.872927, + -0.629147,1.1784,1.872927, -0.635767,1.037175,1.892634, -0.32697,1.037175,1.967083, + 0,1.037175,1.99275, 0,1.1784,1.972, -0.323566,1.1784,1.946601, + -0.323566,1.1784,1.946601, -0.32697,1.037175,1.967083, 0,1.037175,1.99275, + -1.97424,0.9,0.32816, -1.967083,1.037175,0.32697, -1.99275,1.037175,0, + -1.99275,1.037175,0, -2,0.9,0, -1.97424,0.9,0.32816, + -1.89952,0.9,0.63808, -1.892634,1.037175,0.635767, -1.967083,1.037175,0.32697, + -1.967083,1.037175,0.32697, -1.97424,0.9,0.32816, -1.89952,0.9,0.63808, + -1.77968,0.9,0.92592, -1.773229,1.037175,0.922564, -1.892634,1.037175,0.635767, + -1.892634,1.037175,0.635767, -1.89952,0.9,0.63808, -1.77968,0.9,0.92592, + -1.61856,0.9,1.18784, -1.612693,1.037175,1.183534, -1.773229,1.037175,0.922564, + -1.773229,1.037175,0.922564, -1.77968,0.9,0.92592, -1.61856,0.9,1.18784, + -1.42,0.9,1.42, -1.414853,1.037175,1.414853, -1.612693,1.037175,1.183534, + -1.612693,1.037175,1.183534, -1.61856,0.9,1.18784, -1.42,0.9,1.42, + -1.18784,0.9,1.61856, -1.183534,1.037175,1.612693, -1.414853,1.037175,1.414853, + -1.414853,1.037175,1.414853, -1.42,0.9,1.42, -1.18784,0.9,1.61856, + -0.92592,0.9,1.77968, -0.922564,1.037175,1.773229, -1.183534,1.037175,1.612693, + -1.183534,1.037175,1.612693, -1.18784,0.9,1.61856, -0.92592,0.9,1.77968, + -0.63808,0.9,1.89952, -0.635767,1.037175,1.892634, -0.922564,1.037175,1.773229, + -0.922564,1.037175,1.773229, -0.92592,0.9,1.77968, -0.63808,0.9,1.89952, + -0.32816,0.9,1.97424, -0.32697,1.037175,1.967083, -0.635767,1.037175,1.892634, + -0.635767,1.037175,1.892634, -0.63808,0.9,1.89952, -0.32816,0.9,1.97424, + 0,0.9,2, 0,1.037175,1.99275, -0.32697,1.037175,1.967083, + -0.32697,1.037175,1.967083, -0.32816,0.9,1.97424, 0,0.9,2, + 0.258385,2.242575,1.554467, 0.24612,2.4,1.48068, 0,2.4,1.5, + 0,2.4,1.5, 0,2.242575,1.57475, 0.258385,2.242575,1.554467, + 0.502408,2.242575,1.495635, 0.47856,2.4,1.42464, 0.24612,2.4,1.48068, + 0.24612,2.4,1.48068, 0.258385,2.242575,1.554467, 0.502408,2.242575,1.495635, + 0.729046,2.242575,1.401276, 0.69444,2.4,1.33476, 0.47856,2.4,1.42464, + 0.47856,2.4,1.42464, 0.502408,2.242575,1.495635, 0.729046,2.242575,1.401276, + 0.935276,2.242575,1.274414, 0.89088,2.4,1.21392, 0.69444,2.4,1.33476, + 0.69444,2.4,1.33476, 0.729046,2.242575,1.401276, 0.935276,2.242575,1.274414, + 1.118073,2.242575,1.118073, 1.065,2.4,1.065, 0.89088,2.4,1.21392, + 0.89088,2.4,1.21392, 0.935276,2.242575,1.274414, 1.118073,2.242575,1.118073, + 1.274414,2.242575,0.935276, 1.21392,2.4,0.89088, 1.065,2.4,1.065, + 1.065,2.4,1.065, 1.118073,2.242575,1.118073, 1.274414,2.242575,0.935276, + 1.401276,2.242575,0.729046, 1.33476,2.4,0.69444, 1.21392,2.4,0.89088, + 1.21392,2.4,0.89088, 1.274414,2.242575,0.935276, 1.401276,2.242575,0.729046, + 1.495635,2.242575,0.502408, 1.42464,2.4,0.47856, 1.33476,2.4,0.69444, + 1.33476,2.4,0.69444, 1.401276,2.242575,0.729046, 1.495635,2.242575,0.502408, + 1.554467,2.242575,0.258385, 1.48068,2.4,0.24612, 1.42464,2.4,0.47856, + 1.42464,2.4,0.47856, 1.495635,2.242575,0.502408, 1.554467,2.242575,0.258385, + 1.57475,2.242575,0, 1.5,2.4,0, 1.48068,2.4,0.24612, + 1.48068,2.4,0.24612, 1.554467,2.242575,0.258385, 1.57475,2.242575,0, + 0.270404,2.0856,1.626774, 0.258385,2.242575,1.554467, 0,2.242575,1.57475, + 0,2.242575,1.57475, 0,2.0856,1.648, 0.270404,2.0856,1.626774, + 0.525778,2.0856,1.565204, 0.502408,2.242575,1.495635, 0.258385,2.242575,1.554467, + 0.258385,2.242575,1.554467, 0.270404,2.0856,1.626774, 0.525778,2.0856,1.565204, + 0.762958,2.0856,1.466456, 0.729046,2.242575,1.401276, 0.502408,2.242575,1.495635, + 0.502408,2.242575,1.495635, 0.525778,2.0856,1.565204, 0.762958,2.0856,1.466456, + 0.97878,2.0856,1.333693, 0.935276,2.242575,1.274414, 0.729046,2.242575,1.401276, + 0.729046,2.242575,1.401276, 0.762958,2.0856,1.466456, 0.97878,2.0856,1.333693, + 1.17008,2.0856,1.17008, 1.118073,2.242575,1.118073, 0.935276,2.242575,1.274414, + 0.935276,2.242575,1.274414, 0.97878,2.0856,1.333693, 1.17008,2.0856,1.17008, + 1.333693,2.0856,0.97878, 1.274414,2.242575,0.935276, 1.118073,2.242575,1.118073, + 1.118073,2.242575,1.118073, 1.17008,2.0856,1.17008, 1.333693,2.0856,0.97878, + 1.466456,2.0856,0.762958, 1.401276,2.242575,0.729046, 1.274414,2.242575,0.935276, + 1.274414,2.242575,0.935276, 1.333693,2.0856,0.97878, 1.466456,2.0856,0.762958, + 1.565204,2.0856,0.525778, 1.495635,2.242575,0.502408, 1.401276,2.242575,0.729046, + 1.401276,2.242575,0.729046, 1.466456,2.0856,0.762958, 1.565204,2.0856,0.525778, + 1.626774,2.0856,0.270404, 1.554467,2.242575,0.258385, 1.495635,2.242575,0.502408, + 1.495635,2.242575,0.502408, 1.565204,2.0856,0.525778, 1.626774,2.0856,0.270404, + 1.648,2.0856,0, 1.57475,2.242575,0, 1.554467,2.242575,0.258385, + 1.554467,2.242575,0.258385, 1.626774,2.0856,0.270404, 1.648,2.0856,0, + 0.28193,1.929525,1.696119, 0.270404,2.0856,1.626774, 0,2.0856,1.648, + 0,2.0856,1.648, 0,1.929525,1.71825, 0.28193,1.929525,1.696119, + 0.54819,1.929525,1.631925, 0.525778,2.0856,1.565204, 0.270404,2.0856,1.626774, + 0.270404,2.0856,1.626774, 0.28193,1.929525,1.696119, 0.54819,1.929525,1.631925, + 0.795481,1.929525,1.528968, 0.762958,2.0856,1.466456, 0.525778,2.0856,1.565204, + 0.525778,2.0856,1.565204, 0.54819,1.929525,1.631925, 0.795481,1.929525,1.528968, + 1.020503,1.929525,1.390545, 0.97878,2.0856,1.333693, 0.762958,2.0856,1.466456, + 0.762958,2.0856,1.466456, 0.795481,1.929525,1.528968, 1.020503,1.929525,1.390545, + 1.219958,1.929525,1.219958, 1.17008,2.0856,1.17008, 0.97878,2.0856,1.333693, + 0.97878,2.0856,1.333693, 1.020503,1.929525,1.390545, 1.219958,1.929525,1.219958, + 1.390545,1.929525,1.020503, 1.333693,2.0856,0.97878, 1.17008,2.0856,1.17008, + 1.17008,2.0856,1.17008, 1.219958,1.929525,1.219958, 1.390545,1.929525,1.020503, + 1.528968,1.929525,0.795481, 1.466456,2.0856,0.762958, 1.333693,2.0856,0.97878, + 1.333693,2.0856,0.97878, 1.390545,1.929525,1.020503, 1.528968,1.929525,0.795481, + 1.631925,1.929525,0.54819, 1.565204,2.0856,0.525778, 1.466456,2.0856,0.762958, + 1.466456,2.0856,0.762958, 1.528968,1.929525,0.795481, 1.631925,1.929525,0.54819, + 1.696119,1.929525,0.28193, 1.626774,2.0856,0.270404, 1.565204,2.0856,0.525778, + 1.565204,2.0856,0.525778, 1.631925,1.929525,0.54819, 1.696119,1.929525,0.28193, + 1.71825,1.929525,0, 1.648,2.0856,0, 1.626774,2.0856,0.270404, + 1.626774,2.0856,0.270404, 1.696119,1.929525,0.28193, 1.71825,1.929525,0, + 0.292719,1.7748,1.761022, 0.28193,1.929525,1.696119, 0,1.929525,1.71825, + 0,1.929525,1.71825, 0,1.7748,1.784, 0.292719,1.7748,1.761022, + 0.569167,1.7748,1.694372, 0.54819,1.929525,1.631925, 0.28193,1.929525,1.696119, + 0.28193,1.929525,1.696119, 0.292719,1.7748,1.761022, 0.569167,1.7748,1.694372, + 0.825921,1.7748,1.587475, 0.795481,1.929525,1.528968, 0.54819,1.929525,1.631925, + 0.54819,1.929525,1.631925, 0.569167,1.7748,1.694372, 0.825921,1.7748,1.587475, + 1.059553,1.7748,1.443756, 1.020503,1.929525,1.390545, 0.795481,1.929525,1.528968, + 0.795481,1.929525,1.528968, 0.825921,1.7748,1.587475, 1.059553,1.7748,1.443756, + 1.26664,1.7748,1.26664, 1.219958,1.929525,1.219958, 1.020503,1.929525,1.390545, + 1.020503,1.929525,1.390545, 1.059553,1.7748,1.443756, 1.26664,1.7748,1.26664, + 1.443756,1.7748,1.059553, 1.390545,1.929525,1.020503, 1.219958,1.929525,1.219958, + 1.219958,1.929525,1.219958, 1.26664,1.7748,1.26664, 1.443756,1.7748,1.059553, + 1.587475,1.7748,0.825921, 1.528968,1.929525,0.795481, 1.390545,1.929525,1.020503, + 1.390545,1.929525,1.020503, 1.443756,1.7748,1.059553, 1.587475,1.7748,0.825921, + 1.694372,1.7748,0.569167, 1.631925,1.929525,0.54819, 1.528968,1.929525,0.795481, + 1.528968,1.929525,0.795481, 1.587475,1.7748,0.825921, 1.694372,1.7748,0.569167, + 1.761022,1.7748,0.292719, 1.696119,1.929525,0.28193, 1.631925,1.929525,0.54819, + 1.631925,1.929525,0.54819, 1.694372,1.7748,0.569167, 1.761022,1.7748,0.292719, + 1.784,1.7748,0, 1.71825,1.929525,0, 1.696119,1.929525,0.28193, + 1.696119,1.929525,0.28193, 1.761022,1.7748,0.292719, 1.784,1.7748,0, + 0.302523,1.621875,1.820003, 0.292719,1.7748,1.761022, 0,1.7748,1.784, + 0,1.7748,1.784, 0,1.621875,1.84375, 0.302523,1.621875,1.820003, + 0.58823,1.621875,1.75112, 0.569167,1.7748,1.694372, 0.292719,1.7748,1.761022, + 0.292719,1.7748,1.761022, 0.302523,1.621875,1.820003, 0.58823,1.621875,1.75112, + 0.853583,1.621875,1.640643, 0.825921,1.7748,1.587475, 0.569167,1.7748,1.694372, + 0.569167,1.7748,1.694372, 0.58823,1.621875,1.75112, 0.853583,1.621875,1.640643, + 1.09504,1.621875,1.49211, 1.059553,1.7748,1.443756, 0.825921,1.7748,1.587475, + 0.825921,1.7748,1.587475, 0.853583,1.621875,1.640643, 1.09504,1.621875,1.49211, + 1.309063,1.621875,1.309063, 1.26664,1.7748,1.26664, 1.059553,1.7748,1.443756, + 1.059553,1.7748,1.443756, 1.09504,1.621875,1.49211, 1.309063,1.621875,1.309063, + 1.49211,1.621875,1.09504, 1.443756,1.7748,1.059553, 1.26664,1.7748,1.26664, + 1.26664,1.7748,1.26664, 1.309063,1.621875,1.309063, 1.49211,1.621875,1.09504, + 1.640643,1.621875,0.853583, 1.587475,1.7748,0.825921, 1.443756,1.7748,1.059553, + 1.443756,1.7748,1.059553, 1.49211,1.621875,1.09504, 1.640643,1.621875,0.853583, + 1.75112,1.621875,0.58823, 1.694372,1.7748,0.569167, 1.587475,1.7748,0.825921, + 1.587475,1.7748,0.825921, 1.640643,1.621875,0.853583, 1.75112,1.621875,0.58823, + 1.820003,1.621875,0.302522, 1.761022,1.7748,0.292719, 1.694372,1.7748,0.569167, + 1.694372,1.7748,0.569167, 1.75112,1.621875,0.58823, 1.820003,1.621875,0.302522, + 1.84375,1.621875,0, 1.784,1.7748,0, 1.761022,1.7748,0.292719, + 1.761022,1.7748,0.292719, 1.820003,1.621875,0.302522, 1.84375,1.621875,0, + 0.311096,1.4712,1.87158, 0.302523,1.621875,1.820003, 0,1.621875,1.84375, + 0,1.621875,1.84375, 0,1.4712,1.896, 0.311096,1.4712,1.87158, + 0.6049,1.4712,1.800745, 0.58823,1.621875,1.75112, 0.302523,1.621875,1.820003, + 0.302523,1.621875,1.820003, 0.311096,1.4712,1.87158, 0.6049,1.4712,1.800745, + 0.877772,1.4712,1.687137, 0.853583,1.621875,1.640643, 0.58823,1.621875,1.75112, + 0.58823,1.621875,1.75112, 0.6049,1.4712,1.800745, 0.877772,1.4712,1.687137, + 1.126072,1.4712,1.534395, 1.09504,1.621875,1.49211, 0.853583,1.621875,1.640643, + 0.853583,1.621875,1.640643, 0.877772,1.4712,1.687137, 1.126072,1.4712,1.534395, + 1.34616,1.4712,1.34616, 1.309063,1.621875,1.309063, 1.09504,1.621875,1.49211, + 1.09504,1.621875,1.49211, 1.126072,1.4712,1.534395, 1.34616,1.4712,1.34616, + 1.534395,1.4712,1.126072, 1.49211,1.621875,1.09504, 1.309063,1.621875,1.309063, + 1.309063,1.621875,1.309063, 1.34616,1.4712,1.34616, 1.534395,1.4712,1.126072, + 1.687137,1.4712,0.877772, 1.640643,1.621875,0.853583, 1.49211,1.621875,1.09504, + 1.49211,1.621875,1.09504, 1.534395,1.4712,1.126072, 1.687137,1.4712,0.877772, + 1.800745,1.4712,0.6049, 1.75112,1.621875,0.58823, 1.640643,1.621875,0.853583, + 1.640643,1.621875,0.853583, 1.687137,1.4712,0.877772, 1.800745,1.4712,0.6049, + 1.87158,1.4712,0.311096, 1.820003,1.621875,0.302522, 1.75112,1.621875,0.58823, + 1.75112,1.621875,0.58823, 1.800745,1.4712,0.6049, 1.87158,1.4712,0.311096, + 1.896,1.4712,0, 1.84375,1.621875,0, 1.820003,1.621875,0.302522, + 1.820003,1.621875,0.302522, 1.87158,1.4712,0.311096, 1.896,1.4712,0, + 0.318192,1.323225,1.914272, 0.311096,1.4712,1.87158, 0,1.4712,1.896, + 0,1.4712,1.896, 0,1.323225,1.93925, 0.318192,1.323225,1.914272, + 0.618698,1.323225,1.841822, 0.6049,1.4712,1.800745, 0.311096,1.4712,1.87158, + 0.311096,1.4712,1.87158, 0.318192,1.323225,1.914272, 0.618698,1.323225,1.841822, + 0.897795,1.323225,1.725622, 0.877772,1.4712,1.687137, 0.6049,1.4712,1.800745, + 0.6049,1.4712,1.800745, 0.618698,1.323225,1.841822, 0.897795,1.323225,1.725622, + 1.151759,1.323225,1.569396, 1.126072,1.4712,1.534395, 0.877772,1.4712,1.687137, + 0.877772,1.4712,1.687137, 0.897795,1.323225,1.725622, 1.151759,1.323225,1.569396, + 1.376868,1.323225,1.376867, 1.34616,1.4712,1.34616, 1.126072,1.4712,1.534395, + 1.126072,1.4712,1.534395, 1.151759,1.323225,1.569396, 1.376868,1.323225,1.376867, + 1.569396,1.323225,1.151759, 1.534395,1.4712,1.126072, 1.34616,1.4712,1.34616, + 1.34616,1.4712,1.34616, 1.376868,1.323225,1.376867, 1.569396,1.323225,1.151759, + 1.725622,1.323225,0.897795, 1.687137,1.4712,0.877772, 1.534395,1.4712,1.126072, + 1.534395,1.4712,1.126072, 1.569396,1.323225,1.151759, 1.725622,1.323225,0.897795, + 1.841822,1.323225,0.618698, 1.800745,1.4712,0.6049, 1.687137,1.4712,0.877772, + 1.687137,1.4712,0.877772, 1.725622,1.323225,0.897795, 1.841822,1.323225,0.618698, + 1.914272,1.323225,0.318192, 1.87158,1.4712,0.311096, 1.800745,1.4712,0.6049, + 1.800745,1.4712,0.6049, 1.841822,1.323225,0.618698, 1.914272,1.323225,0.318192, + 1.93925,1.323225,0, 1.896,1.4712,0, 1.87158,1.4712,0.311096, + 1.87158,1.4712,0.311096, 1.914272,1.323225,0.318192, 1.93925,1.323225,0, + 0.323566,1.1784,1.946601, 0.318192,1.323225,1.914272, 0,1.323225,1.93925, + 0,1.323225,1.93925, 0,1.1784,1.972, 0.323566,1.1784,1.946601, + 0.629147,1.1784,1.872927, 0.618698,1.323225,1.841822, 0.318192,1.323225,1.914272, + 0.318192,1.323225,1.914272, 0.323566,1.1784,1.946601, 0.629147,1.1784,1.872927, + 0.912957,1.1784,1.754764, 0.897795,1.323225,1.725622, 0.618698,1.323225,1.841822, + 0.618698,1.323225,1.841822, 0.629147,1.1784,1.872927, 0.912957,1.1784,1.754764, + 1.17121,1.1784,1.5959, 1.151759,1.323225,1.569396, 0.897795,1.323225,1.725622, + 0.897795,1.323225,1.725622, 0.912957,1.1784,1.754764, 1.17121,1.1784,1.5959, + 1.40012,1.1784,1.40012, 1.376868,1.323225,1.376867, 1.151759,1.323225,1.569396, + 1.151759,1.323225,1.569396, 1.17121,1.1784,1.5959, 1.40012,1.1784,1.40012, + 1.5959,1.1784,1.17121, 1.569396,1.323225,1.151759, 1.376868,1.323225,1.376867, + 1.376868,1.323225,1.376867, 1.40012,1.1784,1.40012, 1.5959,1.1784,1.17121, + 1.754764,1.1784,0.912957, 1.725622,1.323225,0.897795, 1.569396,1.323225,1.151759, + 1.569396,1.323225,1.151759, 1.5959,1.1784,1.17121, 1.754764,1.1784,0.912957, + 1.872927,1.1784,0.629147, 1.841822,1.323225,0.618698, 1.725622,1.323225,0.897795, + 1.725622,1.323225,0.897795, 1.754764,1.1784,0.912957, 1.872927,1.1784,0.629147, + 1.946601,1.1784,0.323566, 1.914272,1.323225,0.318192, 1.841822,1.323225,0.618698, + 1.841822,1.323225,0.618698, 1.872927,1.1784,0.629147, 1.946601,1.1784,0.323566, + 1.972,1.1784,0, 1.93925,1.323225,0, 1.914272,1.323225,0.318192, + 1.914272,1.323225,0.318192, 1.946601,1.1784,0.323566, 1.972,1.1784,0, + 0.32697,1.037175,1.967083, 0.323566,1.1784,1.946601, 0,1.1784,1.972, + 0,1.1784,1.972, 0,1.037175,1.99275, 0.32697,1.037175,1.967083, + 0.635767,1.037175,1.892634, 0.629147,1.1784,1.872927, 0.323566,1.1784,1.946601, + 0.323566,1.1784,1.946601, 0.32697,1.037175,1.967083, 0.635767,1.037175,1.892634, + 0.922564,1.037175,1.773229, 0.912957,1.1784,1.754764, 0.629147,1.1784,1.872927, + 0.629147,1.1784,1.872927, 0.635767,1.037175,1.892634, 0.922564,1.037175,1.773229, + 1.183534,1.037175,1.612693, 1.17121,1.1784,1.5959, 0.912957,1.1784,1.754764, + 0.912957,1.1784,1.754764, 0.922564,1.037175,1.773229, 1.183534,1.037175,1.612693, + 1.414853,1.037175,1.414853, 1.40012,1.1784,1.40012, 1.17121,1.1784,1.5959, + 1.17121,1.1784,1.5959, 1.183534,1.037175,1.612693, 1.414853,1.037175,1.414853, + 1.612693,1.037175,1.183534, 1.5959,1.1784,1.17121, 1.40012,1.1784,1.40012, + 1.40012,1.1784,1.40012, 1.414853,1.037175,1.414853, 1.612693,1.037175,1.183534, + 1.773229,1.037175,0.922564, 1.754764,1.1784,0.912957, 1.5959,1.1784,1.17121, + 1.5959,1.1784,1.17121, 1.612693,1.037175,1.183534, 1.773229,1.037175,0.922564, + 1.892634,1.037175,0.635767, 1.872927,1.1784,0.629147, 1.754764,1.1784,0.912957, + 1.754764,1.1784,0.912957, 1.773229,1.037175,0.922564, 1.892634,1.037175,0.635767, + 1.967083,1.037175,0.32697, 1.946601,1.1784,0.323566, 1.872927,1.1784,0.629147, + 1.872927,1.1784,0.629147, 1.892634,1.037175,0.635767, 1.967083,1.037175,0.32697, + 1.99275,1.037175,0, 1.972,1.1784,0, 1.946601,1.1784,0.323566, + 1.946601,1.1784,0.323566, 1.967083,1.037175,0.32697, 1.99275,1.037175,0, + 0.32816,0.9,1.97424, 0.32697,1.037175,1.967083, 0,1.037175,1.99275, + 0,1.037175,1.99275, 0,0.9,2, 0.32816,0.9,1.97424, + 0.63808,0.9,1.89952, 0.635767,1.037175,1.892634, 0.32697,1.037175,1.967083, + 0.32697,1.037175,1.967083, 0.32816,0.9,1.97424, 0.63808,0.9,1.89952, + 0.92592,0.9,1.77968, 0.922564,1.037175,1.773229, 0.635767,1.037175,1.892634, + 0.635767,1.037175,1.892634, 0.63808,0.9,1.89952, 0.92592,0.9,1.77968, + 1.18784,0.9,1.61856, 1.183534,1.037175,1.612693, 0.922564,1.037175,1.773229, + 0.922564,1.037175,1.773229, 0.92592,0.9,1.77968, 1.18784,0.9,1.61856, + 1.42,0.9,1.42, 1.414853,1.037175,1.414853, 1.183534,1.037175,1.612693, + 1.183534,1.037175,1.612693, 1.18784,0.9,1.61856, 1.42,0.9,1.42, + 1.61856,0.9,1.18784, 1.612693,1.037175,1.183534, 1.414853,1.037175,1.414853, + 1.414853,1.037175,1.414853, 1.42,0.9,1.42, 1.61856,0.9,1.18784, + 1.77968,0.9,0.92592, 1.773229,1.037175,0.922564, 1.612693,1.037175,1.183534, + 1.612693,1.037175,1.183534, 1.61856,0.9,1.18784, 1.77968,0.9,0.92592, + 1.89952,0.9,0.63808, 1.892634,1.037175,0.635767, 1.773229,1.037175,0.922564, + 1.773229,1.037175,0.922564, 1.77968,0.9,0.92592, 1.89952,0.9,0.63808, + 1.97424,0.9,0.32816, 1.967083,1.037175,0.32697, 1.892634,1.037175,0.635767, + 1.892634,1.037175,0.635767, 1.89952,0.9,0.63808, 1.97424,0.9,0.32816, + 2,0.9,0, 1.99275,1.037175,0, 1.967083,1.037175,0.32697, + 1.967083,1.037175,0.32697, 1.97424,0.9,0.32816, 2,0.9,0, + 1.96042,0.771675,-0.325863, 1.97424,0.9,-0.32816, 2,0.9,0, + 2,0.9,0, 1.986,0.771675,0, 1.96042,0.771675,-0.325863, + 1.886223,0.771675,-0.633613, 1.89952,0.9,-0.63808, 1.97424,0.9,-0.32816, + 1.97424,0.9,-0.32816, 1.96042,0.771675,-0.325863, 1.886223,0.771675,-0.633613, + 1.767222,0.771675,-0.919439, 1.77968,0.9,-0.92592, 1.89952,0.9,-0.63808, + 1.89952,0.9,-0.63808, 1.886223,0.771675,-0.633613, 1.767222,0.771675,-0.919439, + 1.60723,0.771675,-1.179525, 1.61856,0.9,-1.18784, 1.77968,0.9,-0.92592, + 1.77968,0.9,-0.92592, 1.767222,0.771675,-0.919439, 1.60723,0.771675,-1.179525, + 1.41006,0.771675,-1.41006, 1.42,0.9,-1.42, 1.61856,0.9,-1.18784, + 1.61856,0.9,-1.18784, 1.60723,0.771675,-1.179525, 1.41006,0.771675,-1.41006, + 1.179525,0.771675,-1.60723, 1.18784,0.9,-1.61856, 1.42,0.9,-1.42, + 1.42,0.9,-1.42, 1.41006,0.771675,-1.41006, 1.179525,0.771675,-1.60723, + 0.919439,0.771675,-1.767222, 0.92592,0.9,-1.77968, 1.18784,0.9,-1.61856, + 1.18784,0.9,-1.61856, 1.179525,0.771675,-1.60723, 0.919439,0.771675,-1.767222, + 0.633613,0.771675,-1.886223, 0.63808,0.9,-1.89952, 0.92592,0.9,-1.77968, + 0.92592,0.9,-1.77968, 0.919439,0.771675,-1.767222, 0.633613,0.771675,-1.886223, + 0.325863,0.771675,-1.96042, 0.32816,0.9,-1.97424, 0.63808,0.9,-1.89952, + 0.63808,0.9,-1.89952, 0.633613,0.771675,-1.886223, 0.325863,0.771675,-1.96042, + 0,0.771675,-1.986, 0,0.9,-2, 0.32816,0.9,-1.97424, + 0.32816,0.9,-1.97424, 0.325863,0.771675,-1.96042, 0,0.771675,-1.986, + 1.92291,0.6564,-0.319628, 1.96042,0.771675,-0.325863, 1.986,0.771675,0, + 1.986,0.771675,0, 1.948,0.6564,0, 1.92291,0.6564,-0.319628, + 1.850132,0.6564,-0.62149, 1.886223,0.771675,-0.633613, 1.96042,0.771675,-0.325863, + 1.96042,0.771675,-0.325863, 1.92291,0.6564,-0.319628, 1.850132,0.6564,-0.62149, + 1.733408,0.6564,-0.901846, 1.767222,0.771675,-0.919439, 1.886223,0.771675,-0.633613, + 1.886223,0.771675,-0.633613, 1.850132,0.6564,-0.62149, 1.733408,0.6564,-0.901846, + 1.576477,0.6564,-1.156956, 1.60723,0.771675,-1.179525, 1.767222,0.771675,-0.919439, + 1.767222,0.771675,-0.919439, 1.733408,0.6564,-0.901846, 1.576477,0.6564,-1.156956, + 1.38308,0.6564,-1.38308, 1.41006,0.771675,-1.41006, 1.60723,0.771675,-1.179525, + 1.60723,0.771675,-1.179525, 1.576477,0.6564,-1.156956, 1.38308,0.6564,-1.38308, + 1.156956,0.6564,-1.576477, 1.179525,0.771675,-1.60723, 1.41006,0.771675,-1.41006, + 1.41006,0.771675,-1.41006, 1.38308,0.6564,-1.38308, 1.156956,0.6564,-1.576477, + 0.901846,0.6564,-1.733408, 0.919439,0.771675,-1.767222, 1.179525,0.771675,-1.60723, + 1.179525,0.771675,-1.60723, 1.156956,0.6564,-1.576477, 0.901846,0.6564,-1.733408, + 0.62149,0.6564,-1.850132, 0.633613,0.771675,-1.886223, 0.919439,0.771675,-1.767222, + 0.919439,0.771675,-1.767222, 0.901846,0.6564,-1.733408, 0.62149,0.6564,-1.850132, + 0.319628,0.6564,-1.92291, 0.325863,0.771675,-1.96042, 0.633613,0.771675,-1.886223, + 0.633613,0.771675,-1.886223, 0.62149,0.6564,-1.850132, 0.319628,0.6564,-1.92291, + 0,0.6564,-1.948, 0,0.771675,-1.986, 0.325863,0.771675,-1.96042, + 0.325863,0.771675,-1.96042, 0.319628,0.6564,-1.92291, 0,0.6564,-1.948, + 1.867631,0.553725,-0.310439, 1.92291,0.6564,-0.319628, 1.948,0.6564,0, + 1.948,0.6564,0, 1.892,0.553725,0, 1.867631,0.553725,-0.310439, + 1.796946,0.553725,-0.603624, 1.850132,0.6564,-0.62149, 1.92291,0.6564,-0.319628, + 1.92291,0.6564,-0.319628, 1.867631,0.553725,-0.310439, 1.796946,0.553725,-0.603624, + 1.683577,0.553725,-0.87592, 1.733408,0.6564,-0.901846, 1.850132,0.6564,-0.62149, + 1.850132,0.6564,-0.62149, 1.796946,0.553725,-0.603624, 1.683577,0.553725,-0.87592, + 1.531158,0.553725,-1.123697, 1.576477,0.6564,-1.156956, 1.733408,0.6564,-0.901846, + 1.733408,0.6564,-0.901846, 1.683577,0.553725,-0.87592, 1.531158,0.553725,-1.123697, + 1.34332,0.553725,-1.34332, 1.38308,0.6564,-1.38308, 1.576477,0.6564,-1.156956, + 1.576477,0.6564,-1.156956, 1.531158,0.553725,-1.123697, 1.34332,0.553725,-1.34332, + 1.123697,0.553725,-1.531158, 1.156956,0.6564,-1.576477, 1.38308,0.6564,-1.38308, + 1.38308,0.6564,-1.38308, 1.34332,0.553725,-1.34332, 1.123697,0.553725,-1.531158, + 0.87592,0.553725,-1.683577, 0.901846,0.6564,-1.733408, 1.156956,0.6564,-1.576477, + 1.156956,0.6564,-1.576477, 1.123697,0.553725,-1.531158, 0.87592,0.553725,-1.683577, + 0.603624,0.553725,-1.796946, 0.62149,0.6564,-1.850132, 0.901846,0.6564,-1.733408, + 0.901846,0.6564,-1.733408, 0.87592,0.553725,-1.683577, 0.603624,0.553725,-1.796946, + 0.310439,0.553725,-1.867631, 0.319628,0.6564,-1.92291, 0.62149,0.6564,-1.850132, + 0.62149,0.6564,-1.850132, 0.603624,0.553725,-1.796946, 0.310439,0.553725,-1.867631, + 0,0.553725,-1.892, 0,0.6564,-1.948, 0.319628,0.6564,-1.92291, + 0.319628,0.6564,-1.92291, 0.310439,0.553725,-1.867631, 0,0.553725,-1.892, + 1.800507,0.4632,-0.299282, 1.867631,0.553725,-0.310439, 1.892,0.553725,0, + 1.892,0.553725,0, 1.824,0.4632,0, 1.800507,0.4632,-0.299282, + 1.732362,0.4632,-0.581929, 1.796946,0.553725,-0.603624, 1.867631,0.553725,-0.310439, + 1.867631,0.553725,-0.310439, 1.800507,0.4632,-0.299282, 1.732362,0.4632,-0.581929, + 1.623068,0.4632,-0.844439, 1.683577,0.553725,-0.87592, 1.796946,0.553725,-0.603624, + 1.796946,0.553725,-0.603624, 1.732362,0.4632,-0.581929, 1.623068,0.4632,-0.844439, + 1.476127,0.4632,-1.08331, 1.531158,0.553725,-1.123697, 1.683577,0.553725,-0.87592, + 1.683577,0.553725,-0.87592, 1.623068,0.4632,-0.844439, 1.476127,0.4632,-1.08331, + 1.29504,0.4632,-1.29504, 1.34332,0.553725,-1.34332, 1.531158,0.553725,-1.123697, + 1.531158,0.553725,-1.123697, 1.476127,0.4632,-1.08331, 1.29504,0.4632,-1.29504, + 1.08331,0.4632,-1.476127, 1.123697,0.553725,-1.531158, 1.34332,0.553725,-1.34332, + 1.34332,0.553725,-1.34332, 1.29504,0.4632,-1.29504, 1.08331,0.4632,-1.476127, + 0.844439,0.4632,-1.623068, 0.87592,0.553725,-1.683577, 1.123697,0.553725,-1.531158, + 1.123697,0.553725,-1.531158, 1.08331,0.4632,-1.476127, 0.844439,0.4632,-1.623068, + 0.581929,0.4632,-1.732362, 0.603624,0.553725,-1.796946, 0.87592,0.553725,-1.683577, + 0.87592,0.553725,-1.683577, 0.844439,0.4632,-1.623068, 0.581929,0.4632,-1.732362, + 0.299282,0.4632,-1.800507, 0.310439,0.553725,-1.867631, 0.603624,0.553725,-1.796946, + 0.603624,0.553725,-1.796946, 0.581929,0.4632,-1.732362, 0.299282,0.4632,-1.800507, + 0,0.4632,-1.824, 0,0.553725,-1.892, 0.310439,0.553725,-1.867631, + 0.310439,0.553725,-1.867631, 0.299282,0.4632,-1.800507, 0,0.4632,-1.824, + 1.72746,0.384375,-0.28714, 1.800507,0.4632,-0.299282, 1.824,0.4632,0, + 1.824,0.4632,0, 1.75,0.384375,0, 1.72746,0.384375,-0.28714, + 1.66208,0.384375,-0.55832, 1.732362,0.4632,-0.581929, 1.800507,0.4632,-0.299282, + 1.800507,0.4632,-0.299282, 1.72746,0.384375,-0.28714, 1.66208,0.384375,-0.55832, + 1.55722,0.384375,-0.81018, 1.623068,0.4632,-0.844439, 1.732362,0.4632,-0.581929, + 1.732362,0.4632,-0.581929, 1.66208,0.384375,-0.55832, 1.55722,0.384375,-0.81018, + 1.41624,0.384375,-1.03936, 1.476127,0.4632,-1.08331, 1.623068,0.4632,-0.844439, + 1.623068,0.4632,-0.844439, 1.55722,0.384375,-0.81018, 1.41624,0.384375,-1.03936, + 1.2425,0.384375,-1.2425, 1.29504,0.4632,-1.29504, 1.476127,0.4632,-1.08331, + 1.476127,0.4632,-1.08331, 1.41624,0.384375,-1.03936, 1.2425,0.384375,-1.2425, + 1.03936,0.384375,-1.41624, 1.08331,0.4632,-1.476127, 1.29504,0.4632,-1.29504, + 1.29504,0.4632,-1.29504, 1.2425,0.384375,-1.2425, 1.03936,0.384375,-1.41624, + 0.81018,0.384375,-1.55722, 0.844439,0.4632,-1.623068, 1.08331,0.4632,-1.476127, + 1.08331,0.4632,-1.476127, 1.03936,0.384375,-1.41624, 0.81018,0.384375,-1.55722, + 0.55832,0.384375,-1.66208, 0.581929,0.4632,-1.732362, 0.844439,0.4632,-1.623068, + 0.844439,0.4632,-1.623068, 0.81018,0.384375,-1.55722, 0.55832,0.384375,-1.66208, + 0.28714,0.384375,-1.72746, 0.299282,0.4632,-1.800507, 0.581929,0.4632,-1.732362, + 0.581929,0.4632,-1.732362, 0.55832,0.384375,-1.66208, 0.28714,0.384375,-1.72746, + 0,0.384375,-1.75, 0,0.4632,-1.824, 0.299282,0.4632,-1.800507, + 0.299282,0.4632,-1.800507, 0.28714,0.384375,-1.72746, 0,0.384375,-1.75, + 1.654413,0.3168,-0.274998, 1.72746,0.384375,-0.28714, 1.75,0.384375,0, + 1.75,0.384375,0, 1.676,0.3168,0, 1.654413,0.3168,-0.274998, + 1.591798,0.3168,-0.534711, 1.66208,0.384375,-0.55832, 1.72746,0.384375,-0.28714, + 1.72746,0.384375,-0.28714, 1.654413,0.3168,-0.274998, 1.591798,0.3168,-0.534711, + 1.491372,0.3168,-0.775921, 1.55722,0.384375,-0.81018, 1.66208,0.384375,-0.55832, + 1.66208,0.384375,-0.55832, 1.591798,0.3168,-0.534711, 1.491372,0.3168,-0.775921, + 1.356353,0.3168,-0.99541, 1.41624,0.384375,-1.03936, 1.55722,0.384375,-0.81018, + 1.55722,0.384375,-0.81018, 1.491372,0.3168,-0.775921, 1.356353,0.3168,-0.99541, + 1.18996,0.3168,-1.18996, 1.2425,0.384375,-1.2425, 1.41624,0.384375,-1.03936, + 1.41624,0.384375,-1.03936, 1.356353,0.3168,-0.99541, 1.18996,0.3168,-1.18996, + 0.99541,0.3168,-1.356353, 1.03936,0.384375,-1.41624, 1.2425,0.384375,-1.2425, + 1.2425,0.384375,-1.2425, 1.18996,0.3168,-1.18996, 0.99541,0.3168,-1.356353, + 0.775921,0.3168,-1.491372, 0.81018,0.384375,-1.55722, 1.03936,0.384375,-1.41624, + 1.03936,0.384375,-1.41624, 0.99541,0.3168,-1.356353, 0.775921,0.3168,-1.491372, + 0.534711,0.3168,-1.591798, 0.55832,0.384375,-1.66208, 0.81018,0.384375,-1.55722, + 0.81018,0.384375,-1.55722, 0.775921,0.3168,-1.491372, 0.534711,0.3168,-1.591798, + 0.274998,0.3168,-1.654413, 0.28714,0.384375,-1.72746, 0.55832,0.384375,-1.66208, + 0.55832,0.384375,-1.66208, 0.534711,0.3168,-1.591798, 0.274998,0.3168,-1.654413, + 0,0.3168,-1.676, 0,0.384375,-1.75, 0.28714,0.384375,-1.72746, + 0.28714,0.384375,-1.72746, 0.274998,0.3168,-1.654413, 0,0.3168,-1.676, + 1.587289,0.260025,-0.263841, 1.654413,0.3168,-0.274998, 1.676,0.3168,0, + 1.676,0.3168,0, 1.608,0.260025,0, 1.587289,0.260025,-0.263841, + 1.527214,0.260025,-0.513016, 1.591798,0.3168,-0.534711, 1.654413,0.3168,-0.274998, + 1.654413,0.3168,-0.274998, 1.587289,0.260025,-0.263841, 1.527214,0.260025,-0.513016, + 1.430863,0.260025,-0.74444, 1.491372,0.3168,-0.775921, 1.591798,0.3168,-0.534711, + 1.591798,0.3168,-0.534711, 1.527214,0.260025,-0.513016, 1.430863,0.260025,-0.74444, + 1.301322,0.260025,-0.955023, 1.356353,0.3168,-0.99541, 1.491372,0.3168,-0.775921, + 1.491372,0.3168,-0.775921, 1.430863,0.260025,-0.74444, 1.301322,0.260025,-0.955023, + 1.14168,0.260025,-1.14168, 1.18996,0.3168,-1.18996, 1.356353,0.3168,-0.99541, + 1.356353,0.3168,-0.99541, 1.301322,0.260025,-0.955023, 1.14168,0.260025,-1.14168, + 0.955023,0.260025,-1.301322, 0.99541,0.3168,-1.356353, 1.18996,0.3168,-1.18996, + 1.18996,0.3168,-1.18996, 1.14168,0.260025,-1.14168, 0.955023,0.260025,-1.301322, + 0.74444,0.260025,-1.430863, 0.775921,0.3168,-1.491372, 0.99541,0.3168,-1.356353, + 0.99541,0.3168,-1.356353, 0.955023,0.260025,-1.301322, 0.74444,0.260025,-1.430863, + 0.513016,0.260025,-1.527214, 0.534711,0.3168,-1.591798, 0.775921,0.3168,-1.491372, + 0.775921,0.3168,-1.491372, 0.74444,0.260025,-1.430863, 0.513016,0.260025,-1.527214, + 0.263841,0.260025,-1.587289, 0.274998,0.3168,-1.654413, 0.534711,0.3168,-1.591798, + 0.534711,0.3168,-1.591798, 0.513016,0.260025,-1.527214, 0.263841,0.260025,-1.587289, + 0,0.260025,-1.608, 0,0.3168,-1.676, 0.274998,0.3168,-1.654413, + 0.274998,0.3168,-1.654413, 0.263841,0.260025,-1.587289, 0,0.260025,-1.608, + 1.53201,0.2136,-0.254652, 1.587289,0.260025,-0.263841, 1.608,0.260025,0, + 1.608,0.260025,0, 1.552,0.2136,0, 1.53201,0.2136,-0.254652, + 1.474028,0.2136,-0.49515, 1.527214,0.260025,-0.513016, 1.587289,0.260025,-0.263841, + 1.587289,0.260025,-0.263841, 1.53201,0.2136,-0.254652, 1.474028,0.2136,-0.49515, + 1.381032,0.2136,-0.718514, 1.430863,0.260025,-0.74444, 1.527214,0.260025,-0.513016, + 1.527214,0.260025,-0.513016, 1.474028,0.2136,-0.49515, 1.381032,0.2136,-0.718514, + 1.256003,0.2136,-0.921764, 1.301322,0.260025,-0.955023, 1.430863,0.260025,-0.74444, + 1.430863,0.260025,-0.74444, 1.381032,0.2136,-0.718514, 1.256003,0.2136,-0.921764, + 1.10192,0.2136,-1.10192, 1.14168,0.260025,-1.14168, 1.301322,0.260025,-0.955023, + 1.301322,0.260025,-0.955023, 1.256003,0.2136,-0.921764, 1.10192,0.2136,-1.10192, + 0.921764,0.2136,-1.256003, 0.955023,0.260025,-1.301322, 1.14168,0.260025,-1.14168, + 1.14168,0.260025,-1.14168, 1.10192,0.2136,-1.10192, 0.921764,0.2136,-1.256003, + 0.718514,0.2136,-1.381032, 0.74444,0.260025,-1.430863, 0.955023,0.260025,-1.301322, + 0.955023,0.260025,-1.301322, 0.921764,0.2136,-1.256003, 0.718514,0.2136,-1.381032, + 0.49515,0.2136,-1.474028, 0.513016,0.260025,-1.527214, 0.74444,0.260025,-1.430863, + 0.74444,0.260025,-1.430863, 0.718514,0.2136,-1.381032, 0.49515,0.2136,-1.474028, + 0.254652,0.2136,-1.53201, 0.263841,0.260025,-1.587289, 0.513016,0.260025,-1.527214, + 0.513016,0.260025,-1.527214, 0.49515,0.2136,-1.474028, 0.254652,0.2136,-1.53201, + 0,0.2136,-1.552, 0,0.260025,-1.608, 0.263841,0.260025,-1.587289, + 0.263841,0.260025,-1.587289, 0.254652,0.2136,-1.53201, 0,0.2136,-1.552, + 1.4945,0.177075,-0.248417, 1.53201,0.2136,-0.254652, 1.552,0.2136,0, + 1.552,0.2136,0, 1.514,0.177075,0, 1.4945,0.177075,-0.248417, + 1.437937,0.177075,-0.483027, 1.474028,0.2136,-0.49515, 1.53201,0.2136,-0.254652, + 1.53201,0.2136,-0.254652, 1.4945,0.177075,-0.248417, 1.437937,0.177075,-0.483027, + 1.347218,0.177075,-0.700921, 1.381032,0.2136,-0.718514, 1.474028,0.2136,-0.49515, + 1.474028,0.2136,-0.49515, 1.437937,0.177075,-0.483027, 1.347218,0.177075,-0.700921, + 1.22525,0.177075,-0.899195, 1.256003,0.2136,-0.921764, 1.381032,0.2136,-0.718514, + 1.381032,0.2136,-0.718514, 1.347218,0.177075,-0.700921, 1.22525,0.177075,-0.899195, + 1.07494,0.177075,-1.07494, 1.10192,0.2136,-1.10192, 1.256003,0.2136,-0.921764, + 1.256003,0.2136,-0.921764, 1.22525,0.177075,-0.899195, 1.07494,0.177075,-1.07494, + 0.899195,0.177075,-1.22525, 0.921764,0.2136,-1.256003, 1.10192,0.2136,-1.10192, + 1.10192,0.2136,-1.10192, 1.07494,0.177075,-1.07494, 0.899195,0.177075,-1.22525, + 0.700921,0.177075,-1.347218, 0.718514,0.2136,-1.381032, 0.921764,0.2136,-1.256003, + 0.921764,0.2136,-1.256003, 0.899195,0.177075,-1.22525, 0.700921,0.177075,-1.347218, + 0.483027,0.177075,-1.437937, 0.49515,0.2136,-1.474028, 0.718514,0.2136,-1.381032, + 0.718514,0.2136,-1.381032, 0.700921,0.177075,-1.347218, 0.483027,0.177075,-1.437937, + 0.248417,0.177075,-1.4945, 0.254652,0.2136,-1.53201, 0.49515,0.2136,-1.474028, + 0.49515,0.2136,-1.474028, 0.483027,0.177075,-1.437937, 0.248417,0.177075,-1.4945, + 0,0.177075,-1.514, 0,0.2136,-1.552, 0.254652,0.2136,-1.53201, + 0.254652,0.2136,-1.53201, 0.248417,0.177075,-1.4945, 0,0.177075,-1.514, + 1.48068,0.15,-0.24612, 1.4945,0.177075,-0.248417, 1.514,0.177075,0, + 1.514,0.177075,0, 1.5,0.15,0, 1.48068,0.15,-0.24612, + 1.42464,0.15,-0.47856, 1.437937,0.177075,-0.483027, 1.4945,0.177075,-0.248417, + 1.4945,0.177075,-0.248417, 1.48068,0.15,-0.24612, 1.42464,0.15,-0.47856, + 1.33476,0.15,-0.69444, 1.347218,0.177075,-0.700921, 1.437937,0.177075,-0.483027, + 1.437937,0.177075,-0.483027, 1.42464,0.15,-0.47856, 1.33476,0.15,-0.69444, + 1.21392,0.15,-0.89088, 1.22525,0.177075,-0.899195, 1.347218,0.177075,-0.700921, + 1.347218,0.177075,-0.700921, 1.33476,0.15,-0.69444, 1.21392,0.15,-0.89088, + 1.065,0.15,-1.065, 1.07494,0.177075,-1.07494, 1.22525,0.177075,-0.899195, + 1.22525,0.177075,-0.899195, 1.21392,0.15,-0.89088, 1.065,0.15,-1.065, + 0.89088,0.15,-1.21392, 0.899195,0.177075,-1.22525, 1.07494,0.177075,-1.07494, + 1.07494,0.177075,-1.07494, 1.065,0.15,-1.065, 0.89088,0.15,-1.21392, + 0.69444,0.15,-1.33476, 0.700921,0.177075,-1.347218, 0.899195,0.177075,-1.22525, + 0.899195,0.177075,-1.22525, 0.89088,0.15,-1.21392, 0.69444,0.15,-1.33476, + 0.47856,0.15,-1.42464, 0.483027,0.177075,-1.437937, 0.700921,0.177075,-1.347218, + 0.700921,0.177075,-1.347218, 0.69444,0.15,-1.33476, 0.47856,0.15,-1.42464, + 0.24612,0.15,-1.48068, 0.248417,0.177075,-1.4945, 0.483027,0.177075,-1.437937, + 0.483027,0.177075,-1.437937, 0.47856,0.15,-1.42464, 0.24612,0.15,-1.48068, + 0,0.15,-1.5, 0,0.177075,-1.514, 0.248417,0.177075,-1.4945, + 0.248417,0.177075,-1.4945, 0.24612,0.15,-1.48068, 0,0.15,-1.5, + -0.325863,0.771675,-1.96042, -0.32816,0.9,-1.97424, 0,0.9,-2, + 0,0.9,-2, 0,0.771675,-1.986, -0.325863,0.771675,-1.96042, + -0.633613,0.771675,-1.886223, -0.63808,0.9,-1.89952, -0.32816,0.9,-1.97424, + -0.32816,0.9,-1.97424, -0.325863,0.771675,-1.96042, -0.633613,0.771675,-1.886223, + -0.919439,0.771675,-1.767222, -0.92592,0.9,-1.77968, -0.63808,0.9,-1.89952, + -0.63808,0.9,-1.89952, -0.633613,0.771675,-1.886223, -0.919439,0.771675,-1.767222, + -1.179525,0.771675,-1.60723, -1.18784,0.9,-1.61856, -0.92592,0.9,-1.77968, + -0.92592,0.9,-1.77968, -0.919439,0.771675,-1.767222, -1.179525,0.771675,-1.60723, + -1.41006,0.771675,-1.41006, -1.42,0.9,-1.42, -1.18784,0.9,-1.61856, + -1.18784,0.9,-1.61856, -1.179525,0.771675,-1.60723, -1.41006,0.771675,-1.41006, + -1.60723,0.771675,-1.179525, -1.61856,0.9,-1.18784, -1.42,0.9,-1.42, + -1.42,0.9,-1.42, -1.41006,0.771675,-1.41006, -1.60723,0.771675,-1.179525, + -1.767222,0.771675,-0.919439, -1.77968,0.9,-0.92592, -1.61856,0.9,-1.18784, + -1.61856,0.9,-1.18784, -1.60723,0.771675,-1.179525, -1.767222,0.771675,-0.919439, + -1.886223,0.771675,-0.633613, -1.89952,0.9,-0.63808, -1.77968,0.9,-0.92592, + -1.77968,0.9,-0.92592, -1.767222,0.771675,-0.919439, -1.886223,0.771675,-0.633613, + -1.96042,0.771675,-0.325863, -1.97424,0.9,-0.32816, -1.89952,0.9,-0.63808, + -1.89952,0.9,-0.63808, -1.886223,0.771675,-0.633613, -1.96042,0.771675,-0.325863, + -1.986,0.771675,0, -2,0.9,0, -1.97424,0.9,-0.32816, + -1.97424,0.9,-0.32816, -1.96042,0.771675,-0.325863, -1.986,0.771675,0, + -0.319628,0.6564,-1.92291, -0.325863,0.771675,-1.96042, 0,0.771675,-1.986, + 0,0.771675,-1.986, 0,0.6564,-1.948, -0.319628,0.6564,-1.92291, + -0.62149,0.6564,-1.850132, -0.633613,0.771675,-1.886223, -0.325863,0.771675,-1.96042, + -0.325863,0.771675,-1.96042, -0.319628,0.6564,-1.92291, -0.62149,0.6564,-1.850132, + -0.901846,0.6564,-1.733408, -0.919439,0.771675,-1.767222, -0.633613,0.771675,-1.886223, + -0.633613,0.771675,-1.886223, -0.62149,0.6564,-1.850132, -0.901846,0.6564,-1.733408, + -1.156956,0.6564,-1.576477, -1.179525,0.771675,-1.60723, -0.919439,0.771675,-1.767222, + -0.919439,0.771675,-1.767222, -0.901846,0.6564,-1.733408, -1.156956,0.6564,-1.576477, + -1.38308,0.6564,-1.38308, -1.41006,0.771675,-1.41006, -1.179525,0.771675,-1.60723, + -1.179525,0.771675,-1.60723, -1.156956,0.6564,-1.576477, -1.38308,0.6564,-1.38308, + -1.576477,0.6564,-1.156956, -1.60723,0.771675,-1.179525, -1.41006,0.771675,-1.41006, + -1.41006,0.771675,-1.41006, -1.38308,0.6564,-1.38308, -1.576477,0.6564,-1.156956, + -1.733408,0.6564,-0.901846, -1.767222,0.771675,-0.919439, -1.60723,0.771675,-1.179525, + -1.60723,0.771675,-1.179525, -1.576477,0.6564,-1.156956, -1.733408,0.6564,-0.901846, + -1.850132,0.6564,-0.62149, -1.886223,0.771675,-0.633613, -1.767222,0.771675,-0.919439, + -1.767222,0.771675,-0.919439, -1.733408,0.6564,-0.901846, -1.850132,0.6564,-0.62149, + -1.92291,0.6564,-0.319628, -1.96042,0.771675,-0.325863, -1.886223,0.771675,-0.633613, + -1.886223,0.771675,-0.633613, -1.850132,0.6564,-0.62149, -1.92291,0.6564,-0.319628, + -1.948,0.6564,0, -1.986,0.771675,0, -1.96042,0.771675,-0.325863, + -1.96042,0.771675,-0.325863, -1.92291,0.6564,-0.319628, -1.948,0.6564,0, + -0.310439,0.553725,-1.867631, -0.319628,0.6564,-1.92291, 0,0.6564,-1.948, + 0,0.6564,-1.948, 0,0.553725,-1.892, -0.310439,0.553725,-1.867631, + -0.603624,0.553725,-1.796946, -0.62149,0.6564,-1.850132, -0.319628,0.6564,-1.92291, + -0.319628,0.6564,-1.92291, -0.310439,0.553725,-1.867631, -0.603624,0.553725,-1.796946, + -0.87592,0.553725,-1.683577, -0.901846,0.6564,-1.733408, -0.62149,0.6564,-1.850132, + -0.62149,0.6564,-1.850132, -0.603624,0.553725,-1.796946, -0.87592,0.553725,-1.683577, + -1.123697,0.553725,-1.531158, -1.156956,0.6564,-1.576477, -0.901846,0.6564,-1.733408, + -0.901846,0.6564,-1.733408, -0.87592,0.553725,-1.683577, -1.123697,0.553725,-1.531158, + -1.34332,0.553725,-1.34332, -1.38308,0.6564,-1.38308, -1.156956,0.6564,-1.576477, + -1.156956,0.6564,-1.576477, -1.123697,0.553725,-1.531158, -1.34332,0.553725,-1.34332, + -1.531158,0.553725,-1.123697, -1.576477,0.6564,-1.156956, -1.38308,0.6564,-1.38308, + -1.38308,0.6564,-1.38308, -1.34332,0.553725,-1.34332, -1.531158,0.553725,-1.123697, + -1.683577,0.553725,-0.87592, -1.733408,0.6564,-0.901846, -1.576477,0.6564,-1.156956, + -1.576477,0.6564,-1.156956, -1.531158,0.553725,-1.123697, -1.683577,0.553725,-0.87592, + -1.796946,0.553725,-0.603624, -1.850132,0.6564,-0.62149, -1.733408,0.6564,-0.901846, + -1.733408,0.6564,-0.901846, -1.683577,0.553725,-0.87592, -1.796946,0.553725,-0.603624, + -1.867631,0.553725,-0.310439, -1.92291,0.6564,-0.319628, -1.850132,0.6564,-0.62149, + -1.850132,0.6564,-0.62149, -1.796946,0.553725,-0.603624, -1.867631,0.553725,-0.310439, + -1.892,0.553725,0, -1.948,0.6564,0, -1.92291,0.6564,-0.319628, + -1.92291,0.6564,-0.319628, -1.867631,0.553725,-0.310439, -1.892,0.553725,0, + -0.299282,0.4632,-1.800507, -0.310439,0.553725,-1.867631, 0,0.553725,-1.892, + 0,0.553725,-1.892, 0,0.4632,-1.824, -0.299282,0.4632,-1.800507, + -0.581929,0.4632,-1.732362, -0.603624,0.553725,-1.796946, -0.310439,0.553725,-1.867631, + -0.310439,0.553725,-1.867631, -0.299282,0.4632,-1.800507, -0.581929,0.4632,-1.732362, + -0.844439,0.4632,-1.623068, -0.87592,0.553725,-1.683577, -0.603624,0.553725,-1.796946, + -0.603624,0.553725,-1.796946, -0.581929,0.4632,-1.732362, -0.844439,0.4632,-1.623068, + -1.08331,0.4632,-1.476127, -1.123697,0.553725,-1.531158, -0.87592,0.553725,-1.683577, + -0.87592,0.553725,-1.683577, -0.844439,0.4632,-1.623068, -1.08331,0.4632,-1.476127, + -1.29504,0.4632,-1.29504, -1.34332,0.553725,-1.34332, -1.123697,0.553725,-1.531158, + -1.123697,0.553725,-1.531158, -1.08331,0.4632,-1.476127, -1.29504,0.4632,-1.29504, + -1.476127,0.4632,-1.08331, -1.531158,0.553725,-1.123697, -1.34332,0.553725,-1.34332, + -1.34332,0.553725,-1.34332, -1.29504,0.4632,-1.29504, -1.476127,0.4632,-1.08331, + -1.623068,0.4632,-0.844439, -1.683577,0.553725,-0.87592, -1.531158,0.553725,-1.123697, + -1.531158,0.553725,-1.123697, -1.476127,0.4632,-1.08331, -1.623068,0.4632,-0.844439, + -1.732362,0.4632,-0.581929, -1.796946,0.553725,-0.603624, -1.683577,0.553725,-0.87592, + -1.683577,0.553725,-0.87592, -1.623068,0.4632,-0.844439, -1.732362,0.4632,-0.581929, + -1.800507,0.4632,-0.299282, -1.867631,0.553725,-0.310439, -1.796946,0.553725,-0.603624, + -1.796946,0.553725,-0.603624, -1.732362,0.4632,-0.581929, -1.800507,0.4632,-0.299282, + -1.824,0.4632,0, -1.892,0.553725,0, -1.867631,0.553725,-0.310439, + -1.867631,0.553725,-0.310439, -1.800507,0.4632,-0.299282, -1.824,0.4632,0, + -0.28714,0.384375,-1.72746, -0.299282,0.4632,-1.800507, 0,0.4632,-1.824, + 0,0.4632,-1.824, 0,0.384375,-1.75, -0.28714,0.384375,-1.72746, + -0.55832,0.384375,-1.66208, -0.581929,0.4632,-1.732362, -0.299282,0.4632,-1.800507, + -0.299282,0.4632,-1.800507, -0.28714,0.384375,-1.72746, -0.55832,0.384375,-1.66208, + -0.81018,0.384375,-1.55722, -0.844439,0.4632,-1.623068, -0.581929,0.4632,-1.732362, + -0.581929,0.4632,-1.732362, -0.55832,0.384375,-1.66208, -0.81018,0.384375,-1.55722, + -1.03936,0.384375,-1.41624, -1.08331,0.4632,-1.476127, -0.844439,0.4632,-1.623068, + -0.844439,0.4632,-1.623068, -0.81018,0.384375,-1.55722, -1.03936,0.384375,-1.41624, + -1.2425,0.384375,-1.2425, -1.29504,0.4632,-1.29504, -1.08331,0.4632,-1.476127, + -1.08331,0.4632,-1.476127, -1.03936,0.384375,-1.41624, -1.2425,0.384375,-1.2425, + -1.41624,0.384375,-1.03936, -1.476127,0.4632,-1.08331, -1.29504,0.4632,-1.29504, + -1.29504,0.4632,-1.29504, -1.2425,0.384375,-1.2425, -1.41624,0.384375,-1.03936, + -1.55722,0.384375,-0.81018, -1.623068,0.4632,-0.844439, -1.476127,0.4632,-1.08331, + -1.476127,0.4632,-1.08331, -1.41624,0.384375,-1.03936, -1.55722,0.384375,-0.81018, + -1.66208,0.384375,-0.55832, -1.732362,0.4632,-0.581929, -1.623068,0.4632,-0.844439, + -1.623068,0.4632,-0.844439, -1.55722,0.384375,-0.81018, -1.66208,0.384375,-0.55832, + -1.72746,0.384375,-0.28714, -1.800507,0.4632,-0.299282, -1.732362,0.4632,-0.581929, + -1.732362,0.4632,-0.581929, -1.66208,0.384375,-0.55832, -1.72746,0.384375,-0.28714, + -1.75,0.384375,0, -1.824,0.4632,0, -1.800507,0.4632,-0.299282, + -1.800507,0.4632,-0.299282, -1.72746,0.384375,-0.28714, -1.75,0.384375,0, + -0.274998,0.3168,-1.654413, -0.28714,0.384375,-1.72746, 0,0.384375,-1.75, + 0,0.384375,-1.75, 0,0.3168,-1.676, -0.274998,0.3168,-1.654413, + -0.534711,0.3168,-1.591798, -0.55832,0.384375,-1.66208, -0.28714,0.384375,-1.72746, + -0.28714,0.384375,-1.72746, -0.274998,0.3168,-1.654413, -0.534711,0.3168,-1.591798, + -0.775921,0.3168,-1.491372, -0.81018,0.384375,-1.55722, -0.55832,0.384375,-1.66208, + -0.55832,0.384375,-1.66208, -0.534711,0.3168,-1.591798, -0.775921,0.3168,-1.491372, + -0.99541,0.3168,-1.356353, -1.03936,0.384375,-1.41624, -0.81018,0.384375,-1.55722, + -0.81018,0.384375,-1.55722, -0.775921,0.3168,-1.491372, -0.99541,0.3168,-1.356353, + -1.18996,0.3168,-1.18996, -1.2425,0.384375,-1.2425, -1.03936,0.384375,-1.41624, + -1.03936,0.384375,-1.41624, -0.99541,0.3168,-1.356353, -1.18996,0.3168,-1.18996, + -1.356353,0.3168,-0.99541, -1.41624,0.384375,-1.03936, -1.2425,0.384375,-1.2425, + -1.2425,0.384375,-1.2425, -1.18996,0.3168,-1.18996, -1.356353,0.3168,-0.99541, + -1.491372,0.3168,-0.775921, -1.55722,0.384375,-0.81018, -1.41624,0.384375,-1.03936, + -1.41624,0.384375,-1.03936, -1.356353,0.3168,-0.99541, -1.491372,0.3168,-0.775921, + -1.591798,0.3168,-0.534711, -1.66208,0.384375,-0.55832, -1.55722,0.384375,-0.81018, + -1.55722,0.384375,-0.81018, -1.491372,0.3168,-0.775921, -1.591798,0.3168,-0.534711, + -1.654413,0.3168,-0.274998, -1.72746,0.384375,-0.28714, -1.66208,0.384375,-0.55832, + -1.66208,0.384375,-0.55832, -1.591798,0.3168,-0.534711, -1.654413,0.3168,-0.274998, + -1.676,0.3168,0, -1.75,0.384375,0, -1.72746,0.384375,-0.28714, + -1.72746,0.384375,-0.28714, -1.654413,0.3168,-0.274998, -1.676,0.3168,0, + -0.263841,0.260025,-1.587289, -0.274998,0.3168,-1.654413, 0,0.3168,-1.676, + 0,0.3168,-1.676, 0,0.260025,-1.608, -0.263841,0.260025,-1.587289, + -0.513016,0.260025,-1.527214, -0.534711,0.3168,-1.591798, -0.274998,0.3168,-1.654413, + -0.274998,0.3168,-1.654413, -0.263841,0.260025,-1.587289, -0.513016,0.260025,-1.527214, + -0.74444,0.260025,-1.430863, -0.775921,0.3168,-1.491372, -0.534711,0.3168,-1.591798, + -0.534711,0.3168,-1.591798, -0.513016,0.260025,-1.527214, -0.74444,0.260025,-1.430863, + -0.955023,0.260025,-1.301322, -0.99541,0.3168,-1.356353, -0.775921,0.3168,-1.491372, + -0.775921,0.3168,-1.491372, -0.74444,0.260025,-1.430863, -0.955023,0.260025,-1.301322, + -1.14168,0.260025,-1.14168, -1.18996,0.3168,-1.18996, -0.99541,0.3168,-1.356353, + -0.99541,0.3168,-1.356353, -0.955023,0.260025,-1.301322, -1.14168,0.260025,-1.14168, + -1.301322,0.260025,-0.955023, -1.356353,0.3168,-0.99541, -1.18996,0.3168,-1.18996, + -1.18996,0.3168,-1.18996, -1.14168,0.260025,-1.14168, -1.301322,0.260025,-0.955023, + -1.430863,0.260025,-0.74444, -1.491372,0.3168,-0.775921, -1.356353,0.3168,-0.99541, + -1.356353,0.3168,-0.99541, -1.301322,0.260025,-0.955023, -1.430863,0.260025,-0.74444, + -1.527214,0.260025,-0.513016, -1.591798,0.3168,-0.534711, -1.491372,0.3168,-0.775921, + -1.491372,0.3168,-0.775921, -1.430863,0.260025,-0.74444, -1.527214,0.260025,-0.513016, + -1.587289,0.260025,-0.263841, -1.654413,0.3168,-0.274998, -1.591798,0.3168,-0.534711, + -1.591798,0.3168,-0.534711, -1.527214,0.260025,-0.513016, -1.587289,0.260025,-0.263841, + -1.608,0.260025,0, -1.676,0.3168,0, -1.654413,0.3168,-0.274998, + -1.654413,0.3168,-0.274998, -1.587289,0.260025,-0.263841, -1.608,0.260025,0, + -0.254652,0.2136,-1.53201, -0.263841,0.260025,-1.587289, 0,0.260025,-1.608, + 0,0.260025,-1.608, 0,0.2136,-1.552, -0.254652,0.2136,-1.53201, + -0.49515,0.2136,-1.474028, -0.513016,0.260025,-1.527214, -0.263841,0.260025,-1.587289, + -0.263841,0.260025,-1.587289, -0.254652,0.2136,-1.53201, -0.49515,0.2136,-1.474028, + -0.718514,0.2136,-1.381032, -0.74444,0.260025,-1.430863, -0.513016,0.260025,-1.527214, + -0.513016,0.260025,-1.527214, -0.49515,0.2136,-1.474028, -0.718514,0.2136,-1.381032, + -0.921764,0.2136,-1.256003, -0.955023,0.260025,-1.301322, -0.74444,0.260025,-1.430863, + -0.74444,0.260025,-1.430863, -0.718514,0.2136,-1.381032, -0.921764,0.2136,-1.256003, + -1.10192,0.2136,-1.10192, -1.14168,0.260025,-1.14168, -0.955023,0.260025,-1.301322, + -0.955023,0.260025,-1.301322, -0.921764,0.2136,-1.256003, -1.10192,0.2136,-1.10192, + -1.256003,0.2136,-0.921764, -1.301322,0.260025,-0.955023, -1.14168,0.260025,-1.14168, + -1.14168,0.260025,-1.14168, -1.10192,0.2136,-1.10192, -1.256003,0.2136,-0.921764, + -1.381032,0.2136,-0.718514, -1.430863,0.260025,-0.74444, -1.301322,0.260025,-0.955023, + -1.301322,0.260025,-0.955023, -1.256003,0.2136,-0.921764, -1.381032,0.2136,-0.718514, + -1.474028,0.2136,-0.49515, -1.527214,0.260025,-0.513016, -1.430863,0.260025,-0.74444, + -1.430863,0.260025,-0.74444, -1.381032,0.2136,-0.718514, -1.474028,0.2136,-0.49515, + -1.53201,0.2136,-0.254652, -1.587289,0.260025,-0.263841, -1.527214,0.260025,-0.513016, + -1.527214,0.260025,-0.513016, -1.474028,0.2136,-0.49515, -1.53201,0.2136,-0.254652, + -1.552,0.2136,0, -1.608,0.260025,0, -1.587289,0.260025,-0.263841, + -1.587289,0.260025,-0.263841, -1.53201,0.2136,-0.254652, -1.552,0.2136,0, + -0.248417,0.177075,-1.4945, -0.254652,0.2136,-1.53201, 0,0.2136,-1.552, + 0,0.2136,-1.552, 0,0.177075,-1.514, -0.248417,0.177075,-1.4945, + -0.483027,0.177075,-1.437937, -0.49515,0.2136,-1.474028, -0.254652,0.2136,-1.53201, + -0.254652,0.2136,-1.53201, -0.248417,0.177075,-1.4945, -0.483027,0.177075,-1.437937, + -0.700921,0.177075,-1.347218, -0.718514,0.2136,-1.381032, -0.49515,0.2136,-1.474028, + -0.49515,0.2136,-1.474028, -0.483027,0.177075,-1.437937, -0.700921,0.177075,-1.347218, + -0.899195,0.177075,-1.22525, -0.921764,0.2136,-1.256003, -0.718514,0.2136,-1.381032, + -0.718514,0.2136,-1.381032, -0.700921,0.177075,-1.347218, -0.899195,0.177075,-1.22525, + -1.07494,0.177075,-1.07494, -1.10192,0.2136,-1.10192, -0.921764,0.2136,-1.256003, + -0.921764,0.2136,-1.256003, -0.899195,0.177075,-1.22525, -1.07494,0.177075,-1.07494, + -1.22525,0.177075,-0.899195, -1.256003,0.2136,-0.921764, -1.10192,0.2136,-1.10192, + -1.10192,0.2136,-1.10192, -1.07494,0.177075,-1.07494, -1.22525,0.177075,-0.899195, + -1.347218,0.177075,-0.700921, -1.381032,0.2136,-0.718514, -1.256003,0.2136,-0.921764, + -1.256003,0.2136,-0.921764, -1.22525,0.177075,-0.899195, -1.347218,0.177075,-0.700921, + -1.437937,0.177075,-0.483027, -1.474028,0.2136,-0.49515, -1.381032,0.2136,-0.718514, + -1.381032,0.2136,-0.718514, -1.347218,0.177075,-0.700921, -1.437937,0.177075,-0.483027, + -1.4945,0.177075,-0.248417, -1.53201,0.2136,-0.254652, -1.474028,0.2136,-0.49515, + -1.474028,0.2136,-0.49515, -1.437937,0.177075,-0.483027, -1.4945,0.177075,-0.248417, + -1.514,0.177075,0, -1.552,0.2136,0, -1.53201,0.2136,-0.254652, + -1.53201,0.2136,-0.254652, -1.4945,0.177075,-0.248417, -1.514,0.177075,0, + -0.24612,0.15,-1.48068, -0.248417,0.177075,-1.4945, 0,0.177075,-1.514, + 0,0.177075,-1.514, 0,0.15,-1.5, -0.24612,0.15,-1.48068, + -0.47856,0.15,-1.42464, -0.483027,0.177075,-1.437937, -0.248417,0.177075,-1.4945, + -0.248417,0.177075,-1.4945, -0.24612,0.15,-1.48068, -0.47856,0.15,-1.42464, + -0.69444,0.15,-1.33476, -0.700921,0.177075,-1.347218, -0.483027,0.177075,-1.437937, + -0.483027,0.177075,-1.437937, -0.47856,0.15,-1.42464, -0.69444,0.15,-1.33476, + -0.89088,0.15,-1.21392, -0.899195,0.177075,-1.22525, -0.700921,0.177075,-1.347218, + -0.700921,0.177075,-1.347218, -0.69444,0.15,-1.33476, -0.89088,0.15,-1.21392, + -1.065,0.15,-1.065, -1.07494,0.177075,-1.07494, -0.899195,0.177075,-1.22525, + -0.899195,0.177075,-1.22525, -0.89088,0.15,-1.21392, -1.065,0.15,-1.065, + -1.21392,0.15,-0.89088, -1.22525,0.177075,-0.899195, -1.07494,0.177075,-1.07494, + -1.07494,0.177075,-1.07494, -1.065,0.15,-1.065, -1.21392,0.15,-0.89088, + -1.33476,0.15,-0.69444, -1.347218,0.177075,-0.700921, -1.22525,0.177075,-0.899195, + -1.22525,0.177075,-0.899195, -1.21392,0.15,-0.89088, -1.33476,0.15,-0.69444, + -1.42464,0.15,-0.47856, -1.437937,0.177075,-0.483027, -1.347218,0.177075,-0.700921, + -1.347218,0.177075,-0.700921, -1.33476,0.15,-0.69444, -1.42464,0.15,-0.47856, + -1.48068,0.15,-0.24612, -1.4945,0.177075,-0.248417, -1.437937,0.177075,-0.483027, + -1.437937,0.177075,-0.483027, -1.42464,0.15,-0.47856, -1.48068,0.15,-0.24612, + -1.5,0.15,0, -1.514,0.177075,0, -1.4945,0.177075,-0.248417, + -1.4945,0.177075,-0.248417, -1.48068,0.15,-0.24612, -1.5,0.15,0, + -1.96042,0.771675,0.325863, -1.97424,0.9,0.32816, -2,0.9,0, + -2,0.9,0, -1.986,0.771675,0, -1.96042,0.771675,0.325863, + -1.886223,0.771675,0.633613, -1.89952,0.9,0.63808, -1.97424,0.9,0.32816, + -1.97424,0.9,0.32816, -1.96042,0.771675,0.325863, -1.886223,0.771675,0.633613, + -1.767222,0.771675,0.919439, -1.77968,0.9,0.92592, -1.89952,0.9,0.63808, + -1.89952,0.9,0.63808, -1.886223,0.771675,0.633613, -1.767222,0.771675,0.919439, + -1.60723,0.771675,1.179525, -1.61856,0.9,1.18784, -1.77968,0.9,0.92592, + -1.77968,0.9,0.92592, -1.767222,0.771675,0.919439, -1.60723,0.771675,1.179525, + -1.41006,0.771675,1.41006, -1.42,0.9,1.42, -1.61856,0.9,1.18784, + -1.61856,0.9,1.18784, -1.60723,0.771675,1.179525, -1.41006,0.771675,1.41006, + -1.179525,0.771675,1.60723, -1.18784,0.9,1.61856, -1.42,0.9,1.42, + -1.42,0.9,1.42, -1.41006,0.771675,1.41006, -1.179525,0.771675,1.60723, + -0.919439,0.771675,1.767222, -0.92592,0.9,1.77968, -1.18784,0.9,1.61856, + -1.18784,0.9,1.61856, -1.179525,0.771675,1.60723, -0.919439,0.771675,1.767222, + -0.633613,0.771675,1.886223, -0.63808,0.9,1.89952, -0.92592,0.9,1.77968, + -0.92592,0.9,1.77968, -0.919439,0.771675,1.767222, -0.633613,0.771675,1.886223, + -0.325863,0.771675,1.96042, -0.32816,0.9,1.97424, -0.63808,0.9,1.89952, + -0.63808,0.9,1.89952, -0.633613,0.771675,1.886223, -0.325863,0.771675,1.96042, + 0,0.771675,1.986, 0,0.9,2, -0.32816,0.9,1.97424, + -0.32816,0.9,1.97424, -0.325863,0.771675,1.96042, 0,0.771675,1.986, + -1.92291,0.6564,0.319628, -1.96042,0.771675,0.325863, -1.986,0.771675,0, + -1.986,0.771675,0, -1.948,0.6564,0, -1.92291,0.6564,0.319628, + -1.850132,0.6564,0.62149, -1.886223,0.771675,0.633613, -1.96042,0.771675,0.325863, + -1.96042,0.771675,0.325863, -1.92291,0.6564,0.319628, -1.850132,0.6564,0.62149, + -1.733408,0.6564,0.901846, -1.767222,0.771675,0.919439, -1.886223,0.771675,0.633613, + -1.886223,0.771675,0.633613, -1.850132,0.6564,0.62149, -1.733408,0.6564,0.901846, + -1.576477,0.6564,1.156956, -1.60723,0.771675,1.179525, -1.767222,0.771675,0.919439, + -1.767222,0.771675,0.919439, -1.733408,0.6564,0.901846, -1.576477,0.6564,1.156956, + -1.38308,0.6564,1.38308, -1.41006,0.771675,1.41006, -1.60723,0.771675,1.179525, + -1.60723,0.771675,1.179525, -1.576477,0.6564,1.156956, -1.38308,0.6564,1.38308, + -1.156956,0.6564,1.576477, -1.179525,0.771675,1.60723, -1.41006,0.771675,1.41006, + -1.41006,0.771675,1.41006, -1.38308,0.6564,1.38308, -1.156956,0.6564,1.576477, + -0.901846,0.6564,1.733408, -0.919439,0.771675,1.767222, -1.179525,0.771675,1.60723, + -1.179525,0.771675,1.60723, -1.156956,0.6564,1.576477, -0.901846,0.6564,1.733408, + -0.62149,0.6564,1.850132, -0.633613,0.771675,1.886223, -0.919439,0.771675,1.767222, + -0.919439,0.771675,1.767222, -0.901846,0.6564,1.733408, -0.62149,0.6564,1.850132, + -0.319628,0.6564,1.92291, -0.325863,0.771675,1.96042, -0.633613,0.771675,1.886223, + -0.633613,0.771675,1.886223, -0.62149,0.6564,1.850132, -0.319628,0.6564,1.92291, + 0,0.6564,1.948, 0,0.771675,1.986, -0.325863,0.771675,1.96042, + -0.325863,0.771675,1.96042, -0.319628,0.6564,1.92291, 0,0.6564,1.948, + -1.867631,0.553725,0.310439, -1.92291,0.6564,0.319628, -1.948,0.6564,0, + -1.948,0.6564,0, -1.892,0.553725,0, -1.867631,0.553725,0.310439, + -1.796946,0.553725,0.603624, -1.850132,0.6564,0.62149, -1.92291,0.6564,0.319628, + -1.92291,0.6564,0.319628, -1.867631,0.553725,0.310439, -1.796946,0.553725,0.603624, + -1.683577,0.553725,0.87592, -1.733408,0.6564,0.901846, -1.850132,0.6564,0.62149, + -1.850132,0.6564,0.62149, -1.796946,0.553725,0.603624, -1.683577,0.553725,0.87592, + -1.531158,0.553725,1.123697, -1.576477,0.6564,1.156956, -1.733408,0.6564,0.901846, + -1.733408,0.6564,0.901846, -1.683577,0.553725,0.87592, -1.531158,0.553725,1.123697, + -1.34332,0.553725,1.34332, -1.38308,0.6564,1.38308, -1.576477,0.6564,1.156956, + -1.576477,0.6564,1.156956, -1.531158,0.553725,1.123697, -1.34332,0.553725,1.34332, + -1.123697,0.553725,1.531158, -1.156956,0.6564,1.576477, -1.38308,0.6564,1.38308, + -1.38308,0.6564,1.38308, -1.34332,0.553725,1.34332, -1.123697,0.553725,1.531158, + -0.87592,0.553725,1.683577, -0.901846,0.6564,1.733408, -1.156956,0.6564,1.576477, + -1.156956,0.6564,1.576477, -1.123697,0.553725,1.531158, -0.87592,0.553725,1.683577, + -0.603624,0.553725,1.796946, -0.62149,0.6564,1.850132, -0.901846,0.6564,1.733408, + -0.901846,0.6564,1.733408, -0.87592,0.553725,1.683577, -0.603624,0.553725,1.796946, + -0.310439,0.553725,1.867631, -0.319628,0.6564,1.92291, -0.62149,0.6564,1.850132, + -0.62149,0.6564,1.850132, -0.603624,0.553725,1.796946, -0.310439,0.553725,1.867631, + 0,0.553725,1.892, 0,0.6564,1.948, -0.319628,0.6564,1.92291, + -0.319628,0.6564,1.92291, -0.310439,0.553725,1.867631, 0,0.553725,1.892, + -1.800507,0.4632,0.299282, -1.867631,0.553725,0.310439, -1.892,0.553725,0, + -1.892,0.553725,0, -1.824,0.4632,0, -1.800507,0.4632,0.299282, + -1.732362,0.4632,0.581929, -1.796946,0.553725,0.603624, -1.867631,0.553725,0.310439, + -1.867631,0.553725,0.310439, -1.800507,0.4632,0.299282, -1.732362,0.4632,0.581929, + -1.623068,0.4632,0.844439, -1.683577,0.553725,0.87592, -1.796946,0.553725,0.603624, + -1.796946,0.553725,0.603624, -1.732362,0.4632,0.581929, -1.623068,0.4632,0.844439, + -1.476127,0.4632,1.08331, -1.531158,0.553725,1.123697, -1.683577,0.553725,0.87592, + -1.683577,0.553725,0.87592, -1.623068,0.4632,0.844439, -1.476127,0.4632,1.08331, + -1.29504,0.4632,1.29504, -1.34332,0.553725,1.34332, -1.531158,0.553725,1.123697, + -1.531158,0.553725,1.123697, -1.476127,0.4632,1.08331, -1.29504,0.4632,1.29504, + -1.08331,0.4632,1.476127, -1.123697,0.553725,1.531158, -1.34332,0.553725,1.34332, + -1.34332,0.553725,1.34332, -1.29504,0.4632,1.29504, -1.08331,0.4632,1.476127, + -0.844439,0.4632,1.623068, -0.87592,0.553725,1.683577, -1.123697,0.553725,1.531158, + -1.123697,0.553725,1.531158, -1.08331,0.4632,1.476127, -0.844439,0.4632,1.623068, + -0.581929,0.4632,1.732362, -0.603624,0.553725,1.796946, -0.87592,0.553725,1.683577, + -0.87592,0.553725,1.683577, -0.844439,0.4632,1.623068, -0.581929,0.4632,1.732362, + -0.299282,0.4632,1.800507, -0.310439,0.553725,1.867631, -0.603624,0.553725,1.796946, + -0.603624,0.553725,1.796946, -0.581929,0.4632,1.732362, -0.299282,0.4632,1.800507, + 0,0.4632,1.824, 0,0.553725,1.892, -0.310439,0.553725,1.867631, + -0.310439,0.553725,1.867631, -0.299282,0.4632,1.800507, 0,0.4632,1.824, + -1.72746,0.384375,0.28714, -1.800507,0.4632,0.299282, -1.824,0.4632,0, + -1.824,0.4632,0, -1.75,0.384375,0, -1.72746,0.384375,0.28714, + -1.66208,0.384375,0.55832, -1.732362,0.4632,0.581929, -1.800507,0.4632,0.299282, + -1.800507,0.4632,0.299282, -1.72746,0.384375,0.28714, -1.66208,0.384375,0.55832, + -1.55722,0.384375,0.81018, -1.623068,0.4632,0.844439, -1.732362,0.4632,0.581929, + -1.732362,0.4632,0.581929, -1.66208,0.384375,0.55832, -1.55722,0.384375,0.81018, + -1.41624,0.384375,1.03936, -1.476127,0.4632,1.08331, -1.623068,0.4632,0.844439, + -1.623068,0.4632,0.844439, -1.55722,0.384375,0.81018, -1.41624,0.384375,1.03936, + -1.2425,0.384375,1.2425, -1.29504,0.4632,1.29504, -1.476127,0.4632,1.08331, + -1.476127,0.4632,1.08331, -1.41624,0.384375,1.03936, -1.2425,0.384375,1.2425, + -1.03936,0.384375,1.41624, -1.08331,0.4632,1.476127, -1.29504,0.4632,1.29504, + -1.29504,0.4632,1.29504, -1.2425,0.384375,1.2425, -1.03936,0.384375,1.41624, + -0.81018,0.384375,1.55722, -0.844439,0.4632,1.623068, -1.08331,0.4632,1.476127, + -1.08331,0.4632,1.476127, -1.03936,0.384375,1.41624, -0.81018,0.384375,1.55722, + -0.55832,0.384375,1.66208, -0.581929,0.4632,1.732362, -0.844439,0.4632,1.623068, + -0.844439,0.4632,1.623068, -0.81018,0.384375,1.55722, -0.55832,0.384375,1.66208, + -0.28714,0.384375,1.72746, -0.299282,0.4632,1.800507, -0.581929,0.4632,1.732362, + -0.581929,0.4632,1.732362, -0.55832,0.384375,1.66208, -0.28714,0.384375,1.72746, + 0,0.384375,1.75, 0,0.4632,1.824, -0.299282,0.4632,1.800507, + -0.299282,0.4632,1.800507, -0.28714,0.384375,1.72746, 0,0.384375,1.75, + -1.654413,0.3168,0.274998, -1.72746,0.384375,0.28714, -1.75,0.384375,0, + -1.75,0.384375,0, -1.676,0.3168,0, -1.654413,0.3168,0.274998, + -1.591798,0.3168,0.534711, -1.66208,0.384375,0.55832, -1.72746,0.384375,0.28714, + -1.72746,0.384375,0.28714, -1.654413,0.3168,0.274998, -1.591798,0.3168,0.534711, + -1.491372,0.3168,0.775921, -1.55722,0.384375,0.81018, -1.66208,0.384375,0.55832, + -1.66208,0.384375,0.55832, -1.591798,0.3168,0.534711, -1.491372,0.3168,0.775921, + -1.356353,0.3168,0.99541, -1.41624,0.384375,1.03936, -1.55722,0.384375,0.81018, + -1.55722,0.384375,0.81018, -1.491372,0.3168,0.775921, -1.356353,0.3168,0.99541, + -1.18996,0.3168,1.18996, -1.2425,0.384375,1.2425, -1.41624,0.384375,1.03936, + -1.41624,0.384375,1.03936, -1.356353,0.3168,0.99541, -1.18996,0.3168,1.18996, + -0.99541,0.3168,1.356353, -1.03936,0.384375,1.41624, -1.2425,0.384375,1.2425, + -1.2425,0.384375,1.2425, -1.18996,0.3168,1.18996, -0.99541,0.3168,1.356353, + -0.775921,0.3168,1.491372, -0.81018,0.384375,1.55722, -1.03936,0.384375,1.41624, + -1.03936,0.384375,1.41624, -0.99541,0.3168,1.356353, -0.775921,0.3168,1.491372, + -0.534711,0.3168,1.591798, -0.55832,0.384375,1.66208, -0.81018,0.384375,1.55722, + -0.81018,0.384375,1.55722, -0.775921,0.3168,1.491372, -0.534711,0.3168,1.591798, + -0.274998,0.3168,1.654413, -0.28714,0.384375,1.72746, -0.55832,0.384375,1.66208, + -0.55832,0.384375,1.66208, -0.534711,0.3168,1.591798, -0.274998,0.3168,1.654413, + 0,0.3168,1.676, 0,0.384375,1.75, -0.28714,0.384375,1.72746, + -0.28714,0.384375,1.72746, -0.274998,0.3168,1.654413, 0,0.3168,1.676, + -1.587289,0.260025,0.263841, -1.654413,0.3168,0.274998, -1.676,0.3168,0, + -1.676,0.3168,0, -1.608,0.260025,0, -1.587289,0.260025,0.263841, + -1.527214,0.260025,0.513016, -1.591798,0.3168,0.534711, -1.654413,0.3168,0.274998, + -1.654413,0.3168,0.274998, -1.587289,0.260025,0.263841, -1.527214,0.260025,0.513016, + -1.430863,0.260025,0.74444, -1.491372,0.3168,0.775921, -1.591798,0.3168,0.534711, + -1.591798,0.3168,0.534711, -1.527214,0.260025,0.513016, -1.430863,0.260025,0.74444, + -1.301322,0.260025,0.955023, -1.356353,0.3168,0.99541, -1.491372,0.3168,0.775921, + -1.491372,0.3168,0.775921, -1.430863,0.260025,0.74444, -1.301322,0.260025,0.955023, + -1.14168,0.260025,1.14168, -1.18996,0.3168,1.18996, -1.356353,0.3168,0.99541, + -1.356353,0.3168,0.99541, -1.301322,0.260025,0.955023, -1.14168,0.260025,1.14168, + -0.955023,0.260025,1.301322, -0.99541,0.3168,1.356353, -1.18996,0.3168,1.18996, + -1.18996,0.3168,1.18996, -1.14168,0.260025,1.14168, -0.955023,0.260025,1.301322, + -0.74444,0.260025,1.430863, -0.775921,0.3168,1.491372, -0.99541,0.3168,1.356353, + -0.99541,0.3168,1.356353, -0.955023,0.260025,1.301322, -0.74444,0.260025,1.430863, + -0.513016,0.260025,1.527214, -0.534711,0.3168,1.591798, -0.775921,0.3168,1.491372, + -0.775921,0.3168,1.491372, -0.74444,0.260025,1.430863, -0.513016,0.260025,1.527214, + -0.263841,0.260025,1.587289, -0.274998,0.3168,1.654413, -0.534711,0.3168,1.591798, + -0.534711,0.3168,1.591798, -0.513016,0.260025,1.527214, -0.263841,0.260025,1.587289, + 0,0.260025,1.608, 0,0.3168,1.676, -0.274998,0.3168,1.654413, + -0.274998,0.3168,1.654413, -0.263841,0.260025,1.587289, 0,0.260025,1.608, + -1.53201,0.2136,0.254652, -1.587289,0.260025,0.263841, -1.608,0.260025,0, + -1.608,0.260025,0, -1.552,0.2136,0, -1.53201,0.2136,0.254652, + -1.474028,0.2136,0.49515, -1.527214,0.260025,0.513016, -1.587289,0.260025,0.263841, + -1.587289,0.260025,0.263841, -1.53201,0.2136,0.254652, -1.474028,0.2136,0.49515, + -1.381032,0.2136,0.718514, -1.430863,0.260025,0.74444, -1.527214,0.260025,0.513016, + -1.527214,0.260025,0.513016, -1.474028,0.2136,0.49515, -1.381032,0.2136,0.718514, + -1.256003,0.2136,0.921764, -1.301322,0.260025,0.955023, -1.430863,0.260025,0.74444, + -1.430863,0.260025,0.74444, -1.381032,0.2136,0.718514, -1.256003,0.2136,0.921764, + -1.10192,0.2136,1.10192, -1.14168,0.260025,1.14168, -1.301322,0.260025,0.955023, + -1.301322,0.260025,0.955023, -1.256003,0.2136,0.921764, -1.10192,0.2136,1.10192, + -0.921764,0.2136,1.256003, -0.955023,0.260025,1.301322, -1.14168,0.260025,1.14168, + -1.14168,0.260025,1.14168, -1.10192,0.2136,1.10192, -0.921764,0.2136,1.256003, + -0.718514,0.2136,1.381032, -0.74444,0.260025,1.430863, -0.955023,0.260025,1.301322, + -0.955023,0.260025,1.301322, -0.921764,0.2136,1.256003, -0.718514,0.2136,1.381032, + -0.49515,0.2136,1.474028, -0.513016,0.260025,1.527214, -0.74444,0.260025,1.430863, + -0.74444,0.260025,1.430863, -0.718514,0.2136,1.381032, -0.49515,0.2136,1.474028, + -0.254652,0.2136,1.53201, -0.263841,0.260025,1.587289, -0.513016,0.260025,1.527214, + -0.513016,0.260025,1.527214, -0.49515,0.2136,1.474028, -0.254652,0.2136,1.53201, + 0,0.2136,1.552, 0,0.260025,1.608, -0.263841,0.260025,1.587289, + -0.263841,0.260025,1.587289, -0.254652,0.2136,1.53201, 0,0.2136,1.552, + -1.4945,0.177075,0.248417, -1.53201,0.2136,0.254652, -1.552,0.2136,0, + -1.552,0.2136,0, -1.514,0.177075,0, -1.4945,0.177075,0.248417, + -1.437937,0.177075,0.483027, -1.474028,0.2136,0.49515, -1.53201,0.2136,0.254652, + -1.53201,0.2136,0.254652, -1.4945,0.177075,0.248417, -1.437937,0.177075,0.483027, + -1.347218,0.177075,0.700921, -1.381032,0.2136,0.718514, -1.474028,0.2136,0.49515, + -1.474028,0.2136,0.49515, -1.437937,0.177075,0.483027, -1.347218,0.177075,0.700921, + -1.22525,0.177075,0.899195, -1.256003,0.2136,0.921764, -1.381032,0.2136,0.718514, + -1.381032,0.2136,0.718514, -1.347218,0.177075,0.700921, -1.22525,0.177075,0.899195, + -1.07494,0.177075,1.07494, -1.10192,0.2136,1.10192, -1.256003,0.2136,0.921764, + -1.256003,0.2136,0.921764, -1.22525,0.177075,0.899195, -1.07494,0.177075,1.07494, + -0.899195,0.177075,1.22525, -0.921764,0.2136,1.256003, -1.10192,0.2136,1.10192, + -1.10192,0.2136,1.10192, -1.07494,0.177075,1.07494, -0.899195,0.177075,1.22525, + -0.700921,0.177075,1.347218, -0.718514,0.2136,1.381032, -0.921764,0.2136,1.256003, + -0.921764,0.2136,1.256003, -0.899195,0.177075,1.22525, -0.700921,0.177075,1.347218, + -0.483027,0.177075,1.437937, -0.49515,0.2136,1.474028, -0.718514,0.2136,1.381032, + -0.718514,0.2136,1.381032, -0.700921,0.177075,1.347218, -0.483027,0.177075,1.437937, + -0.248417,0.177075,1.4945, -0.254652,0.2136,1.53201, -0.49515,0.2136,1.474028, + -0.49515,0.2136,1.474028, -0.483027,0.177075,1.437937, -0.248417,0.177075,1.4945, + 0,0.177075,1.514, 0,0.2136,1.552, -0.254652,0.2136,1.53201, + -0.254652,0.2136,1.53201, -0.248417,0.177075,1.4945, 0,0.177075,1.514, + -1.48068,0.15,0.24612, -1.4945,0.177075,0.248417, -1.514,0.177075,0, + -1.514,0.177075,0, -1.5,0.15,0, -1.48068,0.15,0.24612, + -1.42464,0.15,0.47856, -1.437937,0.177075,0.483027, -1.4945,0.177075,0.248417, + -1.4945,0.177075,0.248417, -1.48068,0.15,0.24612, -1.42464,0.15,0.47856, + -1.33476,0.15,0.69444, -1.347218,0.177075,0.700921, -1.437937,0.177075,0.483027, + -1.437937,0.177075,0.483027, -1.42464,0.15,0.47856, -1.33476,0.15,0.69444, + -1.21392,0.15,0.89088, -1.22525,0.177075,0.899195, -1.347218,0.177075,0.700921, + -1.347218,0.177075,0.700921, -1.33476,0.15,0.69444, -1.21392,0.15,0.89088, + -1.065,0.15,1.065, -1.07494,0.177075,1.07494, -1.22525,0.177075,0.899195, + -1.22525,0.177075,0.899195, -1.21392,0.15,0.89088, -1.065,0.15,1.065, + -0.89088,0.15,1.21392, -0.899195,0.177075,1.22525, -1.07494,0.177075,1.07494, + -1.07494,0.177075,1.07494, -1.065,0.15,1.065, -0.89088,0.15,1.21392, + -0.69444,0.15,1.33476, -0.700921,0.177075,1.347218, -0.899195,0.177075,1.22525, + -0.899195,0.177075,1.22525, -0.89088,0.15,1.21392, -0.69444,0.15,1.33476, + -0.47856,0.15,1.42464, -0.483027,0.177075,1.437937, -0.700921,0.177075,1.347218, + -0.700921,0.177075,1.347218, -0.69444,0.15,1.33476, -0.47856,0.15,1.42464, + -0.24612,0.15,1.48068, -0.248417,0.177075,1.4945, -0.483027,0.177075,1.437937, + -0.483027,0.177075,1.437937, -0.47856,0.15,1.42464, -0.24612,0.15,1.48068, + 0,0.15,1.5, 0,0.177075,1.514, -0.248417,0.177075,1.4945, + -0.248417,0.177075,1.4945, -0.24612,0.15,1.48068, 0,0.15,1.5, + 0.325863,0.771675,1.96042, 0.32816,0.9,1.97424, 0,0.9,2, + 0,0.9,2, 0,0.771675,1.986, 0.325863,0.771675,1.96042, + 0.633613,0.771675,1.886223, 0.63808,0.9,1.89952, 0.32816,0.9,1.97424, + 0.32816,0.9,1.97424, 0.325863,0.771675,1.96042, 0.633613,0.771675,1.886223, + 0.919439,0.771675,1.767222, 0.92592,0.9,1.77968, 0.63808,0.9,1.89952, + 0.63808,0.9,1.89952, 0.633613,0.771675,1.886223, 0.919439,0.771675,1.767222, + 1.179525,0.771675,1.60723, 1.18784,0.9,1.61856, 0.92592,0.9,1.77968, + 0.92592,0.9,1.77968, 0.919439,0.771675,1.767222, 1.179525,0.771675,1.60723, + 1.41006,0.771675,1.41006, 1.42,0.9,1.42, 1.18784,0.9,1.61856, + 1.18784,0.9,1.61856, 1.179525,0.771675,1.60723, 1.41006,0.771675,1.41006, + 1.60723,0.771675,1.179525, 1.61856,0.9,1.18784, 1.42,0.9,1.42, + 1.42,0.9,1.42, 1.41006,0.771675,1.41006, 1.60723,0.771675,1.179525, + 1.767222,0.771675,0.919439, 1.77968,0.9,0.92592, 1.61856,0.9,1.18784, + 1.61856,0.9,1.18784, 1.60723,0.771675,1.179525, 1.767222,0.771675,0.919439, + 1.886223,0.771675,0.633613, 1.89952,0.9,0.63808, 1.77968,0.9,0.92592, + 1.77968,0.9,0.92592, 1.767222,0.771675,0.919439, 1.886223,0.771675,0.633613, + 1.96042,0.771675,0.325863, 1.97424,0.9,0.32816, 1.89952,0.9,0.63808, + 1.89952,0.9,0.63808, 1.886223,0.771675,0.633613, 1.96042,0.771675,0.325863, + 1.986,0.771675,0, 2,0.9,0, 1.97424,0.9,0.32816, + 1.97424,0.9,0.32816, 1.96042,0.771675,0.325863, 1.986,0.771675,0, + 0.319628,0.6564,1.92291, 0.325863,0.771675,1.96042, 0,0.771675,1.986, + 0,0.771675,1.986, 0,0.6564,1.948, 0.319628,0.6564,1.92291, + 0.62149,0.6564,1.850132, 0.633613,0.771675,1.886223, 0.325863,0.771675,1.96042, + 0.325863,0.771675,1.96042, 0.319628,0.6564,1.92291, 0.62149,0.6564,1.850132, + 0.901846,0.6564,1.733408, 0.919439,0.771675,1.767222, 0.633613,0.771675,1.886223, + 0.633613,0.771675,1.886223, 0.62149,0.6564,1.850132, 0.901846,0.6564,1.733408, + 1.156956,0.6564,1.576477, 1.179525,0.771675,1.60723, 0.919439,0.771675,1.767222, + 0.919439,0.771675,1.767222, 0.901846,0.6564,1.733408, 1.156956,0.6564,1.576477, + 1.38308,0.6564,1.38308, 1.41006,0.771675,1.41006, 1.179525,0.771675,1.60723, + 1.179525,0.771675,1.60723, 1.156956,0.6564,1.576477, 1.38308,0.6564,1.38308, + 1.576477,0.6564,1.156956, 1.60723,0.771675,1.179525, 1.41006,0.771675,1.41006, + 1.41006,0.771675,1.41006, 1.38308,0.6564,1.38308, 1.576477,0.6564,1.156956, + 1.733408,0.6564,0.901846, 1.767222,0.771675,0.919439, 1.60723,0.771675,1.179525, + 1.60723,0.771675,1.179525, 1.576477,0.6564,1.156956, 1.733408,0.6564,0.901846, + 1.850132,0.6564,0.62149, 1.886223,0.771675,0.633613, 1.767222,0.771675,0.919439, + 1.767222,0.771675,0.919439, 1.733408,0.6564,0.901846, 1.850132,0.6564,0.62149, + 1.92291,0.6564,0.319628, 1.96042,0.771675,0.325863, 1.886223,0.771675,0.633613, + 1.886223,0.771675,0.633613, 1.850132,0.6564,0.62149, 1.92291,0.6564,0.319628, + 1.948,0.6564,0, 1.986,0.771675,0, 1.96042,0.771675,0.325863, + 1.96042,0.771675,0.325863, 1.92291,0.6564,0.319628, 1.948,0.6564,0, + 0.310439,0.553725,1.867631, 0.319628,0.6564,1.92291, 0,0.6564,1.948, + 0,0.6564,1.948, 0,0.553725,1.892, 0.310439,0.553725,1.867631, + 0.603624,0.553725,1.796946, 0.62149,0.6564,1.850132, 0.319628,0.6564,1.92291, + 0.319628,0.6564,1.92291, 0.310439,0.553725,1.867631, 0.603624,0.553725,1.796946, + 0.87592,0.553725,1.683577, 0.901846,0.6564,1.733408, 0.62149,0.6564,1.850132, + 0.62149,0.6564,1.850132, 0.603624,0.553725,1.796946, 0.87592,0.553725,1.683577, + 1.123697,0.553725,1.531158, 1.156956,0.6564,1.576477, 0.901846,0.6564,1.733408, + 0.901846,0.6564,1.733408, 0.87592,0.553725,1.683577, 1.123697,0.553725,1.531158, + 1.34332,0.553725,1.34332, 1.38308,0.6564,1.38308, 1.156956,0.6564,1.576477, + 1.156956,0.6564,1.576477, 1.123697,0.553725,1.531158, 1.34332,0.553725,1.34332, + 1.531158,0.553725,1.123697, 1.576477,0.6564,1.156956, 1.38308,0.6564,1.38308, + 1.38308,0.6564,1.38308, 1.34332,0.553725,1.34332, 1.531158,0.553725,1.123697, + 1.683577,0.553725,0.87592, 1.733408,0.6564,0.901846, 1.576477,0.6564,1.156956, + 1.576477,0.6564,1.156956, 1.531158,0.553725,1.123697, 1.683577,0.553725,0.87592, + 1.796946,0.553725,0.603624, 1.850132,0.6564,0.62149, 1.733408,0.6564,0.901846, + 1.733408,0.6564,0.901846, 1.683577,0.553725,0.87592, 1.796946,0.553725,0.603624, + 1.867631,0.553725,0.310439, 1.92291,0.6564,0.319628, 1.850132,0.6564,0.62149, + 1.850132,0.6564,0.62149, 1.796946,0.553725,0.603624, 1.867631,0.553725,0.310439, + 1.892,0.553725,0, 1.948,0.6564,0, 1.92291,0.6564,0.319628, + 1.92291,0.6564,0.319628, 1.867631,0.553725,0.310439, 1.892,0.553725,0, + 0.299282,0.4632,1.800507, 0.310439,0.553725,1.867631, 0,0.553725,1.892, + 0,0.553725,1.892, 0,0.4632,1.824, 0.299282,0.4632,1.800507, + 0.581929,0.4632,1.732362, 0.603624,0.553725,1.796946, 0.310439,0.553725,1.867631, + 0.310439,0.553725,1.867631, 0.299282,0.4632,1.800507, 0.581929,0.4632,1.732362, + 0.844439,0.4632,1.623068, 0.87592,0.553725,1.683577, 0.603624,0.553725,1.796946, + 0.603624,0.553725,1.796946, 0.581929,0.4632,1.732362, 0.844439,0.4632,1.623068, + 1.08331,0.4632,1.476127, 1.123697,0.553725,1.531158, 0.87592,0.553725,1.683577, + 0.87592,0.553725,1.683577, 0.844439,0.4632,1.623068, 1.08331,0.4632,1.476127, + 1.29504,0.4632,1.29504, 1.34332,0.553725,1.34332, 1.123697,0.553725,1.531158, + 1.123697,0.553725,1.531158, 1.08331,0.4632,1.476127, 1.29504,0.4632,1.29504, + 1.476127,0.4632,1.08331, 1.531158,0.553725,1.123697, 1.34332,0.553725,1.34332, + 1.34332,0.553725,1.34332, 1.29504,0.4632,1.29504, 1.476127,0.4632,1.08331, + 1.623068,0.4632,0.844439, 1.683577,0.553725,0.87592, 1.531158,0.553725,1.123697, + 1.531158,0.553725,1.123697, 1.476127,0.4632,1.08331, 1.623068,0.4632,0.844439, + 1.732362,0.4632,0.581929, 1.796946,0.553725,0.603624, 1.683577,0.553725,0.87592, + 1.683577,0.553725,0.87592, 1.623068,0.4632,0.844439, 1.732362,0.4632,0.581929, + 1.800507,0.4632,0.299282, 1.867631,0.553725,0.310439, 1.796946,0.553725,0.603624, + 1.796946,0.553725,0.603624, 1.732362,0.4632,0.581929, 1.800507,0.4632,0.299282, + 1.824,0.4632,0, 1.892,0.553725,0, 1.867631,0.553725,0.310439, + 1.867631,0.553725,0.310439, 1.800507,0.4632,0.299282, 1.824,0.4632,0, + 0.28714,0.384375,1.72746, 0.299282,0.4632,1.800507, 0,0.4632,1.824, + 0,0.4632,1.824, 0,0.384375,1.75, 0.28714,0.384375,1.72746, + 0.55832,0.384375,1.66208, 0.581929,0.4632,1.732362, 0.299282,0.4632,1.800507, + 0.299282,0.4632,1.800507, 0.28714,0.384375,1.72746, 0.55832,0.384375,1.66208, + 0.81018,0.384375,1.55722, 0.844439,0.4632,1.623068, 0.581929,0.4632,1.732362, + 0.581929,0.4632,1.732362, 0.55832,0.384375,1.66208, 0.81018,0.384375,1.55722, + 1.03936,0.384375,1.41624, 1.08331,0.4632,1.476127, 0.844439,0.4632,1.623068, + 0.844439,0.4632,1.623068, 0.81018,0.384375,1.55722, 1.03936,0.384375,1.41624, + 1.2425,0.384375,1.2425, 1.29504,0.4632,1.29504, 1.08331,0.4632,1.476127, + 1.08331,0.4632,1.476127, 1.03936,0.384375,1.41624, 1.2425,0.384375,1.2425, + 1.41624,0.384375,1.03936, 1.476127,0.4632,1.08331, 1.29504,0.4632,1.29504, + 1.29504,0.4632,1.29504, 1.2425,0.384375,1.2425, 1.41624,0.384375,1.03936, + 1.55722,0.384375,0.81018, 1.623068,0.4632,0.844439, 1.476127,0.4632,1.08331, + 1.476127,0.4632,1.08331, 1.41624,0.384375,1.03936, 1.55722,0.384375,0.81018, + 1.66208,0.384375,0.55832, 1.732362,0.4632,0.581929, 1.623068,0.4632,0.844439, + 1.623068,0.4632,0.844439, 1.55722,0.384375,0.81018, 1.66208,0.384375,0.55832, + 1.72746,0.384375,0.28714, 1.800507,0.4632,0.299282, 1.732362,0.4632,0.581929, + 1.732362,0.4632,0.581929, 1.66208,0.384375,0.55832, 1.72746,0.384375,0.28714, + 1.75,0.384375,0, 1.824,0.4632,0, 1.800507,0.4632,0.299282, + 1.800507,0.4632,0.299282, 1.72746,0.384375,0.28714, 1.75,0.384375,0, + 0.274998,0.3168,1.654413, 0.28714,0.384375,1.72746, 0,0.384375,1.75, + 0,0.384375,1.75, 0,0.3168,1.676, 0.274998,0.3168,1.654413, + 0.534711,0.3168,1.591798, 0.55832,0.384375,1.66208, 0.28714,0.384375,1.72746, + 0.28714,0.384375,1.72746, 0.274998,0.3168,1.654413, 0.534711,0.3168,1.591798, + 0.775921,0.3168,1.491372, 0.81018,0.384375,1.55722, 0.55832,0.384375,1.66208, + 0.55832,0.384375,1.66208, 0.534711,0.3168,1.591798, 0.775921,0.3168,1.491372, + 0.99541,0.3168,1.356353, 1.03936,0.384375,1.41624, 0.81018,0.384375,1.55722, + 0.81018,0.384375,1.55722, 0.775921,0.3168,1.491372, 0.99541,0.3168,1.356353, + 1.18996,0.3168,1.18996, 1.2425,0.384375,1.2425, 1.03936,0.384375,1.41624, + 1.03936,0.384375,1.41624, 0.99541,0.3168,1.356353, 1.18996,0.3168,1.18996, + 1.356353,0.3168,0.99541, 1.41624,0.384375,1.03936, 1.2425,0.384375,1.2425, + 1.2425,0.384375,1.2425, 1.18996,0.3168,1.18996, 1.356353,0.3168,0.99541, + 1.491372,0.3168,0.775921, 1.55722,0.384375,0.81018, 1.41624,0.384375,1.03936, + 1.41624,0.384375,1.03936, 1.356353,0.3168,0.99541, 1.491372,0.3168,0.775921, + 1.591798,0.3168,0.534711, 1.66208,0.384375,0.55832, 1.55722,0.384375,0.81018, + 1.55722,0.384375,0.81018, 1.491372,0.3168,0.775921, 1.591798,0.3168,0.534711, + 1.654413,0.3168,0.274998, 1.72746,0.384375,0.28714, 1.66208,0.384375,0.55832, + 1.66208,0.384375,0.55832, 1.591798,0.3168,0.534711, 1.654413,0.3168,0.274998, + 1.676,0.3168,0, 1.75,0.384375,0, 1.72746,0.384375,0.28714, + 1.72746,0.384375,0.28714, 1.654413,0.3168,0.274998, 1.676,0.3168,0, + 0.263841,0.260025,1.587289, 0.274998,0.3168,1.654413, 0,0.3168,1.676, + 0,0.3168,1.676, 0,0.260025,1.608, 0.263841,0.260025,1.587289, + 0.513016,0.260025,1.527214, 0.534711,0.3168,1.591798, 0.274998,0.3168,1.654413, + 0.274998,0.3168,1.654413, 0.263841,0.260025,1.587289, 0.513016,0.260025,1.527214, + 0.74444,0.260025,1.430863, 0.775921,0.3168,1.491372, 0.534711,0.3168,1.591798, + 0.534711,0.3168,1.591798, 0.513016,0.260025,1.527214, 0.74444,0.260025,1.430863, + 0.955023,0.260025,1.301322, 0.99541,0.3168,1.356353, 0.775921,0.3168,1.491372, + 0.775921,0.3168,1.491372, 0.74444,0.260025,1.430863, 0.955023,0.260025,1.301322, + 1.14168,0.260025,1.14168, 1.18996,0.3168,1.18996, 0.99541,0.3168,1.356353, + 0.99541,0.3168,1.356353, 0.955023,0.260025,1.301322, 1.14168,0.260025,1.14168, + 1.301322,0.260025,0.955023, 1.356353,0.3168,0.99541, 1.18996,0.3168,1.18996, + 1.18996,0.3168,1.18996, 1.14168,0.260025,1.14168, 1.301322,0.260025,0.955023, + 1.430863,0.260025,0.74444, 1.491372,0.3168,0.775921, 1.356353,0.3168,0.99541, + 1.356353,0.3168,0.99541, 1.301322,0.260025,0.955023, 1.430863,0.260025,0.74444, + 1.527214,0.260025,0.513016, 1.591798,0.3168,0.534711, 1.491372,0.3168,0.775921, + 1.491372,0.3168,0.775921, 1.430863,0.260025,0.74444, 1.527214,0.260025,0.513016, + 1.587289,0.260025,0.263841, 1.654413,0.3168,0.274998, 1.591798,0.3168,0.534711, + 1.591798,0.3168,0.534711, 1.527214,0.260025,0.513016, 1.587289,0.260025,0.263841, + 1.608,0.260025,0, 1.676,0.3168,0, 1.654413,0.3168,0.274998, + 1.654413,0.3168,0.274998, 1.587289,0.260025,0.263841, 1.608,0.260025,0, + 0.254652,0.2136,1.53201, 0.263841,0.260025,1.587289, 0,0.260025,1.608, + 0,0.260025,1.608, 0,0.2136,1.552, 0.254652,0.2136,1.53201, + 0.49515,0.2136,1.474028, 0.513016,0.260025,1.527214, 0.263841,0.260025,1.587289, + 0.263841,0.260025,1.587289, 0.254652,0.2136,1.53201, 0.49515,0.2136,1.474028, + 0.718514,0.2136,1.381032, 0.74444,0.260025,1.430863, 0.513016,0.260025,1.527214, + 0.513016,0.260025,1.527214, 0.49515,0.2136,1.474028, 0.718514,0.2136,1.381032, + 0.921764,0.2136,1.256003, 0.955023,0.260025,1.301322, 0.74444,0.260025,1.430863, + 0.74444,0.260025,1.430863, 0.718514,0.2136,1.381032, 0.921764,0.2136,1.256003, + 1.10192,0.2136,1.10192, 1.14168,0.260025,1.14168, 0.955023,0.260025,1.301322, + 0.955023,0.260025,1.301322, 0.921764,0.2136,1.256003, 1.10192,0.2136,1.10192, + 1.256003,0.2136,0.921764, 1.301322,0.260025,0.955023, 1.14168,0.260025,1.14168, + 1.14168,0.260025,1.14168, 1.10192,0.2136,1.10192, 1.256003,0.2136,0.921764, + 1.381032,0.2136,0.718514, 1.430863,0.260025,0.74444, 1.301322,0.260025,0.955023, + 1.301322,0.260025,0.955023, 1.256003,0.2136,0.921764, 1.381032,0.2136,0.718514, + 1.474028,0.2136,0.49515, 1.527214,0.260025,0.513016, 1.430863,0.260025,0.74444, + 1.430863,0.260025,0.74444, 1.381032,0.2136,0.718514, 1.474028,0.2136,0.49515, + 1.53201,0.2136,0.254652, 1.587289,0.260025,0.263841, 1.527214,0.260025,0.513016, + 1.527214,0.260025,0.513016, 1.474028,0.2136,0.49515, 1.53201,0.2136,0.254652, + 1.552,0.2136,0, 1.608,0.260025,0, 1.587289,0.260025,0.263841, + 1.587289,0.260025,0.263841, 1.53201,0.2136,0.254652, 1.552,0.2136,0, + 0.248417,0.177075,1.4945, 0.254652,0.2136,1.53201, 0,0.2136,1.552, + 0,0.2136,1.552, 0,0.177075,1.514, 0.248417,0.177075,1.4945, + 0.483027,0.177075,1.437937, 0.49515,0.2136,1.474028, 0.254652,0.2136,1.53201, + 0.254652,0.2136,1.53201, 0.248417,0.177075,1.4945, 0.483027,0.177075,1.437937, + 0.700921,0.177075,1.347218, 0.718514,0.2136,1.381032, 0.49515,0.2136,1.474028, + 0.49515,0.2136,1.474028, 0.483027,0.177075,1.437937, 0.700921,0.177075,1.347218, + 0.899195,0.177075,1.22525, 0.921764,0.2136,1.256003, 0.718514,0.2136,1.381032, + 0.718514,0.2136,1.381032, 0.700921,0.177075,1.347218, 0.899195,0.177075,1.22525, + 1.07494,0.177075,1.07494, 1.10192,0.2136,1.10192, 0.921764,0.2136,1.256003, + 0.921764,0.2136,1.256003, 0.899195,0.177075,1.22525, 1.07494,0.177075,1.07494, + 1.22525,0.177075,0.899195, 1.256003,0.2136,0.921764, 1.10192,0.2136,1.10192, + 1.10192,0.2136,1.10192, 1.07494,0.177075,1.07494, 1.22525,0.177075,0.899195, + 1.347218,0.177075,0.700921, 1.381032,0.2136,0.718514, 1.256003,0.2136,0.921764, + 1.256003,0.2136,0.921764, 1.22525,0.177075,0.899195, 1.347218,0.177075,0.700921, + 1.437937,0.177075,0.483027, 1.474028,0.2136,0.49515, 1.381032,0.2136,0.718514, + 1.381032,0.2136,0.718514, 1.347218,0.177075,0.700921, 1.437937,0.177075,0.483027, + 1.4945,0.177075,0.248417, 1.53201,0.2136,0.254652, 1.474028,0.2136,0.49515, + 1.474028,0.2136,0.49515, 1.437937,0.177075,0.483027, 1.4945,0.177075,0.248417, + 1.514,0.177075,0, 1.552,0.2136,0, 1.53201,0.2136,0.254652, + 1.53201,0.2136,0.254652, 1.4945,0.177075,0.248417, 1.514,0.177075,0, + 0.24612,0.15,1.48068, 0.248417,0.177075,1.4945, 0,0.177075,1.514, + 0,0.177075,1.514, 0,0.15,1.5, 0.24612,0.15,1.48068, + 0.47856,0.15,1.42464, 0.483027,0.177075,1.437937, 0.248417,0.177075,1.4945, + 0.248417,0.177075,1.4945, 0.24612,0.15,1.48068, 0.47856,0.15,1.42464, + 0.69444,0.15,1.33476, 0.700921,0.177075,1.347218, 0.483027,0.177075,1.437937, + 0.483027,0.177075,1.437937, 0.47856,0.15,1.42464, 0.69444,0.15,1.33476, + 0.89088,0.15,1.21392, 0.899195,0.177075,1.22525, 0.700921,0.177075,1.347218, + 0.700921,0.177075,1.347218, 0.69444,0.15,1.33476, 0.89088,0.15,1.21392, + 1.065,0.15,1.065, 1.07494,0.177075,1.07494, 0.899195,0.177075,1.22525, + 0.899195,0.177075,1.22525, 0.89088,0.15,1.21392, 1.065,0.15,1.065, + 1.21392,0.15,0.89088, 1.22525,0.177075,0.899195, 1.07494,0.177075,1.07494, + 1.07494,0.177075,1.07494, 1.065,0.15,1.065, 1.21392,0.15,0.89088, + 1.33476,0.15,0.69444, 1.347218,0.177075,0.700921, 1.22525,0.177075,0.899195, + 1.22525,0.177075,0.899195, 1.21392,0.15,0.89088, 1.33476,0.15,0.69444, + 1.42464,0.15,0.47856, 1.437937,0.177075,0.483027, 1.347218,0.177075,0.700921, + 1.347218,0.177075,0.700921, 1.33476,0.15,0.69444, 1.42464,0.15,0.47856, + 1.48068,0.15,0.24612, 1.4945,0.177075,0.248417, 1.437937,0.177075,0.483027, + 1.437937,0.177075,0.483027, 1.42464,0.15,0.47856, 1.48068,0.15,0.24612, + 1.5,0.15,0, 1.514,0.177075,0, 1.4945,0.177075,0.248417, + 1.4945,0.177075,0.248417, 1.48068,0.15,0.24612, 1.5,0.15,0, + -1.800455,2.031069,-0.081, -1.5972,2.0313,-0.081, -1.6,2.025,0, + -1.6,2.025,0, -1.8009,2.024775,0, -1.800455,2.031069,-0.081, + -1.799246,2.048152,-0.144, -1.5896,2.0484,-0.144, -1.5972,2.0313,-0.081, + -1.5972,2.0313,-0.081, -1.800455,2.031069,-0.081, -1.799246,2.048152,-0.144, + -1.797466,2.073326,-0.189, -1.5784,2.0736,-0.189, -1.5896,2.0484,-0.144, + -1.5896,2.0484,-0.144, -1.799246,2.048152,-0.144, -1.797466,2.073326,-0.189, + -1.795303,2.103896,-0.216, -1.5648,2.1042,-0.216, -1.5784,2.0736,-0.189, + -1.5784,2.0736,-0.189, -1.797466,2.073326,-0.189, -1.795303,2.103896,-0.216, + -1.79295,2.137163,-0.225, -1.55,2.1375,-0.225, -1.5648,2.1042,-0.216, + -1.5648,2.1042,-0.216, -1.795303,2.103896,-0.216, -1.79295,2.137163,-0.225, + -1.790597,2.170429,-0.216, -1.5352,2.1708,-0.216, -1.55,2.1375,-0.225, + -1.55,2.1375,-0.225, -1.79295,2.137163,-0.225, -1.790597,2.170429,-0.216, + -1.788434,2.200999,-0.189, -1.5216,2.2014,-0.189, -1.5352,2.1708,-0.216, + -1.5352,2.1708,-0.216, -1.790597,2.170429,-0.216, -1.788434,2.200999,-0.189, + -1.786654,2.226173,-0.144, -1.5104,2.2266,-0.144, -1.5216,2.2014,-0.189, + -1.5216,2.2014,-0.189, -1.788434,2.200999,-0.189, -1.786654,2.226173,-0.144, + -1.785445,2.243256,-0.081, -1.5028,2.2437,-0.081, -1.5104,2.2266,-0.144, + -1.5104,2.2266,-0.144, -1.786654,2.226173,-0.144, -1.785445,2.243256,-0.081, + -1.785,2.24955,0, -1.5,2.25,0, -1.5028,2.2437,-0.081, + -1.5028,2.2437,-0.081, -1.785445,2.243256,-0.081, -1.785,2.24955,0, + -1.98479,2.02945,-0.081, -1.800455,2.031069,-0.081, -1.8009,2.024775,0, + -1.8009,2.024775,0, -1.9832,2.0232,0, -1.98479,2.02945,-0.081, + -1.989107,2.046413,-0.144, -1.799246,2.048152,-0.144, -1.800455,2.031069,-0.081, + -1.800455,2.031069,-0.081, -1.98479,2.02945,-0.081, -1.989107,2.046413,-0.144, + -1.995469,2.071411,-0.189, -1.797466,2.073326,-0.189, -1.799246,2.048152,-0.144, + -1.799246,2.048152,-0.144, -1.989107,2.046413,-0.144, -1.995469,2.071411,-0.189, + -2.003194,2.101766,-0.216, -1.795303,2.103896,-0.216, -1.797466,2.073326,-0.189, + -1.797466,2.073326,-0.189, -1.995469,2.071411,-0.189, -2.003194,2.101766,-0.216, + -2.0116,2.1348,-0.225, -1.79295,2.137163,-0.225, -1.795303,2.103896,-0.216, + -1.795303,2.103896,-0.216, -2.003194,2.101766,-0.216, -2.0116,2.1348,-0.225, + -2.020006,2.167834,-0.216, -1.790597,2.170429,-0.216, -1.79295,2.137163,-0.225, + -1.79295,2.137163,-0.225, -2.0116,2.1348,-0.225, -2.020006,2.167834,-0.216, + -2.027731,2.198189,-0.189, -1.788434,2.200999,-0.189, -1.790597,2.170429,-0.216, + -1.790597,2.170429,-0.216, -2.020006,2.167834,-0.216, -2.027731,2.198189,-0.189, + -2.034093,2.223187,-0.144, -1.786654,2.226173,-0.144, -1.788434,2.200999,-0.189, + -1.788434,2.200999,-0.189, -2.027731,2.198189,-0.189, -2.034093,2.223187,-0.144, + -2.03841,2.24015,-0.081, -1.785445,2.243256,-0.081, -1.786654,2.226173,-0.144, + -1.786654,2.226173,-0.144, -2.034093,2.223187,-0.144, -2.03841,2.24015,-0.081, + -2.04,2.2464,0, -1.785,2.24955,0, -1.785445,2.243256,-0.081, + -1.785445,2.243256,-0.081, -2.03841,2.24015,-0.081, -2.04,2.2464,0, + -2.149624,2.025055,-0.081, -1.98479,2.02945,-0.081, -1.9832,2.0232,0, + -1.9832,2.0232,0, -2.1463,2.018925,0, -2.149624,2.025055,-0.081, + -2.158645,2.041693,-0.144, -1.989107,2.046413,-0.144, -1.98479,2.02945,-0.081, + -1.98479,2.02945,-0.081, -2.149624,2.025055,-0.081, -2.158645,2.041693,-0.144, + -2.171939,2.066213,-0.189, -1.995469,2.071411,-0.189, -1.989107,2.046413,-0.144, + -1.989107,2.046413,-0.144, -2.158645,2.041693,-0.144, -2.171939,2.066213,-0.189, + -2.188082,2.095987,-0.216, -2.003194,2.101766,-0.216, -1.995469,2.071411,-0.189, + -1.995469,2.071411,-0.189, -2.171939,2.066213,-0.189, -2.188082,2.095987,-0.216, + -2.20565,2.128388,-0.225, -2.0116,2.1348,-0.225, -2.003194,2.101766,-0.216, + -2.003194,2.101766,-0.216, -2.188082,2.095987,-0.216, -2.20565,2.128388,-0.225, + -2.223218,2.160788,-0.216, -2.020006,2.167834,-0.216, -2.0116,2.1348,-0.225, + -2.0116,2.1348,-0.225, -2.20565,2.128388,-0.225, -2.223218,2.160788,-0.216, + -2.239361,2.190562,-0.189, -2.027731,2.198189,-0.189, -2.020006,2.167834,-0.216, + -2.020006,2.167834,-0.216, -2.223218,2.160788,-0.216, -2.239361,2.190562,-0.189, + -2.252655,2.215082,-0.144, -2.034093,2.223187,-0.144, -2.027731,2.198189,-0.189, + -2.027731,2.198189,-0.189, -2.239361,2.190562,-0.189, -2.252655,2.215082,-0.144, + -2.261676,2.23172,-0.081, -2.03841,2.24015,-0.081, -2.034093,2.223187,-0.144, + -2.034093,2.223187,-0.144, -2.252655,2.215082,-0.144, -2.261676,2.23172,-0.081, + -2.265,2.23785,0, -2.04,2.2464,0, -2.03841,2.24015,-0.081, + -2.03841,2.24015,-0.081, -2.261676,2.23172,-0.081, -2.265,2.23785,0, + -2.294371,2.016497,-0.081, -2.149624,2.025055,-0.081, -2.1463,2.018925,0, + -2.1463,2.018925,0, -2.2896,2.0106,0, -2.294371,2.016497,-0.081, + -2.307322,2.032502,-0.144, -2.158645,2.041693,-0.144, -2.149624,2.025055,-0.081, + -2.149624,2.025055,-0.081, -2.294371,2.016497,-0.081, -2.307322,2.032502,-0.144, + -2.326406,2.05609,-0.189, -2.171939,2.066213,-0.189, -2.158645,2.041693,-0.144, + -2.158645,2.041693,-0.144, -2.307322,2.032502,-0.144, -2.326406,2.05609,-0.189, + -2.349581,2.084731,-0.216, -2.188082,2.095987,-0.216, -2.171939,2.066213,-0.189, + -2.171939,2.066213,-0.189, -2.326406,2.05609,-0.189, -2.349581,2.084731,-0.216, + -2.3748,2.1159,-0.225, -2.20565,2.128388,-0.225, -2.188082,2.095987,-0.216, + -2.188082,2.095987,-0.216, -2.349581,2.084731,-0.216, -2.3748,2.1159,-0.225, + -2.400019,2.147069,-0.216, -2.223218,2.160788,-0.216, -2.20565,2.128388,-0.225, + -2.20565,2.128388,-0.225, -2.3748,2.1159,-0.225, -2.400019,2.147069,-0.216, + -2.423194,2.17571,-0.189, -2.239361,2.190562,-0.189, -2.223218,2.160788,-0.216, + -2.223218,2.160788,-0.216, -2.400019,2.147069,-0.216, -2.423194,2.17571,-0.189, + -2.442278,2.199298,-0.144, -2.252655,2.215082,-0.144, -2.239361,2.190562,-0.189, + -2.239361,2.190562,-0.189, -2.423194,2.17571,-0.189, -2.442278,2.199298,-0.144, + -2.455229,2.215303,-0.081, -2.261676,2.23172,-0.081, -2.252655,2.215082,-0.144, + -2.252655,2.215082,-0.144, -2.442278,2.199298,-0.144, -2.455229,2.215303,-0.081, + -2.46,2.2212,0, -2.265,2.23785,0, -2.261676,2.23172,-0.081, + -2.261676,2.23172,-0.081, -2.455229,2.215303,-0.081, -2.46,2.2212,0, + -2.41845,2.002387,-0.081, -2.294371,2.016497,-0.081, -2.2896,2.0106,0, + -2.2896,2.0106,0, -2.4125,1.996875,0, -2.41845,2.002387,-0.081, + -2.4346,2.01735,-0.144, -2.307322,2.032502,-0.144, -2.294371,2.016497,-0.081, + -2.294371,2.016497,-0.081, -2.41845,2.002387,-0.081, -2.4346,2.01735,-0.144, + -2.4584,2.0394,-0.189, -2.326406,2.05609,-0.189, -2.307322,2.032502,-0.144, + -2.307322,2.032502,-0.144, -2.4346,2.01735,-0.144, -2.4584,2.0394,-0.189, + -2.4873,2.066175,-0.216, -2.349581,2.084731,-0.216, -2.326406,2.05609,-0.189, + -2.326406,2.05609,-0.189, -2.4584,2.0394,-0.189, -2.4873,2.066175,-0.216, + -2.51875,2.095312,-0.225, -2.3748,2.1159,-0.225, -2.349581,2.084731,-0.216, + -2.349581,2.084731,-0.216, -2.4873,2.066175,-0.216, -2.51875,2.095312,-0.225, + -2.5502,2.12445,-0.216, -2.400019,2.147069,-0.216, -2.3748,2.1159,-0.225, + -2.3748,2.1159,-0.225, -2.51875,2.095312,-0.225, -2.5502,2.12445,-0.216, + -2.5791,2.151225,-0.189, -2.423194,2.17571,-0.189, -2.400019,2.147069,-0.216, + -2.400019,2.147069,-0.216, -2.5502,2.12445,-0.216, -2.5791,2.151225,-0.189, + -2.6029,2.173275,-0.144, -2.442278,2.199298,-0.144, -2.423194,2.17571,-0.189, + -2.423194,2.17571,-0.189, -2.5791,2.151225,-0.189, -2.6029,2.173275,-0.144, + -2.61905,2.188238,-0.081, -2.455229,2.215303,-0.081, -2.442278,2.199298,-0.144, + -2.442278,2.199298,-0.144, -2.6029,2.173275,-0.144, -2.61905,2.188238,-0.081, + -2.625,2.19375,0, -2.46,2.2212,0, -2.455229,2.215303,-0.081, + -2.455229,2.215303,-0.081, -2.61905,2.188238,-0.081, -2.625,2.19375,0, + -2.521277,1.981339,-0.081, -2.41845,2.002387,-0.081, -2.4125,1.996875,0, + -2.4125,1.996875,0, -2.5144,1.9764,0, -2.521277,1.981339,-0.081, + -2.539942,1.994746,-0.144, -2.4346,2.01735,-0.144, -2.41845,2.002387,-0.081, + -2.41845,2.002387,-0.081, -2.521277,1.981339,-0.081, -2.539942,1.994746,-0.144, + -2.56745,2.014502,-0.189, -2.4584,2.0394,-0.189, -2.4346,2.01735,-0.144, + -2.4346,2.01735,-0.144, -2.539942,1.994746,-0.144, -2.56745,2.014502,-0.189, + -2.600851,2.038493,-0.216, -2.4873,2.066175,-0.216, -2.4584,2.0394,-0.189, + -2.4584,2.0394,-0.189, -2.56745,2.014502,-0.189, -2.600851,2.038493,-0.216, + -2.6372,2.0646,-0.225, -2.51875,2.095312,-0.225, -2.4873,2.066175,-0.216, + -2.4873,2.066175,-0.216, -2.600851,2.038493,-0.216, -2.6372,2.0646,-0.225, + -2.673549,2.090707,-0.216, -2.5502,2.12445,-0.216, -2.51875,2.095312,-0.225, + -2.51875,2.095312,-0.225, -2.6372,2.0646,-0.225, -2.673549,2.090707,-0.216, + -2.70695,2.114698,-0.189, -2.5791,2.151225,-0.189, -2.5502,2.12445,-0.216, + -2.5502,2.12445,-0.216, -2.673549,2.090707,-0.216, -2.70695,2.114698,-0.189, + -2.734458,2.134454,-0.144, -2.6029,2.173275,-0.144, -2.5791,2.151225,-0.189, + -2.5791,2.151225,-0.189, -2.70695,2.114698,-0.189, -2.734458,2.134454,-0.144, + -2.753123,2.147861,-0.081, -2.61905,2.188238,-0.081, -2.6029,2.173275,-0.144, + -2.6029,2.173275,-0.144, -2.734458,2.134454,-0.144, -2.753123,2.147861,-0.081, + -2.76,2.1528,0, -2.625,2.19375,0, -2.61905,2.188238,-0.081, + -2.61905,2.188238,-0.081, -2.753123,2.147861,-0.081, -2.76,2.1528,0, + -2.602268,1.951964,-0.081, -2.521277,1.981339,-0.081, -2.5144,1.9764,0, + -2.5144,1.9764,0, -2.5947,1.947825,0, -2.602268,1.951964,-0.081, + -2.622811,1.963199,-0.144, -2.539942,1.994746,-0.144, -2.521277,1.981339,-0.081, + -2.521277,1.981339,-0.081, -2.602268,1.951964,-0.081, -2.622811,1.963199,-0.144, + -2.653085,1.979755,-0.189, -2.56745,2.014502,-0.189, -2.539942,1.994746,-0.144, + -2.539942,1.994746,-0.144, -2.622811,1.963199,-0.144, -2.653085,1.979755,-0.189, + -2.689846,1.999859,-0.216, -2.600851,2.038493,-0.216, -2.56745,2.014502,-0.189, + -2.56745,2.014502,-0.189, -2.653085,1.979755,-0.189, -2.689846,1.999859,-0.216, + -2.72985,2.021737,-0.225, -2.6372,2.0646,-0.225, -2.600851,2.038493,-0.216, + -2.600851,2.038493,-0.216, -2.689846,1.999859,-0.216, -2.72985,2.021737,-0.225, + -2.769854,2.043616,-0.216, -2.673549,2.090707,-0.216, -2.6372,2.0646,-0.225, + -2.6372,2.0646,-0.225, -2.72985,2.021737,-0.225, -2.769854,2.043616,-0.216, + -2.806615,2.06372,-0.189, -2.70695,2.114698,-0.189, -2.673549,2.090707,-0.216, + -2.673549,2.090707,-0.216, -2.769854,2.043616,-0.216, -2.806615,2.06372,-0.189, + -2.836889,2.080276,-0.144, -2.734458,2.134454,-0.144, -2.70695,2.114698,-0.189, + -2.70695,2.114698,-0.189, -2.806615,2.06372,-0.189, -2.836889,2.080276,-0.144, + -2.857432,2.091511,-0.081, -2.753123,2.147861,-0.081, -2.734458,2.134454,-0.144, + -2.734458,2.134454,-0.144, -2.836889,2.080276,-0.144, -2.857432,2.091511,-0.081, + -2.865,2.09565,0, -2.76,2.1528,0, -2.753123,2.147861,-0.081, + -2.753123,2.147861,-0.081, -2.857432,2.091511,-0.081, -2.865,2.09565,0, + -2.660842,1.912874,-0.081, -2.602268,1.951964,-0.081, -2.5947,1.947825,0, + -2.5947,1.947825,0, -2.6528,1.9098,0, -2.660842,1.912874,-0.081, + -2.682669,1.921219,-0.144, -2.622811,1.963199,-0.144, -2.602268,1.951964,-0.081, + -2.602268,1.951964,-0.081, -2.660842,1.912874,-0.081, -2.682669,1.921219,-0.144, + -2.714835,1.933517,-0.189, -2.653085,1.979755,-0.189, -2.622811,1.963199,-0.144, + -2.622811,1.963199,-0.144, -2.682669,1.921219,-0.144, -2.714835,1.933517,-0.189, + -2.753894,1.94845,-0.216, -2.689846,1.999859,-0.216, -2.653085,1.979755,-0.189, + -2.653085,1.979755,-0.189, -2.714835,1.933517,-0.189, -2.753894,1.94845,-0.216, + -2.7964,1.9647,-0.225, -2.72985,2.021737,-0.225, -2.689846,1.999859,-0.216, + -2.689846,1.999859,-0.216, -2.753894,1.94845,-0.216, -2.7964,1.9647,-0.225, + -2.838906,1.98095,-0.216, -2.769854,2.043616,-0.216, -2.72985,2.021737,-0.225, + -2.72985,2.021737,-0.225, -2.7964,1.9647,-0.225, -2.838906,1.98095,-0.216, + -2.877965,1.995883,-0.189, -2.806615,2.06372,-0.189, -2.769854,2.043616,-0.216, + -2.769854,2.043616,-0.216, -2.838906,1.98095,-0.216, -2.877965,1.995883,-0.189, + -2.910131,2.008181,-0.144, -2.836889,2.080276,-0.144, -2.806615,2.06372,-0.189, + -2.806615,2.06372,-0.189, -2.877965,1.995883,-0.189, -2.910131,2.008181,-0.144, + -2.931958,2.016526,-0.081, -2.857432,2.091511,-0.081, -2.836889,2.080276,-0.144, + -2.836889,2.080276,-0.144, -2.910131,2.008181,-0.144, -2.931958,2.016526,-0.081, + -2.94,2.0196,0, -2.865,2.09565,0, -2.857432,2.091511,-0.081, + -2.857432,2.091511,-0.081, -2.931958,2.016526,-0.081, -2.94,2.0196,0, + -2.696413,1.862682,-0.081, -2.660842,1.912874,-0.081, -2.6528,1.9098,0, + -2.6528,1.9098,0, -2.6881,1.860975,0, -2.696413,1.862682,-0.081, + -2.718978,1.867316,-0.144, -2.682669,1.921219,-0.144, -2.660842,1.912874,-0.081, + -2.660842,1.912874,-0.081, -2.696413,1.862682,-0.081, -2.718978,1.867316,-0.144, + -2.75223,1.874146,-0.189, -2.714835,1.933517,-0.189, -2.682669,1.921219,-0.144, + -2.682669,1.921219,-0.144, -2.718978,1.867316,-0.144, -2.75223,1.874146,-0.189, + -2.792609,1.882438,-0.216, -2.753894,1.94845,-0.216, -2.714835,1.933517,-0.189, + -2.714835,1.933517,-0.189, -2.75223,1.874146,-0.189, -2.792609,1.882438,-0.216, + -2.83655,1.891463,-0.225, -2.7964,1.9647,-0.225, -2.753894,1.94845,-0.216, + -2.753894,1.94845,-0.216, -2.792609,1.882438,-0.216, -2.83655,1.891463,-0.225, + -2.880491,1.900487,-0.216, -2.838906,1.98095,-0.216, -2.7964,1.9647,-0.225, + -2.7964,1.9647,-0.225, -2.83655,1.891463,-0.225, -2.880491,1.900487,-0.216, + -2.92087,1.908779,-0.189, -2.877965,1.995883,-0.189, -2.838906,1.98095,-0.216, + -2.838906,1.98095,-0.216, -2.880491,1.900487,-0.216, -2.92087,1.908779,-0.189, + -2.954122,1.915609,-0.144, -2.910131,2.008181,-0.144, -2.877965,1.995883,-0.189, + -2.877965,1.995883,-0.189, -2.92087,1.908779,-0.189, -2.954122,1.915609,-0.144, + -2.976687,1.920243,-0.081, -2.931958,2.016526,-0.081, -2.910131,2.008181,-0.144, + -2.910131,2.008181,-0.144, -2.954122,1.915609,-0.144, -2.976687,1.920243,-0.081, + -2.985,1.92195,0, -2.94,2.0196,0, -2.931958,2.016526,-0.081, + -2.931958,2.016526,-0.081, -2.976687,1.920243,-0.081, -2.985,1.92195,0, + -2.7084,1.8,-0.081, -2.696413,1.862682,-0.081, -2.6881,1.860975,0, + -2.6881,1.860975,0, -2.7,1.8,0, -2.7084,1.8,-0.081, + -2.7312,1.8,-0.144, -2.718978,1.867316,-0.144, -2.696413,1.862682,-0.081, + -2.696413,1.862682,-0.081, -2.7084,1.8,-0.081, -2.7312,1.8,-0.144, + -2.7648,1.8,-0.189, -2.75223,1.874146,-0.189, -2.718978,1.867316,-0.144, + -2.718978,1.867316,-0.144, -2.7312,1.8,-0.144, -2.7648,1.8,-0.189, + -2.8056,1.8,-0.216, -2.792609,1.882438,-0.216, -2.75223,1.874146,-0.189, + -2.75223,1.874146,-0.189, -2.7648,1.8,-0.189, -2.8056,1.8,-0.216, + -2.85,1.8,-0.225, -2.83655,1.891463,-0.225, -2.792609,1.882438,-0.216, + -2.792609,1.882438,-0.216, -2.8056,1.8,-0.216, -2.85,1.8,-0.225, + -2.8944,1.8,-0.216, -2.880491,1.900487,-0.216, -2.83655,1.891463,-0.225, + -2.83655,1.891463,-0.225, -2.85,1.8,-0.225, -2.8944,1.8,-0.216, + -2.9352,1.8,-0.189, -2.92087,1.908779,-0.189, -2.880491,1.900487,-0.216, + -2.880491,1.900487,-0.216, -2.8944,1.8,-0.216, -2.9352,1.8,-0.189, + -2.9688,1.8,-0.144, -2.954122,1.915609,-0.144, -2.92087,1.908779,-0.189, + -2.92087,1.908779,-0.189, -2.9352,1.8,-0.189, -2.9688,1.8,-0.144, + -2.9916,1.8,-0.081, -2.976687,1.920243,-0.081, -2.954122,1.915609,-0.144, + -2.954122,1.915609,-0.144, -2.9688,1.8,-0.144, -2.9916,1.8,-0.081, + -3,1.8,0, -2.985,1.92195,0, -2.976687,1.920243,-0.081, + -2.976687,1.920243,-0.081, -2.9916,1.8,-0.081, -3,1.8,0, + -1.785445,2.243256,0.081, -1.5028,2.2437,0.081, -1.5,2.25,0, + -1.5,2.25,0, -1.785,2.24955,0, -1.785445,2.243256,0.081, + -1.786654,2.226173,0.144, -1.5104,2.2266,0.144, -1.5028,2.2437,0.081, + -1.5028,2.2437,0.081, -1.785445,2.243256,0.081, -1.786654,2.226173,0.144, + -1.788434,2.200999,0.189, -1.5216,2.2014,0.189, -1.5104,2.2266,0.144, + -1.5104,2.2266,0.144, -1.786654,2.226173,0.144, -1.788434,2.200999,0.189, + -1.790597,2.170429,0.216, -1.5352,2.1708,0.216, -1.5216,2.2014,0.189, + -1.5216,2.2014,0.189, -1.788434,2.200999,0.189, -1.790597,2.170429,0.216, + -1.79295,2.137163,0.225, -1.55,2.1375,0.225, -1.5352,2.1708,0.216, + -1.5352,2.1708,0.216, -1.790597,2.170429,0.216, -1.79295,2.137163,0.225, + -1.795303,2.103896,0.216, -1.5648,2.1042,0.216, -1.55,2.1375,0.225, + -1.55,2.1375,0.225, -1.79295,2.137163,0.225, -1.795303,2.103896,0.216, + -1.797466,2.073326,0.189, -1.5784,2.0736,0.189, -1.5648,2.1042,0.216, + -1.5648,2.1042,0.216, -1.795303,2.103896,0.216, -1.797466,2.073326,0.189, + -1.799246,2.048152,0.144, -1.5896,2.0484,0.144, -1.5784,2.0736,0.189, + -1.5784,2.0736,0.189, -1.797466,2.073326,0.189, -1.799246,2.048152,0.144, + -1.800455,2.031069,0.081, -1.5972,2.0313,0.081, -1.5896,2.0484,0.144, + -1.5896,2.0484,0.144, -1.799246,2.048152,0.144, -1.800455,2.031069,0.081, + -1.8009,2.024775,0, -1.6,2.025,0, -1.5972,2.0313,0.081, + -1.5972,2.0313,0.081, -1.800455,2.031069,0.081, -1.8009,2.024775,0, + -2.03841,2.24015,0.081, -1.785445,2.243256,0.081, -1.785,2.24955,0, + -1.785,2.24955,0, -2.04,2.2464,0, -2.03841,2.24015,0.081, + -2.034093,2.223187,0.144, -1.786654,2.226173,0.144, -1.785445,2.243256,0.081, + -1.785445,2.243256,0.081, -2.03841,2.24015,0.081, -2.034093,2.223187,0.144, + -2.027731,2.198189,0.189, -1.788434,2.200999,0.189, -1.786654,2.226173,0.144, + -1.786654,2.226173,0.144, -2.034093,2.223187,0.144, -2.027731,2.198189,0.189, + -2.020006,2.167834,0.216, -1.790597,2.170429,0.216, -1.788434,2.200999,0.189, + -1.788434,2.200999,0.189, -2.027731,2.198189,0.189, -2.020006,2.167834,0.216, + -2.0116,2.1348,0.225, -1.79295,2.137163,0.225, -1.790597,2.170429,0.216, + -1.790597,2.170429,0.216, -2.020006,2.167834,0.216, -2.0116,2.1348,0.225, + -2.003194,2.101766,0.216, -1.795303,2.103896,0.216, -1.79295,2.137163,0.225, + -1.79295,2.137163,0.225, -2.0116,2.1348,0.225, -2.003194,2.101766,0.216, + -1.995469,2.071411,0.189, -1.797466,2.073326,0.189, -1.795303,2.103896,0.216, + -1.795303,2.103896,0.216, -2.003194,2.101766,0.216, -1.995469,2.071411,0.189, + -1.989107,2.046413,0.144, -1.799246,2.048152,0.144, -1.797466,2.073326,0.189, + -1.797466,2.073326,0.189, -1.995469,2.071411,0.189, -1.989107,2.046413,0.144, + -1.98479,2.02945,0.081, -1.800455,2.031069,0.081, -1.799246,2.048152,0.144, + -1.799246,2.048152,0.144, -1.989107,2.046413,0.144, -1.98479,2.02945,0.081, + -1.9832,2.0232,0, -1.8009,2.024775,0, -1.800455,2.031069,0.081, + -1.800455,2.031069,0.081, -1.98479,2.02945,0.081, -1.9832,2.0232,0, + -2.261676,2.23172,0.081, -2.03841,2.24015,0.081, -2.04,2.2464,0, + -2.04,2.2464,0, -2.265,2.23785,0, -2.261676,2.23172,0.081, + -2.252655,2.215082,0.144, -2.034093,2.223187,0.144, -2.03841,2.24015,0.081, + -2.03841,2.24015,0.081, -2.261676,2.23172,0.081, -2.252655,2.215082,0.144, + -2.239361,2.190562,0.189, -2.027731,2.198189,0.189, -2.034093,2.223187,0.144, + -2.034093,2.223187,0.144, -2.252655,2.215082,0.144, -2.239361,2.190562,0.189, + -2.223218,2.160788,0.216, -2.020006,2.167834,0.216, -2.027731,2.198189,0.189, + -2.027731,2.198189,0.189, -2.239361,2.190562,0.189, -2.223218,2.160788,0.216, + -2.20565,2.128387,0.225, -2.0116,2.1348,0.225, -2.020006,2.167834,0.216, + -2.020006,2.167834,0.216, -2.223218,2.160788,0.216, -2.20565,2.128387,0.225, + -2.188082,2.095987,0.216, -2.003194,2.101766,0.216, -2.0116,2.1348,0.225, + -2.0116,2.1348,0.225, -2.20565,2.128387,0.225, -2.188082,2.095987,0.216, + -2.171939,2.066213,0.189, -1.995469,2.071411,0.189, -2.003194,2.101766,0.216, + -2.003194,2.101766,0.216, -2.188082,2.095987,0.216, -2.171939,2.066213,0.189, + -2.158645,2.041693,0.144, -1.989107,2.046413,0.144, -1.995469,2.071411,0.189, + -1.995469,2.071411,0.189, -2.171939,2.066213,0.189, -2.158645,2.041693,0.144, + -2.149624,2.025055,0.081, -1.98479,2.02945,0.081, -1.989107,2.046413,0.144, + -1.989107,2.046413,0.144, -2.158645,2.041693,0.144, -2.149624,2.025055,0.081, + -2.1463,2.018925,0, -1.9832,2.0232,0, -1.98479,2.02945,0.081, + -1.98479,2.02945,0.081, -2.149624,2.025055,0.081, -2.1463,2.018925,0, + -2.455229,2.215303,0.081, -2.261676,2.23172,0.081, -2.265,2.23785,0, + -2.265,2.23785,0, -2.46,2.2212,0, -2.455229,2.215303,0.081, + -2.442278,2.199298,0.144, -2.252655,2.215082,0.144, -2.261676,2.23172,0.081, + -2.261676,2.23172,0.081, -2.455229,2.215303,0.081, -2.442278,2.199298,0.144, + -2.423194,2.17571,0.189, -2.239361,2.190562,0.189, -2.252655,2.215082,0.144, + -2.252655,2.215082,0.144, -2.442278,2.199298,0.144, -2.423194,2.17571,0.189, + -2.400019,2.147069,0.216, -2.223218,2.160788,0.216, -2.239361,2.190562,0.189, + -2.239361,2.190562,0.189, -2.423194,2.17571,0.189, -2.400019,2.147069,0.216, + -2.3748,2.1159,0.225, -2.20565,2.128387,0.225, -2.223218,2.160788,0.216, + -2.223218,2.160788,0.216, -2.400019,2.147069,0.216, -2.3748,2.1159,0.225, + -2.349581,2.084731,0.216, -2.188082,2.095987,0.216, -2.20565,2.128387,0.225, + -2.20565,2.128387,0.225, -2.3748,2.1159,0.225, -2.349581,2.084731,0.216, + -2.326406,2.05609,0.189, -2.171939,2.066213,0.189, -2.188082,2.095987,0.216, + -2.188082,2.095987,0.216, -2.349581,2.084731,0.216, -2.326406,2.05609,0.189, + -2.307322,2.032502,0.144, -2.158645,2.041693,0.144, -2.171939,2.066213,0.189, + -2.171939,2.066213,0.189, -2.326406,2.05609,0.189, -2.307322,2.032502,0.144, + -2.294371,2.016497,0.081, -2.149624,2.025055,0.081, -2.158645,2.041693,0.144, + -2.158645,2.041693,0.144, -2.307322,2.032502,0.144, -2.294371,2.016497,0.081, + -2.2896,2.0106,0, -2.1463,2.018925,0, -2.149624,2.025055,0.081, + -2.149624,2.025055,0.081, -2.294371,2.016497,0.081, -2.2896,2.0106,0, + -2.61905,2.188238,0.081, -2.455229,2.215303,0.081, -2.46,2.2212,0, + -2.46,2.2212,0, -2.625,2.19375,0, -2.61905,2.188238,0.081, + -2.6029,2.173275,0.144, -2.442278,2.199298,0.144, -2.455229,2.215303,0.081, + -2.455229,2.215303,0.081, -2.61905,2.188238,0.081, -2.6029,2.173275,0.144, + -2.5791,2.151225,0.189, -2.423194,2.17571,0.189, -2.442278,2.199298,0.144, + -2.442278,2.199298,0.144, -2.6029,2.173275,0.144, -2.5791,2.151225,0.189, + -2.5502,2.12445,0.216, -2.400019,2.147069,0.216, -2.423194,2.17571,0.189, + -2.423194,2.17571,0.189, -2.5791,2.151225,0.189, -2.5502,2.12445,0.216, + -2.51875,2.095312,0.225, -2.3748,2.1159,0.225, -2.400019,2.147069,0.216, + -2.400019,2.147069,0.216, -2.5502,2.12445,0.216, -2.51875,2.095312,0.225, + -2.4873,2.066175,0.216, -2.349581,2.084731,0.216, -2.3748,2.1159,0.225, + -2.3748,2.1159,0.225, -2.51875,2.095312,0.225, -2.4873,2.066175,0.216, + -2.4584,2.0394,0.189, -2.326406,2.05609,0.189, -2.349581,2.084731,0.216, + -2.349581,2.084731,0.216, -2.4873,2.066175,0.216, -2.4584,2.0394,0.189, + -2.4346,2.01735,0.144, -2.307322,2.032502,0.144, -2.326406,2.05609,0.189, + -2.326406,2.05609,0.189, -2.4584,2.0394,0.189, -2.4346,2.01735,0.144, + -2.41845,2.002388,0.081, -2.294371,2.016497,0.081, -2.307322,2.032502,0.144, + -2.307322,2.032502,0.144, -2.4346,2.01735,0.144, -2.41845,2.002388,0.081, + -2.4125,1.996875,0, -2.2896,2.0106,0, -2.294371,2.016497,0.081, + -2.294371,2.016497,0.081, -2.41845,2.002388,0.081, -2.4125,1.996875,0, + -2.753123,2.147861,0.081, -2.61905,2.188238,0.081, -2.625,2.19375,0, + -2.625,2.19375,0, -2.76,2.1528,0, -2.753123,2.147861,0.081, + -2.734458,2.134454,0.144, -2.6029,2.173275,0.144, -2.61905,2.188238,0.081, + -2.61905,2.188238,0.081, -2.753123,2.147861,0.081, -2.734458,2.134454,0.144, + -2.70695,2.114698,0.189, -2.5791,2.151225,0.189, -2.6029,2.173275,0.144, + -2.6029,2.173275,0.144, -2.734458,2.134454,0.144, -2.70695,2.114698,0.189, + -2.673549,2.090707,0.216, -2.5502,2.12445,0.216, -2.5791,2.151225,0.189, + -2.5791,2.151225,0.189, -2.70695,2.114698,0.189, -2.673549,2.090707,0.216, + -2.6372,2.0646,0.225, -2.51875,2.095312,0.225, -2.5502,2.12445,0.216, + -2.5502,2.12445,0.216, -2.673549,2.090707,0.216, -2.6372,2.0646,0.225, + -2.600851,2.038493,0.216, -2.4873,2.066175,0.216, -2.51875,2.095312,0.225, + -2.51875,2.095312,0.225, -2.6372,2.0646,0.225, -2.600851,2.038493,0.216, + -2.56745,2.014502,0.189, -2.4584,2.0394,0.189, -2.4873,2.066175,0.216, + -2.4873,2.066175,0.216, -2.600851,2.038493,0.216, -2.56745,2.014502,0.189, + -2.539942,1.994746,0.144, -2.4346,2.01735,0.144, -2.4584,2.0394,0.189, + -2.4584,2.0394,0.189, -2.56745,2.014502,0.189, -2.539942,1.994746,0.144, + -2.521277,1.981339,0.081, -2.41845,2.002388,0.081, -2.4346,2.01735,0.144, + -2.4346,2.01735,0.144, -2.539942,1.994746,0.144, -2.521277,1.981339,0.081, + -2.5144,1.9764,0, -2.4125,1.996875,0, -2.41845,2.002388,0.081, + -2.41845,2.002388,0.081, -2.521277,1.981339,0.081, -2.5144,1.9764,0, + -2.857432,2.091511,0.081, -2.753123,2.147861,0.081, -2.76,2.1528,0, + -2.76,2.1528,0, -2.865,2.09565,0, -2.857432,2.091511,0.081, + -2.836889,2.080276,0.144, -2.734458,2.134454,0.144, -2.753123,2.147861,0.081, + -2.753123,2.147861,0.081, -2.857432,2.091511,0.081, -2.836889,2.080276,0.144, + -2.806615,2.06372,0.189, -2.70695,2.114698,0.189, -2.734458,2.134454,0.144, + -2.734458,2.134454,0.144, -2.836889,2.080276,0.144, -2.806615,2.06372,0.189, + -2.769854,2.043616,0.216, -2.673549,2.090707,0.216, -2.70695,2.114698,0.189, + -2.70695,2.114698,0.189, -2.806615,2.06372,0.189, -2.769854,2.043616,0.216, + -2.72985,2.021737,0.225, -2.6372,2.0646,0.225, -2.673549,2.090707,0.216, + -2.673549,2.090707,0.216, -2.769854,2.043616,0.216, -2.72985,2.021737,0.225, + -2.689846,1.999859,0.216, -2.600851,2.038493,0.216, -2.6372,2.0646,0.225, + -2.6372,2.0646,0.225, -2.72985,2.021737,0.225, -2.689846,1.999859,0.216, + -2.653085,1.979755,0.189, -2.56745,2.014502,0.189, -2.600851,2.038493,0.216, + -2.600851,2.038493,0.216, -2.689846,1.999859,0.216, -2.653085,1.979755,0.189, + -2.622811,1.963199,0.144, -2.539942,1.994746,0.144, -2.56745,2.014502,0.189, + -2.56745,2.014502,0.189, -2.653085,1.979755,0.189, -2.622811,1.963199,0.144, + -2.602268,1.951964,0.081, -2.521277,1.981339,0.081, -2.539942,1.994746,0.144, + -2.539942,1.994746,0.144, -2.622811,1.963199,0.144, -2.602268,1.951964,0.081, + -2.5947,1.947825,0, -2.5144,1.9764,0, -2.521277,1.981339,0.081, + -2.521277,1.981339,0.081, -2.602268,1.951964,0.081, -2.5947,1.947825,0, + -2.931958,2.016526,0.081, -2.857432,2.091511,0.081, -2.865,2.09565,0, + -2.865,2.09565,0, -2.94,2.0196,0, -2.931958,2.016526,0.081, + -2.910131,2.008181,0.144, -2.836889,2.080276,0.144, -2.857432,2.091511,0.081, + -2.857432,2.091511,0.081, -2.931958,2.016526,0.081, -2.910131,2.008181,0.144, + -2.877965,1.995883,0.189, -2.806615,2.06372,0.189, -2.836889,2.080276,0.144, + -2.836889,2.080276,0.144, -2.910131,2.008181,0.144, -2.877965,1.995883,0.189, + -2.838906,1.98095,0.216, -2.769854,2.043616,0.216, -2.806615,2.06372,0.189, + -2.806615,2.06372,0.189, -2.877965,1.995883,0.189, -2.838906,1.98095,0.216, + -2.7964,1.9647,0.225, -2.72985,2.021737,0.225, -2.769854,2.043616,0.216, + -2.769854,2.043616,0.216, -2.838906,1.98095,0.216, -2.7964,1.9647,0.225, + -2.753894,1.94845,0.216, -2.689846,1.999859,0.216, -2.72985,2.021737,0.225, + -2.72985,2.021737,0.225, -2.7964,1.9647,0.225, -2.753894,1.94845,0.216, + -2.714835,1.933517,0.189, -2.653085,1.979755,0.189, -2.689846,1.999859,0.216, + -2.689846,1.999859,0.216, -2.753894,1.94845,0.216, -2.714835,1.933517,0.189, + -2.682669,1.921219,0.144, -2.622811,1.963199,0.144, -2.653085,1.979755,0.189, + -2.653085,1.979755,0.189, -2.714835,1.933517,0.189, -2.682669,1.921219,0.144, + -2.660842,1.912874,0.081, -2.602268,1.951964,0.081, -2.622811,1.963199,0.144, + -2.622811,1.963199,0.144, -2.682669,1.921219,0.144, -2.660842,1.912874,0.081, + -2.6528,1.9098,0, -2.5947,1.947825,0, -2.602268,1.951964,0.081, + -2.602268,1.951964,0.081, -2.660842,1.912874,0.081, -2.6528,1.9098,0, + -2.976687,1.920243,0.081, -2.931958,2.016526,0.081, -2.94,2.0196,0, + -2.94,2.0196,0, -2.985,1.92195,0, -2.976687,1.920243,0.081, + -2.954122,1.915609,0.144, -2.910131,2.008181,0.144, -2.931958,2.016526,0.081, + -2.931958,2.016526,0.081, -2.976687,1.920243,0.081, -2.954122,1.915609,0.144, + -2.92087,1.908779,0.189, -2.877965,1.995883,0.189, -2.910131,2.008181,0.144, + -2.910131,2.008181,0.144, -2.954122,1.915609,0.144, -2.92087,1.908779,0.189, + -2.880491,1.900487,0.216, -2.838906,1.98095,0.216, -2.877965,1.995883,0.189, + -2.877965,1.995883,0.189, -2.92087,1.908779,0.189, -2.880491,1.900487,0.216, + -2.83655,1.891463,0.225, -2.7964,1.9647,0.225, -2.838906,1.98095,0.216, + -2.838906,1.98095,0.216, -2.880491,1.900487,0.216, -2.83655,1.891463,0.225, + -2.792609,1.882438,0.216, -2.753894,1.94845,0.216, -2.7964,1.9647,0.225, + -2.7964,1.9647,0.225, -2.83655,1.891463,0.225, -2.792609,1.882438,0.216, + -2.75223,1.874146,0.189, -2.714835,1.933517,0.189, -2.753894,1.94845,0.216, + -2.753894,1.94845,0.216, -2.792609,1.882438,0.216, -2.75223,1.874146,0.189, + -2.718978,1.867316,0.144, -2.682669,1.921219,0.144, -2.714835,1.933517,0.189, + -2.714835,1.933517,0.189, -2.75223,1.874146,0.189, -2.718978,1.867316,0.144, + -2.696413,1.862682,0.081, -2.660842,1.912874,0.081, -2.682669,1.921219,0.144, + -2.682669,1.921219,0.144, -2.718978,1.867316,0.144, -2.696413,1.862682,0.081, + -2.6881,1.860975,0, -2.6528,1.9098,0, -2.660842,1.912874,0.081, + -2.660842,1.912874,0.081, -2.696413,1.862682,0.081, -2.6881,1.860975,0, + -2.9916,1.8,0.081, -2.976687,1.920243,0.081, -2.985,1.92195,0, + -2.985,1.92195,0, -3,1.8,0, -2.9916,1.8,0.081, + -2.9688,1.8,0.144, -2.954122,1.915609,0.144, -2.976687,1.920243,0.081, + -2.976687,1.920243,0.081, -2.9916,1.8,0.081, -2.9688,1.8,0.144, + -2.9352,1.8,0.189, -2.92087,1.908779,0.189, -2.954122,1.915609,0.144, + -2.954122,1.915609,0.144, -2.9688,1.8,0.144, -2.9352,1.8,0.189, + -2.8944,1.8,0.216, -2.880491,1.900487,0.216, -2.92087,1.908779,0.189, + -2.92087,1.908779,0.189, -2.9352,1.8,0.189, -2.8944,1.8,0.216, + -2.85,1.8,0.225, -2.83655,1.891463,0.225, -2.880491,1.900487,0.216, + -2.880491,1.900487,0.216, -2.8944,1.8,0.216, -2.85,1.8,0.225, + -2.8056,1.8,0.216, -2.792609,1.882438,0.216, -2.83655,1.891463,0.225, + -2.83655,1.891463,0.225, -2.85,1.8,0.225, -2.8056,1.8,0.216, + -2.7648,1.8,0.189, -2.75223,1.874146,0.189, -2.792609,1.882438,0.216, + -2.792609,1.882438,0.216, -2.8056,1.8,0.216, -2.7648,1.8,0.189, + -2.7312,1.8,0.144, -2.718978,1.867316,0.144, -2.75223,1.874146,0.189, + -2.75223,1.874146,0.189, -2.7648,1.8,0.189, -2.7312,1.8,0.144, + -2.7084,1.8,0.081, -2.696413,1.862682,0.081, -2.718978,1.867316,0.144, + -2.718978,1.867316,0.144, -2.7312,1.8,0.144, -2.7084,1.8,0.081, + -2.7,1.8,0, -2.6881,1.860975,0, -2.696413,1.862682,0.081, + -2.696413,1.862682,0.081, -2.7084,1.8,0.081, -2.7,1.8,0, + -2.702175,1.724519,-0.081, -2.7084,1.8,-0.081, -2.7,1.8,0, + -2.7,1.8,0, -2.6939,1.7262,0, -2.702175,1.724519,-0.081, + -2.724637,1.719956,-0.144, -2.7312,1.8,-0.144, -2.7084,1.8,-0.081, + -2.7084,1.8,-0.081, -2.702175,1.724519,-0.081, -2.724637,1.719956,-0.144, + -2.757739,1.713232,-0.189, -2.7648,1.8,-0.189, -2.7312,1.8,-0.144, + -2.7312,1.8,-0.144, -2.724637,1.719956,-0.144, -2.757739,1.713232,-0.189, + -2.797934,1.705067,-0.216, -2.8056,1.8,-0.216, -2.7648,1.8,-0.189, + -2.7648,1.8,-0.189, -2.757739,1.713232,-0.189, -2.797934,1.705067,-0.216, + -2.841675,1.696181,-0.225, -2.85,1.8,-0.225, -2.8056,1.8,-0.216, + -2.8056,1.8,-0.216, -2.797934,1.705067,-0.216, -2.841675,1.696181,-0.225, + -2.885416,1.687296,-0.216, -2.8944,1.8,-0.216, -2.85,1.8,-0.225, + -2.85,1.8,-0.225, -2.841675,1.696181,-0.225, -2.885416,1.687296,-0.216, + -2.925611,1.679131,-0.189, -2.9352,1.8,-0.189, -2.8944,1.8,-0.216, + -2.8944,1.8,-0.216, -2.885416,1.687296,-0.216, -2.925611,1.679131,-0.189, + -2.958713,1.672406,-0.144, -2.9688,1.8,-0.144, -2.9352,1.8,-0.189, + -2.9352,1.8,-0.189, -2.925611,1.679131,-0.189, -2.958713,1.672406,-0.144, + -2.981175,1.667844,-0.081, -2.9916,1.8,-0.081, -2.9688,1.8,-0.144, + -2.9688,1.8,-0.144, -2.958713,1.672406,-0.144, -2.981175,1.667844,-0.081, + -2.98945,1.666162,0, -3,1.8,0, -2.9916,1.8,-0.081, + -2.9916,1.8,-0.081, -2.981175,1.667844,-0.081, -2.98945,1.666162,0, + -2.683107,1.63861,-0.081, -2.702175,1.724519,-0.081, -2.6939,1.7262,0, + -2.6939,1.7262,0, -2.6752,1.6416,0, -2.683107,1.63861,-0.081, + -2.70457,1.630493,-0.144, -2.724637,1.719956,-0.144, -2.702175,1.724519,-0.081, + -2.702175,1.724519,-0.081, -2.683107,1.63861,-0.081, -2.70457,1.630493,-0.144, + -2.736198,1.618531,-0.189, -2.757739,1.713232,-0.189, -2.724637,1.719956,-0.144, + -2.724637,1.719956,-0.144, -2.70457,1.630493,-0.144, -2.736198,1.618531,-0.189, + -2.774605,1.604006,-0.216, -2.797934,1.705067,-0.216, -2.757739,1.713232,-0.189, + -2.757739,1.713232,-0.189, -2.736198,1.618531,-0.189, -2.774605,1.604006,-0.216, + -2.8164,1.5882,-0.225, -2.841675,1.696181,-0.225, -2.797934,1.705067,-0.216, + -2.797934,1.705067,-0.216, -2.774605,1.604006,-0.216, -2.8164,1.5882,-0.225, + -2.858195,1.572394,-0.216, -2.885416,1.687296,-0.216, -2.841675,1.696181,-0.225, + -2.841675,1.696181,-0.225, -2.8164,1.5882,-0.225, -2.858195,1.572394,-0.216, + -2.896602,1.557869,-0.189, -2.925611,1.679131,-0.189, -2.885416,1.687296,-0.216, + -2.885416,1.687296,-0.216, -2.858195,1.572394,-0.216, -2.896602,1.557869,-0.189, + -2.92823,1.545907,-0.144, -2.958713,1.672406,-0.144, -2.925611,1.679131,-0.189, + -2.925611,1.679131,-0.189, -2.896602,1.557869,-0.189, -2.92823,1.545907,-0.144, + -2.949693,1.53779,-0.081, -2.981175,1.667844,-0.081, -2.958713,1.672406,-0.144, + -2.958713,1.672406,-0.144, -2.92823,1.545907,-0.144, -2.949693,1.53779,-0.081, + -2.9576,1.5348,0, -2.98945,1.666162,0, -2.981175,1.667844,-0.081, + -2.981175,1.667844,-0.081, -2.949693,1.53779,-0.081, -2.9576,1.5348,0, + -2.650604,1.544903,-0.081, -2.683107,1.63861,-0.081, -2.6752,1.6416,0, + -2.6752,1.6416,0, -2.6433,1.5489,0, -2.650604,1.544903,-0.081, + -2.670428,1.534053,-0.144, -2.70457,1.630493,-0.144, -2.683107,1.63861,-0.081, + -2.683107,1.63861,-0.081, -2.650604,1.544903,-0.081, -2.670428,1.534053,-0.144, + -2.699644,1.518063,-0.189, -2.736198,1.618531,-0.189, -2.70457,1.630493,-0.144, + -2.70457,1.630493,-0.144, -2.670428,1.534053,-0.144, -2.699644,1.518063,-0.189, + -2.735119,1.498648,-0.216, -2.774605,1.604006,-0.216, -2.736198,1.618531,-0.189, + -2.736198,1.618531,-0.189, -2.699644,1.518063,-0.189, -2.735119,1.498648,-0.216, + -2.773725,1.477519,-0.225, -2.8164,1.5882,-0.225, -2.774605,1.604006,-0.216, + -2.774605,1.604006,-0.216, -2.735119,1.498648,-0.216, -2.773725,1.477519,-0.225, + -2.812331,1.45639,-0.216, -2.858195,1.572394,-0.216, -2.8164,1.5882,-0.225, + -2.8164,1.5882,-0.225, -2.773725,1.477519,-0.225, -2.812331,1.45639,-0.216, + -2.847806,1.436974,-0.189, -2.896602,1.557869,-0.189, -2.858195,1.572394,-0.216, + -2.858195,1.572394,-0.216, -2.812331,1.45639,-0.216, -2.847806,1.436974,-0.189, + -2.877022,1.420985,-0.144, -2.92823,1.545907,-0.144, -2.896602,1.557869,-0.189, + -2.896602,1.557869,-0.189, -2.847806,1.436974,-0.189, -2.877022,1.420985,-0.144, + -2.896846,1.410135,-0.081, -2.949693,1.53779,-0.081, -2.92823,1.545907,-0.144, + -2.92823,1.545907,-0.144, -2.877022,1.420985,-0.144, -2.896846,1.410135,-0.081, + -2.90415,1.406137,0, -2.9576,1.5348,0, -2.949693,1.53779,-0.081, + -2.949693,1.53779,-0.081, -2.896846,1.410135,-0.081, -2.90415,1.406137,0, + -2.604074,1.446029,-0.081, -2.650604,1.544903,-0.081, -2.6433,1.5489,0, + -2.6433,1.5489,0, -2.5976,1.4508,0, -2.604074,1.446029,-0.081, + -2.621645,1.433078,-0.144, -2.670428,1.534053,-0.144, -2.650604,1.544903,-0.081, + -2.650604,1.544903,-0.081, -2.604074,1.446029,-0.081, -2.621645,1.433078,-0.144, + -2.647539,1.413994,-0.189, -2.699644,1.518063,-0.189, -2.670428,1.534053,-0.144, + -2.670428,1.534053,-0.144, -2.621645,1.433078,-0.144, -2.647539,1.413994,-0.189, + -2.678982,1.390819,-0.216, -2.735119,1.498648,-0.216, -2.699644,1.518063,-0.189, + -2.699644,1.518063,-0.189, -2.647539,1.413994,-0.189, -2.678982,1.390819,-0.216, + -2.7132,1.3656,-0.225, -2.773725,1.477519,-0.225, -2.735119,1.498648,-0.216, + -2.735119,1.498648,-0.216, -2.678982,1.390819,-0.216, -2.7132,1.3656,-0.225, + -2.747418,1.340381,-0.216, -2.812331,1.45639,-0.216, -2.773725,1.477519,-0.225, + -2.773725,1.477519,-0.225, -2.7132,1.3656,-0.225, -2.747418,1.340381,-0.216, + -2.778861,1.317206,-0.189, -2.847806,1.436974,-0.189, -2.812331,1.45639,-0.216, + -2.812331,1.45639,-0.216, -2.747418,1.340381,-0.216, -2.778861,1.317206,-0.189, + -2.804755,1.298122,-0.144, -2.877022,1.420985,-0.144, -2.847806,1.436974,-0.189, + -2.847806,1.436974,-0.189, -2.778861,1.317206,-0.189, -2.804755,1.298122,-0.144, + -2.822326,1.285171,-0.081, -2.896846,1.410135,-0.081, -2.877022,1.420985,-0.144, + -2.877022,1.420985,-0.144, -2.804755,1.298122,-0.144, -2.822326,1.285171,-0.081, + -2.8288,1.2804,0, -2.90415,1.406137,0, -2.896846,1.410135,-0.081, + -2.896846,1.410135,-0.081, -2.822326,1.285171,-0.081, -2.8288,1.2804,0, + -2.542925,1.344619,-0.081, -2.604074,1.446029,-0.081, -2.5976,1.4508,0, + -2.5976,1.4508,0, -2.5375,1.35,0, -2.542925,1.344619,-0.081, + -2.55765,1.330013,-0.144, -2.621645,1.433078,-0.144, -2.604074,1.446029,-0.081, + -2.604074,1.446029,-0.081, -2.542925,1.344619,-0.081, -2.55765,1.330013,-0.144, + -2.57935,1.308488,-0.189, -2.647539,1.413994,-0.189, -2.621645,1.433078,-0.144, + -2.621645,1.433078,-0.144, -2.55765,1.330013,-0.144, -2.57935,1.308488,-0.189, + -2.6057,1.28235,-0.216, -2.678982,1.390819,-0.216, -2.647539,1.413994,-0.189, + -2.647539,1.413994,-0.189, -2.57935,1.308488,-0.189, -2.6057,1.28235,-0.216, + -2.634375,1.253906,-0.225, -2.7132,1.3656,-0.225, -2.678982,1.390819,-0.216, + -2.678982,1.390819,-0.216, -2.6057,1.28235,-0.216, -2.634375,1.253906,-0.225, + -2.66305,1.225463,-0.216, -2.747418,1.340381,-0.216, -2.7132,1.3656,-0.225, + -2.7132,1.3656,-0.225, -2.634375,1.253906,-0.225, -2.66305,1.225463,-0.216, + -2.6894,1.199325,-0.189, -2.778861,1.317206,-0.189, -2.747418,1.340381,-0.216, + -2.747418,1.340381,-0.216, -2.66305,1.225463,-0.216, -2.6894,1.199325,-0.189, + -2.7111,1.1778,-0.144, -2.804755,1.298122,-0.144, -2.778861,1.317206,-0.189, + -2.778861,1.317206,-0.189, -2.6894,1.199325,-0.189, -2.7111,1.1778,-0.144, + -2.725825,1.163194,-0.081, -2.822326,1.285171,-0.081, -2.804755,1.298122,-0.144, + -2.804755,1.298122,-0.144, -2.7111,1.1778,-0.144, -2.725825,1.163194,-0.081, + -2.73125,1.157813,0, -2.8288,1.2804,0, -2.822326,1.285171,-0.081, + -2.822326,1.285171,-0.081, -2.725825,1.163194,-0.081, -2.73125,1.157813,0, + -2.466566,1.243303,-0.081, -2.542925,1.344619,-0.081, -2.5375,1.35,0, + -2.5375,1.35,0, -2.4624,1.2492,0, -2.466566,1.243303,-0.081, + -2.477875,1.227298,-0.144, -2.55765,1.330013,-0.144, -2.542925,1.344619,-0.081, + -2.542925,1.344619,-0.081, -2.466566,1.243303,-0.081, -2.477875,1.227298,-0.144, + -2.494541,1.20371,-0.189, -2.57935,1.308488,-0.189, -2.55765,1.330013,-0.144, + -2.55765,1.330013,-0.144, -2.477875,1.227298,-0.144, -2.494541,1.20371,-0.189, + -2.514778,1.175069,-0.216, -2.6057,1.28235,-0.216, -2.57935,1.308488,-0.189, + -2.57935,1.308488,-0.189, -2.494541,1.20371,-0.189, -2.514778,1.175069,-0.216, + -2.5368,1.1439,-0.225, -2.634375,1.253906,-0.225, -2.6057,1.28235,-0.216, + -2.6057,1.28235,-0.216, -2.514778,1.175069,-0.216, -2.5368,1.1439,-0.225, + -2.558822,1.112731,-0.216, -2.66305,1.225463,-0.216, -2.634375,1.253906,-0.225, + -2.634375,1.253906,-0.225, -2.5368,1.1439,-0.225, -2.558822,1.112731,-0.216, + -2.579059,1.08409,-0.189, -2.6894,1.199325,-0.189, -2.66305,1.225463,-0.216, + -2.66305,1.225463,-0.216, -2.558822,1.112731,-0.216, -2.579059,1.08409,-0.189, + -2.595725,1.060502,-0.144, -2.7111,1.1778,-0.144, -2.6894,1.199325,-0.189, + -2.6894,1.199325,-0.189, -2.579059,1.08409,-0.189, -2.595725,1.060502,-0.144, + -2.607034,1.044497,-0.081, -2.725825,1.163194,-0.081, -2.7111,1.1778,-0.144, + -2.7111,1.1778,-0.144, -2.595725,1.060502,-0.144, -2.607034,1.044497,-0.081, + -2.6112,1.0386,0, -2.73125,1.157813,0, -2.725825,1.163194,-0.081, + -2.725825,1.163194,-0.081, -2.607034,1.044497,-0.081, -2.6112,1.0386,0, + -2.374406,1.144713,-0.081, -2.466566,1.243303,-0.081, -2.4624,1.2492,0, + -2.4624,1.2492,0, -2.3717,1.1511,0, -2.374406,1.144713,-0.081, + -2.381752,1.127376,-0.144, -2.477875,1.227298,-0.144, -2.466566,1.243303,-0.081, + -2.466566,1.243303,-0.081, -2.374406,1.144713,-0.081, -2.381752,1.127376,-0.144, + -2.392576,1.101828,-0.189, -2.494541,1.20371,-0.189, -2.477875,1.227298,-0.144, + -2.477875,1.227298,-0.144, -2.381752,1.127376,-0.144, -2.392576,1.101828,-0.189, + -2.405721,1.070804,-0.216, -2.514778,1.175069,-0.216, -2.494541,1.20371,-0.189, + -2.494541,1.20371,-0.189, -2.392576,1.101828,-0.189, -2.405721,1.070804,-0.216, + -2.420025,1.037044,-0.225, -2.5368,1.1439,-0.225, -2.514778,1.175069,-0.216, + -2.514778,1.175069,-0.216, -2.405721,1.070804,-0.216, -2.420025,1.037044,-0.225, + -2.434329,1.003283,-0.216, -2.558822,1.112731,-0.216, -2.5368,1.1439,-0.225, + -2.5368,1.1439,-0.225, -2.420025,1.037044,-0.225, -2.434329,1.003283,-0.216, + -2.447474,0.97226,-0.189, -2.579059,1.08409,-0.189, -2.558822,1.112731,-0.216, + -2.558822,1.112731,-0.216, -2.434329,1.003283,-0.216, -2.447474,0.97226,-0.189, + -2.458298,0.946711,-0.144, -2.595725,1.060502,-0.144, -2.579059,1.08409,-0.189, + -2.579059,1.08409,-0.189, -2.447474,0.97226,-0.189, -2.458298,0.946711,-0.144, + -2.465644,0.929375,-0.081, -2.607034,1.044497,-0.081, -2.595725,1.060502,-0.144, + -2.595725,1.060502,-0.144, -2.458298,0.946711,-0.144, -2.465644,0.929375,-0.081, + -2.46835,0.922987,0, -2.6112,1.0386,0, -2.607034,1.044497,-0.081, + -2.607034,1.044497,-0.081, -2.465644,0.929375,-0.081, -2.46835,0.922987,0, + -2.265853,1.051478,-0.081, -2.374406,1.144713,-0.081, -2.3717,1.1511,0, + -2.3717,1.1511,0, -2.2648,1.0584,0, -2.265853,1.051478,-0.081, + -2.26871,1.032691,-0.144, -2.381752,1.127376,-0.144, -2.374406,1.144713,-0.081, + -2.374406,1.144713,-0.081, -2.265853,1.051478,-0.081, -2.26871,1.032691,-0.144, + -2.272922,1.005005,-0.189, -2.392576,1.101828,-0.189, -2.381752,1.127376,-0.144, + -2.381752,1.127376,-0.144, -2.26871,1.032691,-0.144, -2.272922,1.005005,-0.189, + -2.278035,0.971386,-0.216, -2.405721,1.070804,-0.216, -2.392576,1.101828,-0.189, + -2.392576,1.101828,-0.189, -2.272922,1.005005,-0.189, -2.278035,0.971386,-0.216, + -2.2836,0.9348,-0.225, -2.420025,1.037044,-0.225, -2.405721,1.070804,-0.216, + -2.405721,1.070804,-0.216, -2.278035,0.971386,-0.216, -2.2836,0.9348,-0.225, + -2.289165,0.898214,-0.216, -2.434329,1.003283,-0.216, -2.420025,1.037044,-0.225, + -2.420025,1.037044,-0.225, -2.2836,0.9348,-0.225, -2.289165,0.898214,-0.216, + -2.294278,0.864595,-0.189, -2.447474,0.97226,-0.189, -2.434329,1.003283,-0.216, + -2.434329,1.003283,-0.216, -2.289165,0.898214,-0.216, -2.294278,0.864595,-0.189, + -2.29849,0.836909,-0.144, -2.458298,0.946711,-0.144, -2.447474,0.97226,-0.189, + -2.447474,0.97226,-0.189, -2.294278,0.864595,-0.189, -2.29849,0.836909,-0.144, + -2.301347,0.818122,-0.081, -2.465644,0.929375,-0.081, -2.458298,0.946711,-0.144, + -2.458298,0.946711,-0.144, -2.29849,0.836909,-0.144, -2.301347,0.818122,-0.081, + -2.3024,0.8112,0, -2.46835,0.922987,0, -2.465644,0.929375,-0.081, + -2.465644,0.929375,-0.081, -2.301347,0.818122,-0.081, -2.3024,0.8112,0, + -2.140315,0.966231,-0.081, -2.265853,1.051478,-0.081, -2.2648,1.0584,0, + -2.2648,1.0584,0, -2.1411,0.9738,0, -2.140315,0.966231,-0.081, + -2.138183,0.945685,-0.144, -2.26871,1.032691,-0.144, -2.265853,1.051478,-0.081, + -2.265853,1.051478,-0.081, -2.140315,0.966231,-0.081, -2.138183,0.945685,-0.144, + -2.135041,0.915407,-0.189, -2.272922,1.005005,-0.189, -2.26871,1.032691,-0.144, + -2.26871,1.032691,-0.144, -2.138183,0.945685,-0.144, -2.135041,0.915407,-0.189, + -2.131226,0.878641,-0.216, -2.278035,0.971386,-0.216, -2.272922,1.005005,-0.189, + -2.272922,1.005005,-0.189, -2.135041,0.915407,-0.189, -2.131226,0.878641,-0.216, + -2.127075,0.838631,-0.225, -2.2836,0.9348,-0.225, -2.278035,0.971386,-0.216, + -2.278035,0.971386,-0.216, -2.131226,0.878641,-0.216, -2.127075,0.838631,-0.225, + -2.122924,0.798621,-0.216, -2.289165,0.898214,-0.216, -2.2836,0.9348,-0.225, + -2.2836,0.9348,-0.225, -2.127075,0.838631,-0.225, -2.122924,0.798621,-0.216, + -2.119109,0.761855,-0.189, -2.294278,0.864595,-0.189, -2.289165,0.898214,-0.216, + -2.289165,0.898214,-0.216, -2.122924,0.798621,-0.216, -2.119109,0.761855,-0.189, + -2.115967,0.731578,-0.144, -2.29849,0.836909,-0.144, -2.294278,0.864595,-0.189, + -2.294278,0.864595,-0.189, -2.119109,0.761855,-0.189, -2.115967,0.731578,-0.144, + -2.113835,0.711032,-0.081, -2.301347,0.818122,-0.081, -2.29849,0.836909,-0.144, + -2.29849,0.836909,-0.144, -2.115967,0.731578,-0.144, -2.113835,0.711032,-0.081, + -2.11305,0.703463,0, -2.3024,0.8112,0, -2.301347,0.818122,-0.081, + -2.301347,0.818122,-0.081, -2.113835,0.711032,-0.081, -2.11305,0.703463,0, + -1.9972,0.8916,-0.081, -2.140315,0.966231,-0.081, -2.1411,0.9738,0, + -2.1411,0.9738,0, -2,0.9,0, -1.9972,0.8916,-0.081, + -1.9896,0.8688,-0.144, -2.138183,0.945685,-0.144, -2.140315,0.966231,-0.081, + -2.140315,0.966231,-0.081, -1.9972,0.8916,-0.081, -1.9896,0.8688,-0.144, + -1.9784,0.8352,-0.189, -2.135041,0.915407,-0.189, -2.138183,0.945685,-0.144, + -2.138183,0.945685,-0.144, -1.9896,0.8688,-0.144, -1.9784,0.8352,-0.189, + -1.9648,0.7944,-0.216, -2.131226,0.878641,-0.216, -2.135041,0.915407,-0.189, + -2.135041,0.915407,-0.189, -1.9784,0.8352,-0.189, -1.9648,0.7944,-0.216, + -1.95,0.75,-0.225, -2.127075,0.838631,-0.225, -2.131226,0.878641,-0.216, + -2.131226,0.878641,-0.216, -1.9648,0.7944,-0.216, -1.95,0.75,-0.225, + -1.9352,0.7056,-0.216, -2.122924,0.798621,-0.216, -2.127075,0.838631,-0.225, + -2.127075,0.838631,-0.225, -1.95,0.75,-0.225, -1.9352,0.7056,-0.216, + -1.9216,0.6648,-0.189, -2.119109,0.761855,-0.189, -2.122924,0.798621,-0.216, + -2.122924,0.798621,-0.216, -1.9352,0.7056,-0.216, -1.9216,0.6648,-0.189, + -1.9104,0.6312,-0.144, -2.115967,0.731578,-0.144, -2.119109,0.761855,-0.189, + -2.119109,0.761855,-0.189, -1.9216,0.6648,-0.189, -1.9104,0.6312,-0.144, + -1.9028,0.6084,-0.081, -2.113835,0.711032,-0.081, -2.115967,0.731578,-0.144, + -2.115967,0.731578,-0.144, -1.9104,0.6312,-0.144, -1.9028,0.6084,-0.081, + -1.9,0.6,0, -2.11305,0.703463,0, -2.113835,0.711032,-0.081, + -2.113835,0.711032,-0.081, -1.9028,0.6084,-0.081, -1.9,0.6,0, + -2.981175,1.667844,0.081, -2.9916,1.8,0.081, -3,1.8,0, + -3,1.8,0, -2.98945,1.666162,0, -2.981175,1.667844,0.081, + -2.958713,1.672406,0.144, -2.9688,1.8,0.144, -2.9916,1.8,0.081, + -2.9916,1.8,0.081, -2.981175,1.667844,0.081, -2.958713,1.672406,0.144, + -2.925611,1.679131,0.189, -2.9352,1.8,0.189, -2.9688,1.8,0.144, + -2.9688,1.8,0.144, -2.958713,1.672406,0.144, -2.925611,1.679131,0.189, + -2.885416,1.687296,0.216, -2.8944,1.8,0.216, -2.9352,1.8,0.189, + -2.9352,1.8,0.189, -2.925611,1.679131,0.189, -2.885416,1.687296,0.216, + -2.841675,1.696181,0.225, -2.85,1.8,0.225, -2.8944,1.8,0.216, + -2.8944,1.8,0.216, -2.885416,1.687296,0.216, -2.841675,1.696181,0.225, + -2.797934,1.705067,0.216, -2.8056,1.8,0.216, -2.85,1.8,0.225, + -2.85,1.8,0.225, -2.841675,1.696181,0.225, -2.797934,1.705067,0.216, + -2.757739,1.713232,0.189, -2.7648,1.8,0.189, -2.8056,1.8,0.216, + -2.8056,1.8,0.216, -2.797934,1.705067,0.216, -2.757739,1.713232,0.189, + -2.724637,1.719956,0.144, -2.7312,1.8,0.144, -2.7648,1.8,0.189, + -2.7648,1.8,0.189, -2.757739,1.713232,0.189, -2.724637,1.719956,0.144, + -2.702175,1.724519,0.081, -2.7084,1.8,0.081, -2.7312,1.8,0.144, + -2.7312,1.8,0.144, -2.724637,1.719956,0.144, -2.702175,1.724519,0.081, + -2.6939,1.7262,0, -2.7,1.8,0, -2.7084,1.8,0.081, + -2.7084,1.8,0.081, -2.702175,1.724519,0.081, -2.6939,1.7262,0, + -2.949693,1.53779,0.081, -2.981175,1.667844,0.081, -2.98945,1.666162,0, + -2.98945,1.666162,0, -2.9576,1.5348,0, -2.949693,1.53779,0.081, + -2.92823,1.545907,0.144, -2.958713,1.672406,0.144, -2.981175,1.667844,0.081, + -2.981175,1.667844,0.081, -2.949693,1.53779,0.081, -2.92823,1.545907,0.144, + -2.896602,1.557869,0.189, -2.925611,1.679131,0.189, -2.958713,1.672406,0.144, + -2.958713,1.672406,0.144, -2.92823,1.545907,0.144, -2.896602,1.557869,0.189, + -2.858195,1.572394,0.216, -2.885416,1.687296,0.216, -2.925611,1.679131,0.189, + -2.925611,1.679131,0.189, -2.896602,1.557869,0.189, -2.858195,1.572394,0.216, + -2.8164,1.5882,0.225, -2.841675,1.696181,0.225, -2.885416,1.687296,0.216, + -2.885416,1.687296,0.216, -2.858195,1.572394,0.216, -2.8164,1.5882,0.225, + -2.774605,1.604006,0.216, -2.797934,1.705067,0.216, -2.841675,1.696181,0.225, + -2.841675,1.696181,0.225, -2.8164,1.5882,0.225, -2.774605,1.604006,0.216, + -2.736198,1.618531,0.189, -2.757739,1.713232,0.189, -2.797934,1.705067,0.216, + -2.797934,1.705067,0.216, -2.774605,1.604006,0.216, -2.736198,1.618531,0.189, + -2.70457,1.630493,0.144, -2.724637,1.719956,0.144, -2.757739,1.713232,0.189, + -2.757739,1.713232,0.189, -2.736198,1.618531,0.189, -2.70457,1.630493,0.144, + -2.683107,1.63861,0.081, -2.702175,1.724519,0.081, -2.724637,1.719956,0.144, + -2.724637,1.719956,0.144, -2.70457,1.630493,0.144, -2.683107,1.63861,0.081, + -2.6752,1.6416,0, -2.6939,1.7262,0, -2.702175,1.724519,0.081, + -2.702175,1.724519,0.081, -2.683107,1.63861,0.081, -2.6752,1.6416,0, + -2.896846,1.410135,0.081, -2.949693,1.53779,0.081, -2.9576,1.5348,0, + -2.9576,1.5348,0, -2.90415,1.406137,0, -2.896846,1.410135,0.081, + -2.877022,1.420985,0.144, -2.92823,1.545907,0.144, -2.949693,1.53779,0.081, + -2.949693,1.53779,0.081, -2.896846,1.410135,0.081, -2.877022,1.420985,0.144, + -2.847806,1.436974,0.189, -2.896602,1.557869,0.189, -2.92823,1.545907,0.144, + -2.92823,1.545907,0.144, -2.877022,1.420985,0.144, -2.847806,1.436974,0.189, + -2.812331,1.45639,0.216, -2.858195,1.572394,0.216, -2.896602,1.557869,0.189, + -2.896602,1.557869,0.189, -2.847806,1.436974,0.189, -2.812331,1.45639,0.216, + -2.773725,1.477519,0.225, -2.8164,1.5882,0.225, -2.858195,1.572394,0.216, + -2.858195,1.572394,0.216, -2.812331,1.45639,0.216, -2.773725,1.477519,0.225, + -2.735119,1.498648,0.216, -2.774605,1.604006,0.216, -2.8164,1.5882,0.225, + -2.8164,1.5882,0.225, -2.773725,1.477519,0.225, -2.735119,1.498648,0.216, + -2.699644,1.518063,0.189, -2.736198,1.618531,0.189, -2.774605,1.604006,0.216, + -2.774605,1.604006,0.216, -2.735119,1.498648,0.216, -2.699644,1.518063,0.189, + -2.670428,1.534053,0.144, -2.70457,1.630493,0.144, -2.736198,1.618531,0.189, + -2.736198,1.618531,0.189, -2.699644,1.518063,0.189, -2.670428,1.534053,0.144, + -2.650604,1.544903,0.081, -2.683107,1.63861,0.081, -2.70457,1.630493,0.144, + -2.70457,1.630493,0.144, -2.670428,1.534053,0.144, -2.650604,1.544903,0.081, + -2.6433,1.5489,0, -2.6752,1.6416,0, -2.683107,1.63861,0.081, + -2.683107,1.63861,0.081, -2.650604,1.544903,0.081, -2.6433,1.5489,0, + -2.822326,1.285171,0.081, -2.896846,1.410135,0.081, -2.90415,1.406137,0, + -2.90415,1.406137,0, -2.8288,1.2804,0, -2.822326,1.285171,0.081, + -2.804755,1.298122,0.144, -2.877022,1.420985,0.144, -2.896846,1.410135,0.081, + -2.896846,1.410135,0.081, -2.822326,1.285171,0.081, -2.804755,1.298122,0.144, + -2.778861,1.317206,0.189, -2.847806,1.436974,0.189, -2.877022,1.420985,0.144, + -2.877022,1.420985,0.144, -2.804755,1.298122,0.144, -2.778861,1.317206,0.189, + -2.747418,1.340381,0.216, -2.812331,1.45639,0.216, -2.847806,1.436974,0.189, + -2.847806,1.436974,0.189, -2.778861,1.317206,0.189, -2.747418,1.340381,0.216, + -2.7132,1.3656,0.225, -2.773725,1.477519,0.225, -2.812331,1.45639,0.216, + -2.812331,1.45639,0.216, -2.747418,1.340381,0.216, -2.7132,1.3656,0.225, + -2.678982,1.390819,0.216, -2.735119,1.498648,0.216, -2.773725,1.477519,0.225, + -2.773725,1.477519,0.225, -2.7132,1.3656,0.225, -2.678982,1.390819,0.216, + -2.647539,1.413994,0.189, -2.699644,1.518063,0.189, -2.735119,1.498648,0.216, + -2.735119,1.498648,0.216, -2.678982,1.390819,0.216, -2.647539,1.413994,0.189, + -2.621645,1.433078,0.144, -2.670428,1.534053,0.144, -2.699644,1.518063,0.189, + -2.699644,1.518063,0.189, -2.647539,1.413994,0.189, -2.621645,1.433078,0.144, + -2.604074,1.446029,0.081, -2.650604,1.544903,0.081, -2.670428,1.534053,0.144, + -2.670428,1.534053,0.144, -2.621645,1.433078,0.144, -2.604074,1.446029,0.081, + -2.5976,1.4508,0, -2.6433,1.5489,0, -2.650604,1.544903,0.081, + -2.650604,1.544903,0.081, -2.604074,1.446029,0.081, -2.5976,1.4508,0, + -2.725825,1.163194,0.081, -2.822326,1.285171,0.081, -2.8288,1.2804,0, + -2.8288,1.2804,0, -2.73125,1.157813,0, -2.725825,1.163194,0.081, + -2.7111,1.1778,0.144, -2.804755,1.298122,0.144, -2.822326,1.285171,0.081, + -2.822326,1.285171,0.081, -2.725825,1.163194,0.081, -2.7111,1.1778,0.144, + -2.6894,1.199325,0.189, -2.778861,1.317206,0.189, -2.804755,1.298122,0.144, + -2.804755,1.298122,0.144, -2.7111,1.1778,0.144, -2.6894,1.199325,0.189, + -2.66305,1.225463,0.216, -2.747418,1.340381,0.216, -2.778861,1.317206,0.189, + -2.778861,1.317206,0.189, -2.6894,1.199325,0.189, -2.66305,1.225463,0.216, + -2.634375,1.253906,0.225, -2.7132,1.3656,0.225, -2.747418,1.340381,0.216, + -2.747418,1.340381,0.216, -2.66305,1.225463,0.216, -2.634375,1.253906,0.225, + -2.6057,1.28235,0.216, -2.678982,1.390819,0.216, -2.7132,1.3656,0.225, + -2.7132,1.3656,0.225, -2.634375,1.253906,0.225, -2.6057,1.28235,0.216, + -2.57935,1.308488,0.189, -2.647539,1.413994,0.189, -2.678982,1.390819,0.216, + -2.678982,1.390819,0.216, -2.6057,1.28235,0.216, -2.57935,1.308488,0.189, + -2.55765,1.330013,0.144, -2.621645,1.433078,0.144, -2.647539,1.413994,0.189, + -2.647539,1.413994,0.189, -2.57935,1.308488,0.189, -2.55765,1.330013,0.144, + -2.542925,1.344619,0.081, -2.604074,1.446029,0.081, -2.621645,1.433078,0.144, + -2.621645,1.433078,0.144, -2.55765,1.330013,0.144, -2.542925,1.344619,0.081, + -2.5375,1.35,0, -2.5976,1.4508,0, -2.604074,1.446029,0.081, + -2.604074,1.446029,0.081, -2.542925,1.344619,0.081, -2.5375,1.35,0, + -2.607034,1.044497,0.081, -2.725825,1.163194,0.081, -2.73125,1.157813,0, + -2.73125,1.157813,0, -2.6112,1.0386,0, -2.607034,1.044497,0.081, + -2.595725,1.060502,0.144, -2.7111,1.1778,0.144, -2.725825,1.163194,0.081, + -2.725825,1.163194,0.081, -2.607034,1.044497,0.081, -2.595725,1.060502,0.144, + -2.579059,1.08409,0.189, -2.6894,1.199325,0.189, -2.7111,1.1778,0.144, + -2.7111,1.1778,0.144, -2.595725,1.060502,0.144, -2.579059,1.08409,0.189, + -2.558822,1.112731,0.216, -2.66305,1.225463,0.216, -2.6894,1.199325,0.189, + -2.6894,1.199325,0.189, -2.579059,1.08409,0.189, -2.558822,1.112731,0.216, + -2.5368,1.1439,0.225, -2.634375,1.253906,0.225, -2.66305,1.225463,0.216, + -2.66305,1.225463,0.216, -2.558822,1.112731,0.216, -2.5368,1.1439,0.225, + -2.514778,1.175069,0.216, -2.6057,1.28235,0.216, -2.634375,1.253906,0.225, + -2.634375,1.253906,0.225, -2.5368,1.1439,0.225, -2.514778,1.175069,0.216, + -2.494541,1.20371,0.189, -2.57935,1.308488,0.189, -2.6057,1.28235,0.216, + -2.6057,1.28235,0.216, -2.514778,1.175069,0.216, -2.494541,1.20371,0.189, + -2.477875,1.227298,0.144, -2.55765,1.330013,0.144, -2.57935,1.308488,0.189, + -2.57935,1.308488,0.189, -2.494541,1.20371,0.189, -2.477875,1.227298,0.144, + -2.466566,1.243303,0.081, -2.542925,1.344619,0.081, -2.55765,1.330013,0.144, + -2.55765,1.330013,0.144, -2.477875,1.227298,0.144, -2.466566,1.243303,0.081, + -2.4624,1.2492,0, -2.5375,1.35,0, -2.542925,1.344619,0.081, + -2.542925,1.344619,0.081, -2.466566,1.243303,0.081, -2.4624,1.2492,0, + -2.465644,0.929375,0.081, -2.607034,1.044497,0.081, -2.6112,1.0386,0, + -2.6112,1.0386,0, -2.46835,0.922987,0, -2.465644,0.929375,0.081, + -2.458298,0.946711,0.144, -2.595725,1.060502,0.144, -2.607034,1.044497,0.081, + -2.607034,1.044497,0.081, -2.465644,0.929375,0.081, -2.458298,0.946711,0.144, + -2.447474,0.97226,0.189, -2.579059,1.08409,0.189, -2.595725,1.060502,0.144, + -2.595725,1.060502,0.144, -2.458298,0.946711,0.144, -2.447474,0.97226,0.189, + -2.434329,1.003283,0.216, -2.558822,1.112731,0.216, -2.579059,1.08409,0.189, + -2.579059,1.08409,0.189, -2.447474,0.97226,0.189, -2.434329,1.003283,0.216, + -2.420025,1.037044,0.225, -2.5368,1.1439,0.225, -2.558822,1.112731,0.216, + -2.558822,1.112731,0.216, -2.434329,1.003283,0.216, -2.420025,1.037044,0.225, + -2.405721,1.070804,0.216, -2.514778,1.175069,0.216, -2.5368,1.1439,0.225, + -2.5368,1.1439,0.225, -2.420025,1.037044,0.225, -2.405721,1.070804,0.216, + -2.392576,1.101828,0.189, -2.494541,1.20371,0.189, -2.514778,1.175069,0.216, + -2.514778,1.175069,0.216, -2.405721,1.070804,0.216, -2.392576,1.101828,0.189, + -2.381752,1.127376,0.144, -2.477875,1.227298,0.144, -2.494541,1.20371,0.189, + -2.494541,1.20371,0.189, -2.392576,1.101828,0.189, -2.381752,1.127376,0.144, + -2.374406,1.144713,0.081, -2.466566,1.243303,0.081, -2.477875,1.227298,0.144, + -2.477875,1.227298,0.144, -2.381752,1.127376,0.144, -2.374406,1.144713,0.081, + -2.3717,1.1511,0, -2.4624,1.2492,0, -2.466566,1.243303,0.081, + -2.466566,1.243303,0.081, -2.374406,1.144713,0.081, -2.3717,1.1511,0, + -2.301347,0.818122,0.081, -2.465644,0.929375,0.081, -2.46835,0.922987,0, + -2.46835,0.922987,0, -2.3024,0.8112,0, -2.301347,0.818122,0.081, + -2.29849,0.836909,0.144, -2.458298,0.946711,0.144, -2.465644,0.929375,0.081, + -2.465644,0.929375,0.081, -2.301347,0.818122,0.081, -2.29849,0.836909,0.144, + -2.294278,0.864595,0.189, -2.447474,0.97226,0.189, -2.458298,0.946711,0.144, + -2.458298,0.946711,0.144, -2.29849,0.836909,0.144, -2.294278,0.864595,0.189, + -2.289165,0.898214,0.216, -2.434329,1.003283,0.216, -2.447474,0.97226,0.189, + -2.447474,0.97226,0.189, -2.294278,0.864595,0.189, -2.289165,0.898214,0.216, + -2.2836,0.9348,0.225, -2.420025,1.037044,0.225, -2.434329,1.003283,0.216, + -2.434329,1.003283,0.216, -2.289165,0.898214,0.216, -2.2836,0.9348,0.225, + -2.278035,0.971386,0.216, -2.405721,1.070804,0.216, -2.420025,1.037044,0.225, + -2.420025,1.037044,0.225, -2.2836,0.9348,0.225, -2.278035,0.971386,0.216, + -2.272922,1.005005,0.189, -2.392576,1.101828,0.189, -2.405721,1.070804,0.216, + -2.405721,1.070804,0.216, -2.278035,0.971386,0.216, -2.272922,1.005005,0.189, + -2.26871,1.032691,0.144, -2.381752,1.127376,0.144, -2.392576,1.101828,0.189, + -2.392576,1.101828,0.189, -2.272922,1.005005,0.189, -2.26871,1.032691,0.144, + -2.265853,1.051478,0.081, -2.374406,1.144713,0.081, -2.381752,1.127376,0.144, + -2.381752,1.127376,0.144, -2.26871,1.032691,0.144, -2.265853,1.051478,0.081, + -2.2648,1.0584,0, -2.3717,1.1511,0, -2.374406,1.144713,0.081, + -2.374406,1.144713,0.081, -2.265853,1.051478,0.081, -2.2648,1.0584,0, + -2.113835,0.711032,0.081, -2.301347,0.818122,0.081, -2.3024,0.8112,0, + -2.3024,0.8112,0, -2.11305,0.703463,0, -2.113835,0.711032,0.081, + -2.115967,0.731578,0.144, -2.29849,0.836909,0.144, -2.301347,0.818122,0.081, + -2.301347,0.818122,0.081, -2.113835,0.711032,0.081, -2.115967,0.731578,0.144, + -2.119109,0.761855,0.189, -2.294278,0.864595,0.189, -2.29849,0.836909,0.144, + -2.29849,0.836909,0.144, -2.115967,0.731578,0.144, -2.119109,0.761855,0.189, + -2.122924,0.798621,0.216, -2.289165,0.898214,0.216, -2.294278,0.864595,0.189, + -2.294278,0.864595,0.189, -2.119109,0.761855,0.189, -2.122924,0.798621,0.216, + -2.127075,0.838631,0.225, -2.2836,0.9348,0.225, -2.289165,0.898214,0.216, + -2.289165,0.898214,0.216, -2.122924,0.798621,0.216, -2.127075,0.838631,0.225, + -2.131226,0.878641,0.216, -2.278035,0.971386,0.216, -2.2836,0.9348,0.225, + -2.2836,0.9348,0.225, -2.127075,0.838631,0.225, -2.131226,0.878641,0.216, + -2.135041,0.915407,0.189, -2.272922,1.005005,0.189, -2.278035,0.971386,0.216, + -2.278035,0.971386,0.216, -2.131226,0.878641,0.216, -2.135041,0.915407,0.189, + -2.138183,0.945685,0.144, -2.26871,1.032691,0.144, -2.272922,1.005005,0.189, + -2.272922,1.005005,0.189, -2.135041,0.915407,0.189, -2.138183,0.945685,0.144, + -2.140315,0.966231,0.081, -2.265853,1.051478,0.081, -2.26871,1.032691,0.144, + -2.26871,1.032691,0.144, -2.138183,0.945685,0.144, -2.140315,0.966231,0.081, + -2.1411,0.9738,0, -2.2648,1.0584,0, -2.265853,1.051478,0.081, + -2.265853,1.051478,0.081, -2.140315,0.966231,0.081, -2.1411,0.9738,0, + -1.9028,0.6084,0.081, -2.113835,0.711032,0.081, -2.11305,0.703463,0, + -2.11305,0.703463,0, -1.9,0.6,0, -1.9028,0.6084,0.081, + -1.9104,0.6312,0.144, -2.115967,0.731578,0.144, -2.113835,0.711032,0.081, + -2.113835,0.711032,0.081, -1.9028,0.6084,0.081, -1.9104,0.6312,0.144, + -1.9216,0.6648,0.189, -2.119109,0.761855,0.189, -2.115967,0.731578,0.144, + -2.115967,0.731578,0.144, -1.9104,0.6312,0.144, -1.9216,0.6648,0.189, + -1.9352,0.7056,0.216, -2.122924,0.798621,0.216, -2.119109,0.761855,0.189, + -2.119109,0.761855,0.189, -1.9216,0.6648,0.189, -1.9352,0.7056,0.216, + -1.95,0.75,0.225, -2.127075,0.838631,0.225, -2.122924,0.798621,0.216, + -2.122924,0.798621,0.216, -1.9352,0.7056,0.216, -1.95,0.75,0.225, + -1.9648,0.7944,0.216, -2.131226,0.878641,0.216, -2.127075,0.838631,0.225, + -2.127075,0.838631,0.225, -1.95,0.75,0.225, -1.9648,0.7944,0.216, + -1.9784,0.8352,0.189, -2.135041,0.915407,0.189, -2.131226,0.878641,0.216, + -2.131226,0.878641,0.216, -1.9648,0.7944,0.216, -1.9784,0.8352,0.189, + -1.9896,0.8688,0.144, -2.138183,0.945685,0.144, -2.135041,0.915407,0.189, + -2.135041,0.915407,0.189, -1.9784,0.8352,0.189, -1.9896,0.8688,0.144, + -1.9972,0.8916,0.081, -2.140315,0.966231,0.081, -2.138183,0.945685,0.144, + -2.138183,0.945685,0.144, -1.9896,0.8688,0.144, -1.9972,0.8916,0.081, + -2,0.9,0, -2.1411,0.9738,0, -2.140315,0.966231,0.081, + -2.140315,0.966231,0.081, -1.9972,0.8916,0.081, -2,0.9,0, + 1.939394,1.423221,-0.1751, 1.7,1.4019,-0.1782, 1.7,1.425,0, + 1.7,1.425,0, 1.9359,1.4442,0, 1.939394,1.423221,-0.1751, + 1.948879,1.366278,-0.31129, 1.7,1.3392,-0.3168, 1.7,1.4019,-0.1782, + 1.7,1.4019,-0.1782, 1.939394,1.423221,-0.1751, 1.948879,1.366278,-0.31129, + 1.962857,1.282362,-0.408568, 1.7,1.2468,-0.4158, 1.7,1.3392,-0.3168, + 1.7,1.3392,-0.3168, 1.948879,1.366278,-0.31129, 1.962857,1.282362,-0.408568, + 1.97983,1.180464,-0.466934, 1.7,1.1346,-0.4752, 1.7,1.2468,-0.4158, + 1.7,1.2468,-0.4158, 1.962857,1.282362,-0.408568, 1.97983,1.180464,-0.466934, + 1.9983,1.069575,-0.48639, 1.7,1.0125,-0.495, 1.7,1.1346,-0.4752, + 1.7,1.1346,-0.4752, 1.97983,1.180464,-0.466934, 1.9983,1.069575,-0.48639, + 2.01677,0.958686,-0.466934, 1.7,0.8904,-0.4752, 1.7,1.0125,-0.495, + 1.7,1.0125,-0.495, 1.9983,1.069575,-0.48639, 2.01677,0.958686,-0.466934, + 2.033743,0.856788,-0.408568, 1.7,0.7782,-0.4158, 1.7,0.8904,-0.4752, + 1.7,0.8904,-0.4752, 2.01677,0.958686,-0.466934, 2.033743,0.856788,-0.408568, + 2.047721,0.772872,-0.31129, 1.7,0.6858,-0.3168, 1.7,0.7782,-0.4158, + 1.7,0.7782,-0.4158, 2.033743,0.856788,-0.408568, 2.047721,0.772872,-0.31129, + 2.057206,0.715929,-0.1751, 1.7,0.6231,-0.1782, 1.7,0.6858,-0.3168, + 1.7,0.6858,-0.3168, 2.047721,0.772872,-0.31129, 2.057206,0.715929,-0.1751, + 2.0607,0.69495,0, 1.7,0.6,0, 1.7,0.6231,-0.1782, + 1.7,0.6231,-0.1782, 2.057206,0.715929,-0.1751, 2.0607,0.69495,0, + 2.116979,1.47912,-0.166687, 1.939394,1.423221,-0.1751, 1.9359,1.4442,0, + 1.9359,1.4442,0, 2.1112,1.4976,0, 2.116979,1.47912,-0.166687, + 2.132666,1.42896,-0.296333, 1.948879,1.366278,-0.31129, 1.939394,1.423221,-0.1751, + 1.939394,1.423221,-0.1751, 2.116979,1.47912,-0.166687, 2.132666,1.42896,-0.296333, + 2.155782,1.35504,-0.388937, 1.962857,1.282362,-0.408568, 1.948879,1.366278,-0.31129, + 1.948879,1.366278,-0.31129, 2.132666,1.42896,-0.296333, 2.155782,1.35504,-0.388937, + 2.183853,1.26528,-0.444499, 1.97983,1.180464,-0.466934, 1.962857,1.282362,-0.408568, + 1.962857,1.282362,-0.408568, 2.155782,1.35504,-0.388937, 2.183853,1.26528,-0.444499, + 2.2144,1.1676,-0.46302, 1.9983,1.069575,-0.48639, 1.97983,1.180464,-0.466934, + 1.97983,1.180464,-0.466934, 2.183853,1.26528,-0.444499, 2.2144,1.1676,-0.46302, + 2.244947,1.06992,-0.444499, 2.01677,0.958686,-0.466934, 1.9983,1.069575,-0.48639, + 1.9983,1.069575,-0.48639, 2.2144,1.1676,-0.46302, 2.244947,1.06992,-0.444499, + 2.273018,0.98016,-0.388937, 2.033743,0.856788,-0.408568, 2.01677,0.958686,-0.466934, + 2.01677,0.958686,-0.466934, 2.244947,1.06992,-0.444499, 2.273018,0.98016,-0.388937, + 2.296134,0.90624,-0.296333, 2.047721,0.772872,-0.31129, 2.033743,0.856788,-0.408568, + 2.033743,0.856788,-0.408568, 2.273018,0.98016,-0.388937, 2.296134,0.90624,-0.296333, + 2.311821,0.85608,-0.166687, 2.057206,0.715929,-0.1751, 2.047721,0.772872,-0.31129, + 2.047721,0.772872,-0.31129, 2.296134,0.90624,-0.296333, 2.311821,0.85608,-0.166687, + 2.3176,0.8376,0, 2.0607,0.69495,0, 2.057206,0.715929,-0.1751, + 2.057206,0.715929,-0.1751, 2.311821,0.85608,-0.166687, 2.3176,0.8376,0, + 2.244457,1.563171,-0.154289, 2.116979,1.47912,-0.166687, 2.1112,1.4976,0, + 2.1112,1.4976,0, 2.2373,1.5789,0, 2.244457,1.563171,-0.154289, + 2.263882,1.520478,-0.274291, 2.132666,1.42896,-0.296333, 2.116979,1.47912,-0.166687, + 2.116979,1.47912,-0.166687, 2.244457,1.563171,-0.154289, 2.263882,1.520478,-0.274291, + 2.29251,1.457562,-0.360007, 2.155782,1.35504,-0.388937, 2.132666,1.42896,-0.296333, + 2.132666,1.42896,-0.296333, 2.263882,1.520478,-0.274291, 2.29251,1.457562,-0.360007, + 2.327271,1.381164,-0.411437, 2.183853,1.26528,-0.444499, 2.155782,1.35504,-0.388937, + 2.155782,1.35504,-0.388937, 2.29251,1.457562,-0.360007, 2.327271,1.381164,-0.411437, + 2.3651,1.298025,-0.42858, 2.2144,1.1676,-0.46302, 2.183853,1.26528,-0.444499, + 2.183853,1.26528,-0.444499, 2.327271,1.381164,-0.411437, 2.3651,1.298025,-0.42858, + 2.402929,1.214886,-0.411437, 2.244947,1.06992,-0.444499, 2.2144,1.1676,-0.46302, + 2.2144,1.1676,-0.46302, 2.3651,1.298025,-0.42858, 2.402929,1.214886,-0.411437, + 2.43769,1.138488,-0.360007, 2.273018,0.98016,-0.388937, 2.244947,1.06992,-0.444499, + 2.244947,1.06992,-0.444499, 2.402929,1.214886,-0.411437, 2.43769,1.138488,-0.360007, + 2.466318,1.075572,-0.274291, 2.296134,0.90624,-0.296333, 2.273018,0.98016,-0.388937, + 2.273018,0.98016,-0.388937, 2.43769,1.138488,-0.360007, 2.466318,1.075572,-0.274291, + 2.485743,1.032879,-0.154289, 2.311821,0.85608,-0.166687, 2.296134,0.90624,-0.296333, + 2.296134,0.90624,-0.296333, 2.466318,1.075572,-0.274291, 2.485743,1.032879,-0.154289, + 2.4929,1.01715,0, 2.3176,0.8376,0, 2.311821,0.85608,-0.166687, + 2.311821,0.85608,-0.166687, 2.485743,1.032879,-0.154289, 2.4929,1.01715,0, + 2.33353,1.668948,-0.139234, 2.244457,1.563171,-0.154289, 2.2373,1.5789,0, + 2.2373,1.5789,0, 2.3256,1.6818,0, 2.33353,1.668948,-0.139234, + 2.355053,1.634064,-0.247526, 2.263882,1.520478,-0.274291, 2.244457,1.563171,-0.154289, + 2.244457,1.563171,-0.154289, 2.33353,1.668948,-0.139234, 2.355053,1.634064,-0.247526, + 2.386771,1.582656,-0.324878, 2.29251,1.457562,-0.360007, 2.263882,1.520478,-0.274291, + 2.263882,1.520478,-0.274291, 2.355053,1.634064,-0.247526, 2.386771,1.582656,-0.324878, + 2.425286,1.520232,-0.37129, 2.327271,1.381164,-0.411437, 2.29251,1.457562,-0.360007, + 2.29251,1.457562,-0.360007, 2.386771,1.582656,-0.324878, 2.425286,1.520232,-0.37129, + 2.4672,1.4523,-0.38676, 2.3651,1.298025,-0.42858, 2.327271,1.381164,-0.411437, + 2.327271,1.381164,-0.411437, 2.425286,1.520232,-0.37129, 2.4672,1.4523,-0.38676, + 2.509114,1.384368,-0.37129, 2.402929,1.214886,-0.411437, 2.3651,1.298025,-0.42858, + 2.3651,1.298025,-0.42858, 2.4672,1.4523,-0.38676, 2.509114,1.384368,-0.37129, + 2.547629,1.321944,-0.324878, 2.43769,1.138488,-0.360007, 2.402929,1.214886,-0.411437, + 2.402929,1.214886,-0.411437, 2.509114,1.384368,-0.37129, 2.547629,1.321944,-0.324878, + 2.579347,1.270536,-0.247526, 2.466318,1.075572,-0.274291, 2.43769,1.138488,-0.360007, + 2.43769,1.138488,-0.360007, 2.547629,1.321944,-0.324878, 2.579347,1.270536,-0.247526, + 2.60087,1.235652,-0.139234, 2.485743,1.032879,-0.154289, 2.466318,1.075572,-0.274291, + 2.466318,1.075572,-0.274291, 2.579347,1.270536,-0.247526, 2.60087,1.235652,-0.139234, + 2.6088,1.2228,0, 2.4929,1.01715,0, 2.485743,1.032879,-0.154289, + 2.485743,1.032879,-0.154289, 2.60087,1.235652,-0.139234, 2.6088,1.2228,0, + 2.3959,1.790025,-0.12285, 2.33353,1.668948,-0.139234, 2.3256,1.6818,0, + 2.3256,1.6818,0, 2.3875,1.8,0, 2.3959,1.790025,-0.12285, + 2.4187,1.76295,-0.2184, 2.355053,1.634064,-0.247526, 2.33353,1.668948,-0.139234, + 2.33353,1.668948,-0.139234, 2.3959,1.790025,-0.12285, 2.4187,1.76295,-0.2184, + 2.4523,1.72305,-0.28665, 2.386771,1.582656,-0.324878, 2.355053,1.634064,-0.247526, + 2.355053,1.634064,-0.247526, 2.4187,1.76295,-0.2184, 2.4523,1.72305,-0.28665, + 2.4931,1.6746,-0.3276, 2.425286,1.520232,-0.37129, 2.386771,1.582656,-0.324878, + 2.386771,1.582656,-0.324878, 2.4523,1.72305,-0.28665, 2.4931,1.6746,-0.3276, + 2.5375,1.621875,-0.34125, 2.4672,1.4523,-0.38676, 2.425286,1.520232,-0.37129, + 2.425286,1.520232,-0.37129, 2.4931,1.6746,-0.3276, 2.5375,1.621875,-0.34125, + 2.5819,1.56915,-0.3276, 2.509114,1.384368,-0.37129, 2.4672,1.4523,-0.38676, + 2.4672,1.4523,-0.38676, 2.5375,1.621875,-0.34125, 2.5819,1.56915,-0.3276, + 2.6227,1.5207,-0.28665, 2.547629,1.321944,-0.324878, 2.509114,1.384368,-0.37129, + 2.509114,1.384368,-0.37129, 2.5819,1.56915,-0.3276, 2.6227,1.5207,-0.28665, + 2.6563,1.4808,-0.2184, 2.579347,1.270536,-0.247526, 2.547629,1.321944,-0.324878, + 2.547629,1.321944,-0.324878, 2.6227,1.5207,-0.28665, 2.6563,1.4808,-0.2184, + 2.6791,1.453725,-0.12285, 2.60087,1.235652,-0.139234, 2.579347,1.270536,-0.247526, + 2.579347,1.270536,-0.247526, 2.6563,1.4808,-0.2184, 2.6791,1.453725,-0.12285, + 2.6875,1.44375,0, 2.6088,1.2228,0, 2.60087,1.235652,-0.139234, + 2.60087,1.235652,-0.139234, 2.6791,1.453725,-0.12285, 2.6875,1.44375,0, + 2.44327,1.919976,-0.106466, 2.3959,1.790025,-0.12285, 2.3875,1.8,0, + 2.3875,1.8,0, 2.4344,1.9272,0, 2.44327,1.919976,-0.106466, + 2.467347,1.900368,-0.189274, 2.4187,1.76295,-0.2184, 2.3959,1.790025,-0.12285, + 2.3959,1.790025,-0.12285, 2.44327,1.919976,-0.106466, 2.467347,1.900368,-0.189274, + 2.502829,1.871472,-0.248422, 2.4523,1.72305,-0.28665, 2.4187,1.76295,-0.2184, + 2.4187,1.76295,-0.2184, 2.467347,1.900368,-0.189274, 2.502829,1.871472,-0.248422, + 2.545914,1.836384,-0.28391, 2.4931,1.6746,-0.3276, 2.4523,1.72305,-0.28665, + 2.4523,1.72305,-0.28665, 2.502829,1.871472,-0.248422, 2.545914,1.836384,-0.28391, + 2.5928,1.7982,-0.29574, 2.5375,1.621875,-0.34125, 2.4931,1.6746,-0.3276, + 2.4931,1.6746,-0.3276, 2.545914,1.836384,-0.28391, 2.5928,1.7982,-0.29574, + 2.639686,1.760016,-0.28391, 2.5819,1.56915,-0.3276, 2.5375,1.621875,-0.34125, + 2.5375,1.621875,-0.34125, 2.5928,1.7982,-0.29574, 2.639686,1.760016,-0.28391, + 2.682771,1.724928,-0.248422, 2.6227,1.5207,-0.28665, 2.5819,1.56915,-0.3276, + 2.5819,1.56915,-0.3276, 2.639686,1.760016,-0.28391, 2.682771,1.724928,-0.248422, + 2.718253,1.696032,-0.189274, 2.6563,1.4808,-0.2184, 2.6227,1.5207,-0.28665, + 2.6227,1.5207,-0.28665, 2.682771,1.724928,-0.248422, 2.718253,1.696032,-0.189274, + 2.74233,1.676424,-0.106466, 2.6791,1.453725,-0.12285, 2.6563,1.4808,-0.2184, + 2.6563,1.4808,-0.2184, 2.718253,1.696032,-0.189274, 2.74233,1.676424,-0.106466, + 2.7512,1.6692,0, 2.6875,1.44375,0, 2.6791,1.453725,-0.12285, + 2.6791,1.453725,-0.12285, 2.74233,1.676424,-0.106466, 2.7512,1.6692,0, + 2.487343,2.052375,-0.091411, 2.44327,1.919976,-0.106466, 2.4344,1.9272,0, + 2.4344,1.9272,0, 2.4777,2.0571,0, 2.487343,2.052375,-0.091411, + 2.513518,2.03955,-0.162509, 2.467347,1.900368,-0.189274, 2.44327,1.919976,-0.106466, + 2.44327,1.919976,-0.106466, 2.487343,2.052375,-0.091411, 2.513518,2.03955,-0.162509, + 2.55209,2.02065,-0.213293, 2.502829,1.871472,-0.248422, 2.467347,1.900368,-0.189274, + 2.467347,1.900368,-0.189274, 2.513518,2.03955,-0.162509, 2.55209,2.02065,-0.213293, + 2.598929,1.9977,-0.243763, 2.545914,1.836384,-0.28391, 2.502829,1.871472,-0.248422, + 2.502829,1.871472,-0.248422, 2.55209,2.02065,-0.213293, 2.598929,1.9977,-0.243763, + 2.6499,1.972725,-0.25392, 2.5928,1.7982,-0.29574, 2.545914,1.836384,-0.28391, + 2.545914,1.836384,-0.28391, 2.598929,1.9977,-0.243763, 2.6499,1.972725,-0.25392, + 2.700871,1.94775,-0.243763, 2.639686,1.760016,-0.28391, 2.5928,1.7982,-0.29574, + 2.5928,1.7982,-0.29574, 2.6499,1.972725,-0.25392, 2.700871,1.94775,-0.243763, + 2.74771,1.9248,-0.213293, 2.682771,1.724928,-0.248422, 2.639686,1.760016,-0.28391, + 2.639686,1.760016,-0.28391, 2.700871,1.94775,-0.243763, 2.74771,1.9248,-0.213293, + 2.786282,1.9059,-0.162509, 2.718253,1.696032,-0.189274, 2.682771,1.724928,-0.248422, + 2.682771,1.724928,-0.248422, 2.74771,1.9248,-0.213293, 2.786282,1.9059,-0.162509, + 2.812457,1.893075,-0.091411, 2.74233,1.676424,-0.106466, 2.718253,1.696032,-0.189274, + 2.718253,1.696032,-0.189274, 2.786282,1.9059,-0.162509, 2.812457,1.893075,-0.091411, + 2.8221,1.88835,0, 2.7512,1.6692,0, 2.74233,1.676424,-0.106466, + 2.74233,1.676424,-0.106466, 2.812457,1.893075,-0.091411, 2.8221,1.88835,0, + 2.539821,2.180796,-0.079013, 2.487343,2.052375,-0.091411, 2.4777,2.0571,0, + 2.4777,2.0571,0, 2.5288,2.1834,0, 2.539821,2.180796,-0.079013, + 2.569734,2.173728,-0.140467, 2.513518,2.03955,-0.162509, 2.487343,2.052375,-0.091411, + 2.487343,2.052375,-0.091411, 2.539821,2.180796,-0.079013, 2.569734,2.173728,-0.140467, + 2.613818,2.163312,-0.184363, 2.55209,2.02065,-0.213293, 2.513518,2.03955,-0.162509, + 2.513518,2.03955,-0.162509, 2.569734,2.173728,-0.140467, 2.613818,2.163312,-0.184363, + 2.667347,2.150664,-0.210701, 2.598929,1.9977,-0.243763, 2.55209,2.02065,-0.213293, + 2.55209,2.02065,-0.213293, 2.613818,2.163312,-0.184363, 2.667347,2.150664,-0.210701, + 2.7256,2.1369,-0.21948, 2.6499,1.972725,-0.25392, 2.598929,1.9977,-0.243763, + 2.598929,1.9977,-0.243763, 2.667347,2.150664,-0.210701, 2.7256,2.1369,-0.21948, + 2.783853,2.123136,-0.210701, 2.700871,1.94775,-0.243763, 2.6499,1.972725,-0.25392, + 2.6499,1.972725,-0.25392, 2.7256,2.1369,-0.21948, 2.783853,2.123136,-0.210701, + 2.837382,2.110488,-0.184363, 2.74771,1.9248,-0.213293, 2.700871,1.94775,-0.243763, + 2.700871,1.94775,-0.243763, 2.783853,2.123136,-0.210701, 2.837382,2.110488,-0.184363, + 2.881466,2.100072,-0.140467, 2.786282,1.9059,-0.162509, 2.74771,1.9248,-0.213293, + 2.74771,1.9248,-0.213293, 2.837382,2.110488,-0.184363, 2.881466,2.100072,-0.140467, + 2.911379,2.093004,-0.079013, 2.812457,1.893075,-0.091411, 2.786282,1.9059,-0.162509, + 2.786282,1.9059,-0.162509, 2.881466,2.100072,-0.140467, 2.911379,2.093004,-0.079013, + 2.9224,2.0904,0, 2.8221,1.88835,0, 2.812457,1.893075,-0.091411, + 2.812457,1.893075,-0.091411, 2.911379,2.093004,-0.079013, 2.9224,2.0904,0, + 2.612406,2.298813,-0.0706, 2.539821,2.180796,-0.079013, 2.5288,2.1834,0, + 2.5288,2.1834,0, 2.5991,2.2998,0, 2.612406,2.298813,-0.0706, + 2.648521,2.296134,-0.12551, 2.569734,2.173728,-0.140467, 2.539821,2.180796,-0.079013, + 2.539821,2.180796,-0.079013, 2.612406,2.298813,-0.0706, 2.648521,2.296134,-0.12551, + 2.701743,2.292186,-0.164732, 2.613818,2.163312,-0.184363, 2.569734,2.173728,-0.140467, + 2.569734,2.173728,-0.140467, 2.648521,2.296134,-0.12551, 2.701743,2.292186,-0.164732, + 2.76637,2.287392,-0.188266, 2.667347,2.150664,-0.210701, 2.613818,2.163312,-0.184363, + 2.613818,2.163312,-0.184363, 2.701743,2.292186,-0.164732, 2.76637,2.287392,-0.188266, + 2.8367,2.282175,-0.19611, 2.7256,2.1369,-0.21948, 2.667347,2.150664,-0.210701, + 2.667347,2.150664,-0.210701, 2.76637,2.287392,-0.188266, 2.8367,2.282175,-0.19611, + 2.90703,2.276958,-0.188266, 2.783853,2.123136,-0.210701, 2.7256,2.1369,-0.21948, + 2.7256,2.1369,-0.21948, 2.8367,2.282175,-0.19611, 2.90703,2.276958,-0.188266, + 2.971657,2.272164,-0.164732, 2.837382,2.110488,-0.184363, 2.783853,2.123136,-0.210701, + 2.783853,2.123136,-0.210701, 2.90703,2.276958,-0.188266, 2.971657,2.272164,-0.164732, + 3.024879,2.268216,-0.12551, 2.881466,2.100072,-0.140467, 2.837382,2.110488,-0.184363, + 2.837382,2.110488,-0.184363, 2.971657,2.272164,-0.164732, 3.024879,2.268216,-0.12551, + 3.060994,2.265537,-0.0706, 2.911379,2.093004,-0.079013, 2.881466,2.100072,-0.140467, + 2.881466,2.100072,-0.140467, 3.024879,2.268216,-0.12551, 3.060994,2.265537,-0.0706, + 3.0743,2.26455,0, 2.9224,2.0904,0, 2.911379,2.093004,-0.079013, + 2.911379,2.093004,-0.079013, 3.060994,2.265537,-0.0706, 3.0743,2.26455,0, + 2.7168,2.4,-0.0675, 2.612406,2.298813,-0.0706, 2.5991,2.2998,0, + 2.5991,2.2998,0, 2.7,2.4,0, 2.7168,2.4,-0.0675, + 2.7624,2.4,-0.12, 2.648521,2.296134,-0.12551, 2.612406,2.298813,-0.0706, + 2.612406,2.298813,-0.0706, 2.7168,2.4,-0.0675, 2.7624,2.4,-0.12, + 2.8296,2.4,-0.1575, 2.701743,2.292186,-0.164732, 2.648521,2.296134,-0.12551, + 2.648521,2.296134,-0.12551, 2.7624,2.4,-0.12, 2.8296,2.4,-0.1575, + 2.9112,2.4,-0.18, 2.76637,2.287392,-0.188266, 2.701743,2.292186,-0.164732, + 2.701743,2.292186,-0.164732, 2.8296,2.4,-0.1575, 2.9112,2.4,-0.18, + 3,2.4,-0.1875, 2.8367,2.282175,-0.19611, 2.76637,2.287392,-0.188266, + 2.76637,2.287392,-0.188266, 2.9112,2.4,-0.18, 3,2.4,-0.1875, + 3.0888,2.4,-0.18, 2.90703,2.276958,-0.188266, 2.8367,2.282175,-0.19611, + 2.8367,2.282175,-0.19611, 3,2.4,-0.1875, 3.0888,2.4,-0.18, + 3.1704,2.4,-0.1575, 2.971657,2.272164,-0.164732, 2.90703,2.276958,-0.188266, + 2.90703,2.276958,-0.188266, 3.0888,2.4,-0.18, 3.1704,2.4,-0.1575, + 3.2376,2.4,-0.12, 3.024879,2.268216,-0.12551, 2.971657,2.272164,-0.164732, + 2.971657,2.272164,-0.164732, 3.1704,2.4,-0.1575, 3.2376,2.4,-0.12, + 3.2832,2.4,-0.0675, 3.060994,2.265537,-0.0706, 3.024879,2.268216,-0.12551, + 3.024879,2.268216,-0.12551, 3.2376,2.4,-0.12, 3.2832,2.4,-0.0675, + 3.3,2.4,0, 3.0743,2.26455,0, 3.060994,2.265537,-0.0706, + 3.060994,2.265537,-0.0706, 3.2832,2.4,-0.0675, 3.3,2.4,0, + 2.057206,0.715929,0.1751, 1.7,0.6231,0.1782, 1.7,0.6,0, + 1.7,0.6,0, 2.0607,0.69495,0, 2.057206,0.715929,0.1751, + 2.047721,0.772872,0.31129, 1.7,0.6858,0.3168, 1.7,0.6231,0.1782, + 1.7,0.6231,0.1782, 2.057206,0.715929,0.1751, 2.047721,0.772872,0.31129, + 2.033743,0.856788,0.408568, 1.7,0.7782,0.4158, 1.7,0.6858,0.3168, + 1.7,0.6858,0.3168, 2.047721,0.772872,0.31129, 2.033743,0.856788,0.408568, + 2.01677,0.958686,0.466934, 1.7,0.8904,0.4752, 1.7,0.7782,0.4158, + 1.7,0.7782,0.4158, 2.033743,0.856788,0.408568, 2.01677,0.958686,0.466934, + 1.9983,1.069575,0.48639, 1.7,1.0125,0.495, 1.7,0.8904,0.4752, + 1.7,0.8904,0.4752, 2.01677,0.958686,0.466934, 1.9983,1.069575,0.48639, + 1.97983,1.180464,0.466934, 1.7,1.1346,0.4752, 1.7,1.0125,0.495, + 1.7,1.0125,0.495, 1.9983,1.069575,0.48639, 1.97983,1.180464,0.466934, + 1.962857,1.282362,0.408568, 1.7,1.2468,0.4158, 1.7,1.1346,0.4752, + 1.7,1.1346,0.4752, 1.97983,1.180464,0.466934, 1.962857,1.282362,0.408568, + 1.948879,1.366278,0.31129, 1.7,1.3392,0.3168, 1.7,1.2468,0.4158, + 1.7,1.2468,0.4158, 1.962857,1.282362,0.408568, 1.948879,1.366278,0.31129, + 1.939394,1.423221,0.1751, 1.7,1.4019,0.1782, 1.7,1.3392,0.3168, + 1.7,1.3392,0.3168, 1.948879,1.366278,0.31129, 1.939394,1.423221,0.1751, + 1.9359,1.4442,0, 1.7,1.425,0, 1.7,1.4019,0.1782, + 1.7,1.4019,0.1782, 1.939394,1.423221,0.1751, 1.9359,1.4442,0, + 2.311821,0.85608,0.166687, 2.057206,0.715929,0.1751, 2.0607,0.69495,0, + 2.0607,0.69495,0, 2.3176,0.8376,0, 2.311821,0.85608,0.166687, + 2.296134,0.90624,0.296333, 2.047721,0.772872,0.31129, 2.057206,0.715929,0.1751, + 2.057206,0.715929,0.1751, 2.311821,0.85608,0.166687, 2.296134,0.90624,0.296333, + 2.273018,0.98016,0.388937, 2.033743,0.856788,0.408568, 2.047721,0.772872,0.31129, + 2.047721,0.772872,0.31129, 2.296134,0.90624,0.296333, 2.273018,0.98016,0.388937, + 2.244947,1.06992,0.444499, 2.01677,0.958686,0.466934, 2.033743,0.856788,0.408568, + 2.033743,0.856788,0.408568, 2.273018,0.98016,0.388937, 2.244947,1.06992,0.444499, + 2.2144,1.1676,0.46302, 1.9983,1.069575,0.48639, 2.01677,0.958686,0.466934, + 2.01677,0.958686,0.466934, 2.244947,1.06992,0.444499, 2.2144,1.1676,0.46302, + 2.183853,1.26528,0.444499, 1.97983,1.180464,0.466934, 1.9983,1.069575,0.48639, + 1.9983,1.069575,0.48639, 2.2144,1.1676,0.46302, 2.183853,1.26528,0.444499, + 2.155782,1.35504,0.388937, 1.962857,1.282362,0.408568, 1.97983,1.180464,0.466934, + 1.97983,1.180464,0.466934, 2.183853,1.26528,0.444499, 2.155782,1.35504,0.388937, + 2.132666,1.42896,0.296333, 1.948879,1.366278,0.31129, 1.962857,1.282362,0.408568, + 1.962857,1.282362,0.408568, 2.155782,1.35504,0.388937, 2.132666,1.42896,0.296333, + 2.116979,1.47912,0.166687, 1.939394,1.423221,0.1751, 1.948879,1.366278,0.31129, + 1.948879,1.366278,0.31129, 2.132666,1.42896,0.296333, 2.116979,1.47912,0.166687, + 2.1112,1.4976,0, 1.9359,1.4442,0, 1.939394,1.423221,0.1751, + 1.939394,1.423221,0.1751, 2.116979,1.47912,0.166687, 2.1112,1.4976,0, + 2.485743,1.032879,0.154289, 2.311821,0.85608,0.166687, 2.3176,0.8376,0, + 2.3176,0.8376,0, 2.4929,1.01715,0, 2.485743,1.032879,0.154289, + 2.466318,1.075572,0.274291, 2.296134,0.90624,0.296333, 2.311821,0.85608,0.166687, + 2.311821,0.85608,0.166687, 2.485743,1.032879,0.154289, 2.466318,1.075572,0.274291, + 2.43769,1.138488,0.360007, 2.273018,0.98016,0.388937, 2.296134,0.90624,0.296333, + 2.296134,0.90624,0.296333, 2.466318,1.075572,0.274291, 2.43769,1.138488,0.360007, + 2.402929,1.214886,0.411437, 2.244947,1.06992,0.444499, 2.273018,0.98016,0.388937, + 2.273018,0.98016,0.388937, 2.43769,1.138488,0.360007, 2.402929,1.214886,0.411437, + 2.3651,1.298025,0.42858, 2.2144,1.1676,0.46302, 2.244947,1.06992,0.444499, + 2.244947,1.06992,0.444499, 2.402929,1.214886,0.411437, 2.3651,1.298025,0.42858, + 2.327271,1.381164,0.411437, 2.183853,1.26528,0.444499, 2.2144,1.1676,0.46302, + 2.2144,1.1676,0.46302, 2.3651,1.298025,0.42858, 2.327271,1.381164,0.411437, + 2.29251,1.457562,0.360007, 2.155782,1.35504,0.388937, 2.183853,1.26528,0.444499, + 2.183853,1.26528,0.444499, 2.327271,1.381164,0.411437, 2.29251,1.457562,0.360007, + 2.263882,1.520478,0.274291, 2.132666,1.42896,0.296333, 2.155782,1.35504,0.388937, + 2.155782,1.35504,0.388937, 2.29251,1.457562,0.360007, 2.263882,1.520478,0.274291, + 2.244457,1.563171,0.154289, 2.116979,1.47912,0.166687, 2.132666,1.42896,0.296333, + 2.132666,1.42896,0.296333, 2.263882,1.520478,0.274291, 2.244457,1.563171,0.154289, + 2.2373,1.5789,0, 2.1112,1.4976,0, 2.116979,1.47912,0.166687, + 2.116979,1.47912,0.166687, 2.244457,1.563171,0.154289, 2.2373,1.5789,0, + 2.60087,1.235652,0.139234, 2.485743,1.032879,0.154289, 2.4929,1.01715,0, + 2.4929,1.01715,0, 2.6088,1.2228,0, 2.60087,1.235652,0.139234, + 2.579347,1.270536,0.247526, 2.466318,1.075572,0.274291, 2.485743,1.032879,0.154289, + 2.485743,1.032879,0.154289, 2.60087,1.235652,0.139234, 2.579347,1.270536,0.247526, + 2.547629,1.321944,0.324878, 2.43769,1.138488,0.360007, 2.466318,1.075572,0.274291, + 2.466318,1.075572,0.274291, 2.579347,1.270536,0.247526, 2.547629,1.321944,0.324878, + 2.509114,1.384368,0.37129, 2.402929,1.214886,0.411437, 2.43769,1.138488,0.360007, + 2.43769,1.138488,0.360007, 2.547629,1.321944,0.324878, 2.509114,1.384368,0.37129, + 2.4672,1.4523,0.38676, 2.3651,1.298025,0.42858, 2.402929,1.214886,0.411437, + 2.402929,1.214886,0.411437, 2.509114,1.384368,0.37129, 2.4672,1.4523,0.38676, + 2.425286,1.520232,0.37129, 2.327271,1.381164,0.411437, 2.3651,1.298025,0.42858, + 2.3651,1.298025,0.42858, 2.4672,1.4523,0.38676, 2.425286,1.520232,0.37129, + 2.386771,1.582656,0.324878, 2.29251,1.457562,0.360007, 2.327271,1.381164,0.411437, + 2.327271,1.381164,0.411437, 2.425286,1.520232,0.37129, 2.386771,1.582656,0.324878, + 2.355053,1.634064,0.247526, 2.263882,1.520478,0.274291, 2.29251,1.457562,0.360007, + 2.29251,1.457562,0.360007, 2.386771,1.582656,0.324878, 2.355053,1.634064,0.247526, + 2.33353,1.668948,0.139234, 2.244457,1.563171,0.154289, 2.263882,1.520478,0.274291, + 2.263882,1.520478,0.274291, 2.355053,1.634064,0.247526, 2.33353,1.668948,0.139234, + 2.3256,1.6818,0, 2.2373,1.5789,0, 2.244457,1.563171,0.154289, + 2.244457,1.563171,0.154289, 2.33353,1.668948,0.139234, 2.3256,1.6818,0, + 2.6791,1.453725,0.12285, 2.60087,1.235652,0.139234, 2.6088,1.2228,0, + 2.6088,1.2228,0, 2.6875,1.44375,0, 2.6791,1.453725,0.12285, + 2.6563,1.4808,0.2184, 2.579347,1.270536,0.247526, 2.60087,1.235652,0.139234, + 2.60087,1.235652,0.139234, 2.6791,1.453725,0.12285, 2.6563,1.4808,0.2184, + 2.6227,1.5207,0.28665, 2.547629,1.321944,0.324878, 2.579347,1.270536,0.247526, + 2.579347,1.270536,0.247526, 2.6563,1.4808,0.2184, 2.6227,1.5207,0.28665, + 2.5819,1.56915,0.3276, 2.509114,1.384368,0.37129, 2.547629,1.321944,0.324878, + 2.547629,1.321944,0.324878, 2.6227,1.5207,0.28665, 2.5819,1.56915,0.3276, + 2.5375,1.621875,0.34125, 2.4672,1.4523,0.38676, 2.509114,1.384368,0.37129, + 2.509114,1.384368,0.37129, 2.5819,1.56915,0.3276, 2.5375,1.621875,0.34125, + 2.4931,1.6746,0.3276, 2.425286,1.520232,0.37129, 2.4672,1.4523,0.38676, + 2.4672,1.4523,0.38676, 2.5375,1.621875,0.34125, 2.4931,1.6746,0.3276, + 2.4523,1.72305,0.28665, 2.386771,1.582656,0.324878, 2.425286,1.520232,0.37129, + 2.425286,1.520232,0.37129, 2.4931,1.6746,0.3276, 2.4523,1.72305,0.28665, + 2.4187,1.76295,0.2184, 2.355053,1.634064,0.247526, 2.386771,1.582656,0.324878, + 2.386771,1.582656,0.324878, 2.4523,1.72305,0.28665, 2.4187,1.76295,0.2184, + 2.3959,1.790025,0.12285, 2.33353,1.668948,0.139234, 2.355053,1.634064,0.247526, + 2.355053,1.634064,0.247526, 2.4187,1.76295,0.2184, 2.3959,1.790025,0.12285, + 2.3875,1.8,0, 2.3256,1.6818,0, 2.33353,1.668948,0.139234, + 2.33353,1.668948,0.139234, 2.3959,1.790025,0.12285, 2.3875,1.8,0, + 2.74233,1.676424,0.106466, 2.6791,1.453725,0.12285, 2.6875,1.44375,0, + 2.6875,1.44375,0, 2.7512,1.6692,0, 2.74233,1.676424,0.106466, + 2.718253,1.696032,0.189274, 2.6563,1.4808,0.2184, 2.6791,1.453725,0.12285, + 2.6791,1.453725,0.12285, 2.74233,1.676424,0.106466, 2.718253,1.696032,0.189274, + 2.682771,1.724928,0.248422, 2.6227,1.5207,0.28665, 2.6563,1.4808,0.2184, + 2.6563,1.4808,0.2184, 2.718253,1.696032,0.189274, 2.682771,1.724928,0.248422, + 2.639686,1.760016,0.28391, 2.5819,1.56915,0.3276, 2.6227,1.5207,0.28665, + 2.6227,1.5207,0.28665, 2.682771,1.724928,0.248422, 2.639686,1.760016,0.28391, + 2.5928,1.7982,0.29574, 2.5375,1.621875,0.34125, 2.5819,1.56915,0.3276, + 2.5819,1.56915,0.3276, 2.639686,1.760016,0.28391, 2.5928,1.7982,0.29574, + 2.545914,1.836384,0.28391, 2.4931,1.6746,0.3276, 2.5375,1.621875,0.34125, + 2.5375,1.621875,0.34125, 2.5928,1.7982,0.29574, 2.545914,1.836384,0.28391, + 2.502829,1.871472,0.248422, 2.4523,1.72305,0.28665, 2.4931,1.6746,0.3276, + 2.4931,1.6746,0.3276, 2.545914,1.836384,0.28391, 2.502829,1.871472,0.248422, + 2.467347,1.900368,0.189274, 2.4187,1.76295,0.2184, 2.4523,1.72305,0.28665, + 2.4523,1.72305,0.28665, 2.502829,1.871472,0.248422, 2.467347,1.900368,0.189274, + 2.44327,1.919976,0.106466, 2.3959,1.790025,0.12285, 2.4187,1.76295,0.2184, + 2.4187,1.76295,0.2184, 2.467347,1.900368,0.189274, 2.44327,1.919976,0.106466, + 2.4344,1.9272,0, 2.3875,1.8,0, 2.3959,1.790025,0.12285, + 2.3959,1.790025,0.12285, 2.44327,1.919976,0.106466, 2.4344,1.9272,0, + 2.812457,1.893075,0.091411, 2.74233,1.676424,0.106466, 2.7512,1.6692,0, + 2.7512,1.6692,0, 2.8221,1.88835,0, 2.812457,1.893075,0.091411, + 2.786282,1.9059,0.162509, 2.718253,1.696032,0.189274, 2.74233,1.676424,0.106466, + 2.74233,1.676424,0.106466, 2.812457,1.893075,0.091411, 2.786282,1.9059,0.162509, + 2.74771,1.9248,0.213293, 2.682771,1.724928,0.248422, 2.718253,1.696032,0.189274, + 2.718253,1.696032,0.189274, 2.786282,1.9059,0.162509, 2.74771,1.9248,0.213293, + 2.700871,1.94775,0.243763, 2.639686,1.760016,0.28391, 2.682771,1.724928,0.248422, + 2.682771,1.724928,0.248422, 2.74771,1.9248,0.213293, 2.700871,1.94775,0.243763, + 2.6499,1.972725,0.25392, 2.5928,1.7982,0.29574, 2.639686,1.760016,0.28391, + 2.639686,1.760016,0.28391, 2.700871,1.94775,0.243763, 2.6499,1.972725,0.25392, + 2.598929,1.9977,0.243763, 2.545914,1.836384,0.28391, 2.5928,1.7982,0.29574, + 2.5928,1.7982,0.29574, 2.6499,1.972725,0.25392, 2.598929,1.9977,0.243763, + 2.55209,2.02065,0.213293, 2.502829,1.871472,0.248422, 2.545914,1.836384,0.28391, + 2.545914,1.836384,0.28391, 2.598929,1.9977,0.243763, 2.55209,2.02065,0.213293, + 2.513518,2.03955,0.162509, 2.467347,1.900368,0.189274, 2.502829,1.871472,0.248422, + 2.502829,1.871472,0.248422, 2.55209,2.02065,0.213293, 2.513518,2.03955,0.162509, + 2.487343,2.052375,0.091411, 2.44327,1.919976,0.106466, 2.467347,1.900368,0.189274, + 2.467347,1.900368,0.189274, 2.513518,2.03955,0.162509, 2.487343,2.052375,0.091411, + 2.4777,2.0571,0, 2.4344,1.9272,0, 2.44327,1.919976,0.106466, + 2.44327,1.919976,0.106466, 2.487343,2.052375,0.091411, 2.4777,2.0571,0, + 2.911379,2.093004,0.079013, 2.812457,1.893075,0.091411, 2.8221,1.88835,0, + 2.8221,1.88835,0, 2.9224,2.0904,0, 2.911379,2.093004,0.079013, + 2.881466,2.100072,0.140467, 2.786282,1.9059,0.162509, 2.812457,1.893075,0.091411, + 2.812457,1.893075,0.091411, 2.911379,2.093004,0.079013, 2.881466,2.100072,0.140467, + 2.837382,2.110488,0.184363, 2.74771,1.9248,0.213293, 2.786282,1.9059,0.162509, + 2.786282,1.9059,0.162509, 2.881466,2.100072,0.140467, 2.837382,2.110488,0.184363, + 2.783853,2.123136,0.210701, 2.700871,1.94775,0.243763, 2.74771,1.9248,0.213293, + 2.74771,1.9248,0.213293, 2.837382,2.110488,0.184363, 2.783853,2.123136,0.210701, + 2.7256,2.1369,0.21948, 2.6499,1.972725,0.25392, 2.700871,1.94775,0.243763, + 2.700871,1.94775,0.243763, 2.783853,2.123136,0.210701, 2.7256,2.1369,0.21948, + 2.667347,2.150664,0.210701, 2.598929,1.9977,0.243763, 2.6499,1.972725,0.25392, + 2.6499,1.972725,0.25392, 2.7256,2.1369,0.21948, 2.667347,2.150664,0.210701, + 2.613818,2.163312,0.184363, 2.55209,2.02065,0.213293, 2.598929,1.9977,0.243763, + 2.598929,1.9977,0.243763, 2.667347,2.150664,0.210701, 2.613818,2.163312,0.184363, + 2.569734,2.173728,0.140467, 2.513518,2.03955,0.162509, 2.55209,2.02065,0.213293, + 2.55209,2.02065,0.213293, 2.613818,2.163312,0.184363, 2.569734,2.173728,0.140467, + 2.539821,2.180796,0.079013, 2.487343,2.052375,0.091411, 2.513518,2.03955,0.162509, + 2.513518,2.03955,0.162509, 2.569734,2.173728,0.140467, 2.539821,2.180796,0.079013, + 2.5288,2.1834,0, 2.4777,2.0571,0, 2.487343,2.052375,0.091411, + 2.487343,2.052375,0.091411, 2.539821,2.180796,0.079013, 2.5288,2.1834,0, + 3.060994,2.265537,0.0706, 2.911379,2.093004,0.079013, 2.9224,2.0904,0, + 2.9224,2.0904,0, 3.0743,2.26455,0, 3.060994,2.265537,0.0706, + 3.024879,2.268216,0.12551, 2.881466,2.100072,0.140467, 2.911379,2.093004,0.079013, + 2.911379,2.093004,0.079013, 3.060994,2.265537,0.0706, 3.024879,2.268216,0.12551, + 2.971657,2.272164,0.164732, 2.837382,2.110488,0.184363, 2.881466,2.100072,0.140467, + 2.881466,2.100072,0.140467, 3.024879,2.268216,0.12551, 2.971657,2.272164,0.164732, + 2.90703,2.276958,0.188266, 2.783853,2.123136,0.210701, 2.837382,2.110488,0.184363, + 2.837382,2.110488,0.184363, 2.971657,2.272164,0.164732, 2.90703,2.276958,0.188266, + 2.8367,2.282175,0.19611, 2.7256,2.1369,0.21948, 2.783853,2.123136,0.210701, + 2.783853,2.123136,0.210701, 2.90703,2.276958,0.188266, 2.8367,2.282175,0.19611, + 2.76637,2.287392,0.188266, 2.667347,2.150664,0.210701, 2.7256,2.1369,0.21948, + 2.7256,2.1369,0.21948, 2.8367,2.282175,0.19611, 2.76637,2.287392,0.188266, + 2.701743,2.292186,0.164732, 2.613818,2.163312,0.184363, 2.667347,2.150664,0.210701, + 2.667347,2.150664,0.210701, 2.76637,2.287392,0.188266, 2.701743,2.292186,0.164732, + 2.648521,2.296134,0.12551, 2.569734,2.173728,0.140467, 2.613818,2.163312,0.184363, + 2.613818,2.163312,0.184363, 2.701743,2.292186,0.164732, 2.648521,2.296134,0.12551, + 2.612406,2.298813,0.0706, 2.539821,2.180796,0.079013, 2.569734,2.173728,0.140467, + 2.569734,2.173728,0.140467, 2.648521,2.296134,0.12551, 2.612406,2.298813,0.0706, + 2.5991,2.2998,0, 2.5288,2.1834,0, 2.539821,2.180796,0.079013, + 2.539821,2.180796,0.079013, 2.612406,2.298813,0.0706, 2.5991,2.2998,0, + 3.2832,2.4,0.0675, 3.060994,2.265537,0.0706, 3.0743,2.26455,0, + 3.0743,2.26455,0, 3.3,2.4,0, 3.2832,2.4,0.0675, + 3.2376,2.4,0.12, 3.024879,2.268216,0.12551, 3.060994,2.265537,0.0706, + 3.060994,2.265537,0.0706, 3.2832,2.4,0.0675, 3.2376,2.4,0.12, + 3.1704,2.4,0.1575, 2.971657,2.272164,0.164732, 3.024879,2.268216,0.12551, + 3.024879,2.268216,0.12551, 3.2376,2.4,0.12, 3.1704,2.4,0.1575, + 3.0888,2.4,0.18, 2.90703,2.276958,0.188266, 2.971657,2.272164,0.164732, + 2.971657,2.272164,0.164732, 3.1704,2.4,0.1575, 3.0888,2.4,0.18, + 3,2.4,0.1875, 2.8367,2.282175,0.19611, 2.90703,2.276958,0.188266, + 2.90703,2.276958,0.188266, 3.0888,2.4,0.18, 3,2.4,0.1875, + 2.9112,2.4,0.18, 2.76637,2.287392,0.188266, 2.8367,2.282175,0.19611, + 2.8367,2.282175,0.19611, 3,2.4,0.1875, 2.9112,2.4,0.18, + 2.8296,2.4,0.1575, 2.701743,2.292186,0.164732, 2.76637,2.287392,0.188266, + 2.76637,2.287392,0.188266, 2.9112,2.4,0.18, 2.8296,2.4,0.1575, + 2.7624,2.4,0.12, 2.648521,2.296134,0.12551, 2.701743,2.292186,0.164732, + 2.701743,2.292186,0.164732, 2.8296,2.4,0.1575, 2.7624,2.4,0.12, + 2.7168,2.4,0.0675, 2.612406,2.298813,0.0706, 2.648521,2.296134,0.12551, + 2.648521,2.296134,0.12551, 2.7624,2.4,0.12, 2.7168,2.4,0.0675, + 2.7,2.4,0, 2.5991,2.2998,0, 2.612406,2.298813,0.0706, + 2.612406,2.298813,0.0706, 2.7168,2.4,0.0675, 2.7,2.4,0, + 2.747407,2.420406,-0.066744, 2.7168,2.4,-0.0675, 2.7,2.4,0, + 2.7,2.4,0, 2.7298,2.42025,0, 2.747407,2.420406,-0.066744, + 2.795198,2.420829,-0.118656, 2.7624,2.4,-0.12, 2.7168,2.4,-0.0675, + 2.7168,2.4,-0.0675, 2.747407,2.420406,-0.066744, 2.795198,2.420829,-0.118656, + 2.865626,2.421453,-0.155736, 2.8296,2.4,-0.1575, 2.7624,2.4,-0.12, + 2.7624,2.4,-0.12, 2.795198,2.420829,-0.118656, 2.865626,2.421453,-0.155736, + 2.951146,2.42221,-0.177984, 2.9112,2.4,-0.18, 2.8296,2.4,-0.1575, + 2.8296,2.4,-0.1575, 2.865626,2.421453,-0.155736, 2.951146,2.42221,-0.177984, + 3.044212,2.423034,-0.1854, 3,2.4,-0.1875, 2.9112,2.4,-0.18, + 2.9112,2.4,-0.18, 2.951146,2.42221,-0.177984, 3.044212,2.423034,-0.1854, + 3.137279,2.423859,-0.177984, 3.0888,2.4,-0.18, 3,2.4,-0.1875, + 3,2.4,-0.1875, 3.044212,2.423034,-0.1854, 3.137279,2.423859,-0.177984, + 3.222799,2.424616,-0.155736, 3.1704,2.4,-0.1575, 3.0888,2.4,-0.18, + 3.0888,2.4,-0.18, 3.137279,2.423859,-0.177984, 3.222799,2.424616,-0.155736, + 3.293227,2.42524,-0.118656, 3.2376,2.4,-0.12, 3.1704,2.4,-0.1575, + 3.1704,2.4,-0.1575, 3.222799,2.424616,-0.155736, 3.293227,2.42524,-0.118656, + 3.341018,2.425663,-0.066744, 3.2832,2.4,-0.0675, 3.2376,2.4,-0.12, + 3.2376,2.4,-0.12, 3.293227,2.42524,-0.118656, 3.341018,2.425663,-0.066744, + 3.358625,2.425819,0, 3.3,2.4,0, 3.2832,2.4,-0.0675, + 3.2832,2.4,-0.0675, 3.341018,2.425663,-0.066744, 3.358625,2.425819,0, + 2.776365,2.436302,-0.064692, 2.747407,2.420406,-0.066744, 2.7298,2.42025,0, + 2.7298,2.42025,0, 2.7584,2.436,0, 2.776365,2.436302,-0.064692, + 2.825126,2.437123,-0.115008, 2.795198,2.420829,-0.118656, 2.747407,2.420406,-0.066744, + 2.747407,2.420406,-0.066744, 2.776365,2.436302,-0.064692, 2.825126,2.437123,-0.115008, + 2.896986,2.438333,-0.150948, 2.865626,2.421453,-0.155736, 2.795198,2.420829,-0.118656, + 2.795198,2.420829,-0.118656, 2.825126,2.437123,-0.115008, 2.896986,2.438333,-0.150948, + 2.984243,2.439802,-0.172512, 2.951146,2.42221,-0.177984, 2.865626,2.421453,-0.155736, + 2.865626,2.421453,-0.155736, 2.896986,2.438333,-0.150948, 2.984243,2.439802,-0.172512, + 3.0792,2.4414,-0.1797, 3.044212,2.423034,-0.1854, 2.951146,2.42221,-0.177984, + 2.951146,2.42221,-0.177984, 2.984243,2.439802,-0.172512, 3.0792,2.4414,-0.1797, + 3.174157,2.442998,-0.172512, 3.137279,2.423859,-0.177984, 3.044212,2.423034,-0.1854, + 3.044212,2.423034,-0.1854, 3.0792,2.4414,-0.1797, 3.174157,2.442998,-0.172512, + 3.261414,2.444467,-0.150948, 3.222799,2.424616,-0.155736, 3.137279,2.423859,-0.177984, + 3.137279,2.423859,-0.177984, 3.174157,2.442998,-0.172512, 3.261414,2.444467,-0.150948, + 3.333274,2.445677,-0.115008, 3.293227,2.42524,-0.118656, 3.222799,2.424616,-0.155736, + 3.222799,2.424616,-0.155736, 3.261414,2.444467,-0.150948, 3.333274,2.445677,-0.115008, + 3.382035,2.446498,-0.064692, 3.341018,2.425663,-0.066744, 3.293227,2.42524,-0.118656, + 3.293227,2.42524,-0.118656, 3.333274,2.445677,-0.115008, 3.382035,2.446498,-0.064692, + 3.4,2.4468,0, 3.358625,2.425819,0, 3.341018,2.425663,-0.066744, + 3.341018,2.425663,-0.066744, 3.382035,2.446498,-0.064692, 3.4,2.4468,0, + 2.802528,2.44768,-0.061668, 2.776365,2.436302,-0.064692, 2.7584,2.436,0, + 2.7584,2.436,0, 2.7846,2.44725,0, 2.802528,2.44768,-0.061668, + 2.851189,2.448847,-0.109632, 2.825126,2.437123,-0.115008, 2.776365,2.436302,-0.064692, + 2.776365,2.436302,-0.064692, 2.802528,2.44768,-0.061668, 2.851189,2.448847,-0.109632, + 2.922899,2.450567,-0.143892, 2.896986,2.438333,-0.150948, 2.825126,2.437123,-0.115008, + 2.825126,2.437123,-0.115008, 2.851189,2.448847,-0.109632, 2.922899,2.450567,-0.143892, + 3.009977,2.452655,-0.164448, 2.984243,2.439802,-0.172512, 2.896986,2.438333,-0.150948, + 2.896986,2.438333,-0.150948, 2.922899,2.450567,-0.143892, 3.009977,2.452655,-0.164448, + 3.104737,2.454928,-0.1713, 3.0792,2.4414,-0.1797, 2.984243,2.439802,-0.172512, + 2.984243,2.439802,-0.172512, 3.009977,2.452655,-0.164448, 3.104737,2.454928,-0.1713, + 3.199498,2.457201,-0.164448, 3.174157,2.442998,-0.172512, 3.0792,2.4414,-0.1797, + 3.0792,2.4414,-0.1797, 3.104737,2.454928,-0.1713, 3.199498,2.457201,-0.164448, + 3.286576,2.459289,-0.143892, 3.261414,2.444467,-0.150948, 3.174157,2.442998,-0.172512, + 3.174157,2.442998,-0.172512, 3.199498,2.457201,-0.164448, 3.286576,2.459289,-0.143892, + 3.358286,2.461009,-0.109632, 3.333274,2.445677,-0.115008, 3.261414,2.444467,-0.150948, + 3.261414,2.444467,-0.150948, 3.286576,2.459289,-0.143892, 3.358286,2.461009,-0.109632, + 3.406947,2.462176,-0.061668, 3.382035,2.446498,-0.064692, 3.333274,2.445677,-0.115008, + 3.333274,2.445677,-0.115008, 3.358286,2.461009,-0.109632, 3.406947,2.462176,-0.061668, + 3.424875,2.462606,0, 3.4,2.4468,0, 3.382035,2.446498,-0.064692, + 3.382035,2.446498,-0.064692, 3.406947,2.462176,-0.061668, 3.424875,2.462606,0, + 2.82475,2.454529,-0.057996, 2.802528,2.44768,-0.061668, 2.7846,2.44725,0, + 2.7846,2.44725,0, 2.8072,2.454,0, 2.82475,2.454529,-0.057996, + 2.872387,2.455966,-0.103104, 2.851189,2.448847,-0.109632, 2.802528,2.44768,-0.061668, + 2.802528,2.44768,-0.061668, 2.82475,2.454529,-0.057996, 2.872387,2.455966,-0.103104, + 2.942589,2.458082,-0.135324, 2.922899,2.450567,-0.143892, 2.851189,2.448847,-0.109632, + 2.851189,2.448847,-0.109632, 2.872387,2.455966,-0.103104, 2.942589,2.458082,-0.135324, + 3.027834,2.460653,-0.154656, 3.009977,2.452655,-0.164448, 2.922899,2.450567,-0.143892, + 2.922899,2.450567,-0.143892, 2.942589,2.458082,-0.135324, 3.027834,2.460653,-0.154656, + 3.1206,2.46345,-0.1611, 3.104737,2.454928,-0.1713, 3.009977,2.452655,-0.164448, + 3.009977,2.452655,-0.164448, 3.027834,2.460653,-0.154656, 3.1206,2.46345,-0.1611, + 3.213366,2.466247,-0.154656, 3.199498,2.457201,-0.164448, 3.104737,2.454928,-0.1713, + 3.104737,2.454928,-0.1713, 3.1206,2.46345,-0.1611, 3.213366,2.466247,-0.154656, + 3.298611,2.468818,-0.135324, 3.286576,2.459289,-0.143892, 3.199498,2.457201,-0.164448, + 3.199498,2.457201,-0.164448, 3.213366,2.466247,-0.154656, 3.298611,2.468818,-0.135324, + 3.368813,2.470934,-0.103104, 3.358286,2.461009,-0.109632, 3.286576,2.459289,-0.143892, + 3.286576,2.459289,-0.143892, 3.298611,2.468818,-0.135324, 3.368813,2.470934,-0.103104, + 3.41645,2.472371,-0.057996, 3.406947,2.462176,-0.061668, 3.358286,2.461009,-0.109632, + 3.358286,2.461009,-0.109632, 3.368813,2.470934,-0.103104, 3.41645,2.472371,-0.057996, + 3.434,2.4729,0, 3.424875,2.462606,0, 3.406947,2.462176,-0.061668, + 3.406947,2.462176,-0.061668, 3.41645,2.472371,-0.057996, 3.434,2.4729,0, + 2.841887,2.456841,-0.054, 2.82475,2.454529,-0.057996, 2.8072,2.454,0, + 2.8072,2.454,0, 2.825,2.45625,0, 2.841887,2.456841,-0.054, + 2.887725,2.458444,-0.096, 2.872387,2.455966,-0.103104, 2.82475,2.454529,-0.057996, + 2.82475,2.454529,-0.057996, 2.841887,2.456841,-0.054, 2.887725,2.458444,-0.096, + 2.955275,2.460806,-0.126, 2.942589,2.458082,-0.135324, 2.872387,2.455966,-0.103104, + 2.872387,2.455966,-0.103104, 2.887725,2.458444,-0.096, 2.955275,2.460806,-0.126, + 3.0373,2.463675,-0.144, 3.027834,2.460653,-0.154656, 2.942589,2.458082,-0.135324, + 2.942589,2.458082,-0.135324, 2.955275,2.460806,-0.126, 3.0373,2.463675,-0.144, + 3.126562,2.466797,-0.15, 3.1206,2.46345,-0.1611, 3.027834,2.460653,-0.154656, + 3.027834,2.460653,-0.154656, 3.0373,2.463675,-0.144, 3.126562,2.466797,-0.15, + 3.215825,2.469919,-0.144, 3.213366,2.466247,-0.154656, 3.1206,2.46345,-0.1611, + 3.1206,2.46345,-0.1611, 3.126562,2.466797,-0.15, 3.215825,2.469919,-0.144, + 3.29785,2.472787,-0.126, 3.298611,2.468818,-0.135324, 3.213366,2.466247,-0.154656, + 3.213366,2.466247,-0.154656, 3.215825,2.469919,-0.144, 3.29785,2.472787,-0.126, + 3.3654,2.47515,-0.096, 3.368813,2.470934,-0.103104, 3.298611,2.468818,-0.135324, + 3.298611,2.468818,-0.135324, 3.29785,2.472787,-0.126, 3.3654,2.47515,-0.096, + 3.411237,2.476753,-0.054, 3.41645,2.472371,-0.057996, 3.368813,2.470934,-0.103104, + 3.368813,2.470934,-0.103104, 3.3654,2.47515,-0.096, 3.411237,2.476753,-0.054, + 3.428125,2.477344,0, 3.434,2.4729,0, 3.41645,2.472371,-0.057996, + 3.41645,2.472371,-0.057996, 3.411237,2.476753,-0.054, 3.428125,2.477344,0, + 2.852794,2.454605,-0.050004, 2.841887,2.456841,-0.054, 2.825,2.45625,0, + 2.825,2.45625,0, 2.8368,2.454,0, 2.852794,2.454605,-0.050004, + 2.896205,2.456246,-0.088896, 2.887725,2.458444,-0.096, 2.841887,2.456841,-0.054, + 2.841887,2.456841,-0.054, 2.852794,2.454605,-0.050004, 2.896205,2.456246,-0.088896, + 2.960179,2.458666,-0.116676, 2.955275,2.460806,-0.126, 2.887725,2.458444,-0.096, + 2.887725,2.458444,-0.096, 2.896205,2.456246,-0.088896, 2.960179,2.458666,-0.116676, + 3.037862,2.461603,-0.133344, 3.0373,2.463675,-0.144, 2.955275,2.460806,-0.126, + 2.955275,2.460806,-0.126, 2.960179,2.458666,-0.116676, 3.037862,2.461603,-0.133344, + 3.1224,2.4648,-0.1389, 3.126562,2.466797,-0.15, 3.0373,2.463675,-0.144, + 3.0373,2.463675,-0.144, 3.037862,2.461603,-0.133344, 3.1224,2.4648,-0.1389, + 3.206938,2.467997,-0.133344, 3.215825,2.469919,-0.144, 3.126562,2.466797,-0.15, + 3.126562,2.466797,-0.15, 3.1224,2.4648,-0.1389, 3.206938,2.467997,-0.133344, + 3.284621,2.470934,-0.116676, 3.29785,2.472787,-0.126, 3.215825,2.469919,-0.144, + 3.215825,2.469919,-0.144, 3.206938,2.467997,-0.133344, 3.284621,2.470934,-0.116676, + 3.348595,2.473354,-0.088896, 3.3654,2.47515,-0.096, 3.29785,2.472787,-0.126, + 3.29785,2.472787,-0.126, 3.284621,2.470934,-0.116676, 3.348595,2.473354,-0.088896, + 3.392006,2.474995,-0.050004, 3.411237,2.476753,-0.054, 3.3654,2.47515,-0.096, + 3.3654,2.47515,-0.096, 3.348595,2.473354,-0.088896, 3.392006,2.474995,-0.050004, + 3.408,2.4756,0, 3.428125,2.477344,0, 3.411237,2.476753,-0.054, + 3.411237,2.476753,-0.054, 3.392006,2.474995,-0.050004, 3.408,2.4756,0, + 2.856323,2.447812,-0.046332, 2.852794,2.454605,-0.050004, 2.8368,2.454,0, + 2.8368,2.454,0, 2.8414,2.44725,0, 2.856323,2.447812,-0.046332, + 2.896829,2.449338,-0.082368, 2.896205,2.456246,-0.088896, 2.852794,2.454605,-0.050004, + 2.852794,2.454605,-0.050004, 2.856323,2.447812,-0.046332, 2.896829,2.449338,-0.082368, + 2.956523,2.451588,-0.108108, 2.960179,2.458666,-0.116676, 2.896205,2.456246,-0.088896, + 2.896205,2.456246,-0.088896, 2.896829,2.449338,-0.082368, 2.956523,2.451588,-0.108108, + 3.029007,2.454319,-0.123552, 3.037862,2.461603,-0.133344, 2.960179,2.458666,-0.116676, + 2.960179,2.458666,-0.116676, 2.956523,2.451588,-0.108108, 3.029007,2.454319,-0.123552, + 3.107887,2.457291,-0.1287, 3.1224,2.4648,-0.1389, 3.037862,2.461603,-0.133344, + 3.037862,2.461603,-0.133344, 3.029007,2.454319,-0.123552, 3.107887,2.457291,-0.1287, + 3.186768,2.460263,-0.123552, 3.206938,2.467997,-0.133344, 3.1224,2.4648,-0.1389, + 3.1224,2.4648,-0.1389, 3.107887,2.457291,-0.1287, 3.186768,2.460263,-0.123552, + 3.259252,2.462994,-0.108108, 3.284621,2.470934,-0.116676, 3.206938,2.467997,-0.133344, + 3.206938,2.467997,-0.133344, 3.186768,2.460263,-0.123552, 3.259252,2.462994,-0.108108, + 3.318946,2.465243,-0.082368, 3.348595,2.473354,-0.088896, 3.284621,2.470934,-0.116676, + 3.284621,2.470934,-0.116676, 3.259252,2.462994,-0.108108, 3.318946,2.465243,-0.082368, + 3.359452,2.466769,-0.046332, 3.392006,2.474995,-0.050004, 3.348595,2.473354,-0.088896, + 3.348595,2.473354,-0.088896, 3.318946,2.465243,-0.082368, 3.359452,2.466769,-0.046332, + 3.374375,2.467331,0, 3.408,2.4756,0, 3.392006,2.474995,-0.050004, + 3.392006,2.474995,-0.050004, 3.359452,2.466769,-0.046332, 3.374375,2.467331,0, + 2.851331,2.436454,-0.043308, 2.856323,2.447812,-0.046332, 2.8414,2.44725,0, + 2.8414,2.44725,0, 2.8376,2.436,0, 2.851331,2.436454,-0.043308, + 2.888602,2.437685,-0.076992, 2.896829,2.449338,-0.082368, 2.856323,2.447812,-0.046332, + 2.856323,2.447812,-0.046332, 2.851331,2.436454,-0.043308, 2.888602,2.437685,-0.076992, + 2.943526,2.439499,-0.101052, 2.956523,2.451588,-0.108108, 2.896829,2.449338,-0.082368, + 2.896829,2.449338,-0.082368, 2.888602,2.437685,-0.076992, 2.943526,2.439499,-0.101052, + 3.010221,2.441702,-0.115488, 3.029007,2.454319,-0.123552, 2.956523,2.451588,-0.108108, + 2.956523,2.451588,-0.108108, 2.943526,2.439499,-0.101052, 3.010221,2.441702,-0.115488, + 3.0828,2.4441,-0.1203, 3.107887,2.457291,-0.1287, 3.029007,2.454319,-0.123552, + 3.029007,2.454319,-0.123552, 3.010221,2.441702,-0.115488, 3.0828,2.4441,-0.1203, + 3.155379,2.446498,-0.115488, 3.186768,2.460263,-0.123552, 3.107887,2.457291,-0.1287, + 3.107887,2.457291,-0.1287, 3.0828,2.4441,-0.1203, 3.155379,2.446498,-0.115488, + 3.222074,2.448701,-0.101052, 3.259252,2.462994,-0.108108, 3.186768,2.460263,-0.123552, + 3.186768,2.460263,-0.123552, 3.155379,2.446498,-0.115488, 3.222074,2.448701,-0.101052, + 3.276998,2.450515,-0.076992, 3.318946,2.465243,-0.082368, 3.259252,2.462994,-0.108108, + 3.259252,2.462994,-0.108108, 3.222074,2.448701,-0.101052, 3.276998,2.450515,-0.076992, + 3.314269,2.451746,-0.043308, 3.359452,2.466769,-0.046332, 3.318946,2.465243,-0.082368, + 3.318946,2.465243,-0.082368, 3.276998,2.450515,-0.076992, 3.314269,2.451746,-0.043308, + 3.328,2.4522,0, 3.374375,2.467331,0, 3.359452,2.466769,-0.046332, + 3.359452,2.466769,-0.046332, 3.314269,2.451746,-0.043308, 3.328,2.4522,0, + 2.836672,2.420519,-0.041256, 2.851331,2.436454,-0.043308, 2.8376,2.436,0, + 2.8376,2.436,0, 2.8242,2.42025,0, 2.836672,2.420519,-0.041256, + 2.870524,2.42125,-0.073344, 2.888602,2.437685,-0.076992, 2.851331,2.436454,-0.043308, + 2.851331,2.436454,-0.043308, 2.836672,2.420519,-0.041256, 2.870524,2.42125,-0.073344, + 2.920412,2.422328,-0.096264, 2.943526,2.439499,-0.101052, 2.888602,2.437685,-0.076992, + 2.888602,2.437685,-0.076992, 2.870524,2.42125,-0.073344, 2.920412,2.422328,-0.096264, + 2.98099,2.423636,-0.110016, 3.010221,2.441702,-0.115488, 2.943526,2.439499,-0.101052, + 2.943526,2.439499,-0.101052, 2.920412,2.422328,-0.096264, 2.98099,2.423636,-0.110016, + 3.046912,2.425059,-0.1146, 3.0828,2.4441,-0.1203, 3.010221,2.441702,-0.115488, + 3.010221,2.441702,-0.115488, 2.98099,2.423636,-0.110016, 3.046912,2.425059,-0.1146, + 3.112835,2.426483,-0.110016, 3.155379,2.446498,-0.115488, 3.0828,2.4441,-0.1203, + 3.0828,2.4441,-0.1203, 3.046912,2.425059,-0.1146, 3.112835,2.426483,-0.110016, + 3.173413,2.427791,-0.096264, 3.222074,2.448701,-0.101052, 3.155379,2.446498,-0.115488, + 3.155379,2.446498,-0.115488, 3.112835,2.426483,-0.110016, 3.173413,2.427791,-0.096264, + 3.223301,2.428868,-0.073344, 3.276998,2.450515,-0.076992, 3.222074,2.448701,-0.101052, + 3.222074,2.448701,-0.101052, 3.173413,2.427791,-0.096264, 3.223301,2.428868,-0.073344, + 3.257153,2.429599,-0.041256, 3.314269,2.451746,-0.043308, 3.276998,2.450515,-0.076992, + 3.276998,2.450515,-0.076992, 3.223301,2.428868,-0.073344, 3.257153,2.429599,-0.041256, + 3.269625,2.429869,0, 3.328,2.4522,0, 3.314269,2.451746,-0.043308, + 3.314269,2.451746,-0.043308, 3.257153,2.429599,-0.041256, 3.269625,2.429869,0, + 2.8112,2.4,-0.0405, 2.836672,2.420519,-0.041256, 2.8242,2.42025,0, + 2.8242,2.42025,0, 2.8,2.4,0, 2.8112,2.4,-0.0405, + 2.8416,2.4,-0.072, 2.870524,2.42125,-0.073344, 2.836672,2.420519,-0.041256, + 2.836672,2.420519,-0.041256, 2.8112,2.4,-0.0405, 2.8416,2.4,-0.072, + 2.8864,2.4,-0.0945, 2.920412,2.422328,-0.096264, 2.870524,2.42125,-0.073344, + 2.870524,2.42125,-0.073344, 2.8416,2.4,-0.072, 2.8864,2.4,-0.0945, + 2.9408,2.4,-0.108, 2.98099,2.423636,-0.110016, 2.920412,2.422328,-0.096264, + 2.920412,2.422328,-0.096264, 2.8864,2.4,-0.0945, 2.9408,2.4,-0.108, + 3,2.4,-0.1125, 3.046912,2.425059,-0.1146, 2.98099,2.423636,-0.110016, + 2.98099,2.423636,-0.110016, 2.9408,2.4,-0.108, 3,2.4,-0.1125, + 3.0592,2.4,-0.108, 3.112835,2.426483,-0.110016, 3.046912,2.425059,-0.1146, + 3.046912,2.425059,-0.1146, 3,2.4,-0.1125, 3.0592,2.4,-0.108, + 3.1136,2.4,-0.0945, 3.173413,2.427791,-0.096264, 3.112835,2.426483,-0.110016, + 3.112835,2.426483,-0.110016, 3.0592,2.4,-0.108, 3.1136,2.4,-0.0945, + 3.1584,2.4,-0.072, 3.223301,2.428868,-0.073344, 3.173413,2.427791,-0.096264, + 3.173413,2.427791,-0.096264, 3.1136,2.4,-0.0945, 3.1584,2.4,-0.072, + 3.1888,2.4,-0.0405, 3.257153,2.429599,-0.041256, 3.223301,2.428868,-0.073344, + 3.223301,2.428868,-0.073344, 3.1584,2.4,-0.072, 3.1888,2.4,-0.0405, + 3.2,2.4,0, 3.269625,2.429869,0, 3.257153,2.429599,-0.041256, + 3.257153,2.429599,-0.041256, 3.1888,2.4,-0.0405, 3.2,2.4,0, + 3.341018,2.425663,0.066744, 3.2832,2.4,0.0675, 3.3,2.4,0, + 3.3,2.4,0, 3.358625,2.425819,0, 3.341018,2.425663,0.066744, + 3.293227,2.42524,0.118656, 3.2376,2.4,0.12, 3.2832,2.4,0.0675, + 3.2832,2.4,0.0675, 3.341018,2.425663,0.066744, 3.293227,2.42524,0.118656, + 3.222799,2.424616,0.155736, 3.1704,2.4,0.1575, 3.2376,2.4,0.12, + 3.2376,2.4,0.12, 3.293227,2.42524,0.118656, 3.222799,2.424616,0.155736, + 3.137279,2.423859,0.177984, 3.0888,2.4,0.18, 3.1704,2.4,0.1575, + 3.1704,2.4,0.1575, 3.222799,2.424616,0.155736, 3.137279,2.423859,0.177984, + 3.044212,2.423034,0.1854, 3,2.4,0.1875, 3.0888,2.4,0.18, + 3.0888,2.4,0.18, 3.137279,2.423859,0.177984, 3.044212,2.423034,0.1854, + 2.951146,2.42221,0.177984, 2.9112,2.4,0.18, 3,2.4,0.1875, + 3,2.4,0.1875, 3.044212,2.423034,0.1854, 2.951146,2.42221,0.177984, + 2.865626,2.421453,0.155736, 2.8296,2.4,0.1575, 2.9112,2.4,0.18, + 2.9112,2.4,0.18, 2.951146,2.42221,0.177984, 2.865626,2.421453,0.155736, + 2.795198,2.420829,0.118656, 2.7624,2.4,0.12, 2.8296,2.4,0.1575, + 2.8296,2.4,0.1575, 2.865626,2.421453,0.155736, 2.795198,2.420829,0.118656, + 2.747407,2.420406,0.066744, 2.7168,2.4,0.0675, 2.7624,2.4,0.12, + 2.7624,2.4,0.12, 2.795198,2.420829,0.118656, 2.747407,2.420406,0.066744, + 2.7298,2.42025,0, 2.7,2.4,0, 2.7168,2.4,0.0675, + 2.7168,2.4,0.0675, 2.747407,2.420406,0.066744, 2.7298,2.42025,0, + 3.382035,2.446498,0.064692, 3.341018,2.425663,0.066744, 3.358625,2.425819,0, + 3.358625,2.425819,0, 3.4,2.4468,0, 3.382035,2.446498,0.064692, + 3.333274,2.445677,0.115008, 3.293227,2.42524,0.118656, 3.341018,2.425663,0.066744, + 3.341018,2.425663,0.066744, 3.382035,2.446498,0.064692, 3.333274,2.445677,0.115008, + 3.261414,2.444467,0.150948, 3.222799,2.424616,0.155736, 3.293227,2.42524,0.118656, + 3.293227,2.42524,0.118656, 3.333274,2.445677,0.115008, 3.261414,2.444467,0.150948, + 3.174157,2.442998,0.172512, 3.137279,2.423859,0.177984, 3.222799,2.424616,0.155736, + 3.222799,2.424616,0.155736, 3.261414,2.444467,0.150948, 3.174157,2.442998,0.172512, + 3.0792,2.4414,0.1797, 3.044212,2.423034,0.1854, 3.137279,2.423859,0.177984, + 3.137279,2.423859,0.177984, 3.174157,2.442998,0.172512, 3.0792,2.4414,0.1797, + 2.984243,2.439802,0.172512, 2.951146,2.42221,0.177984, 3.044212,2.423034,0.1854, + 3.044212,2.423034,0.1854, 3.0792,2.4414,0.1797, 2.984243,2.439802,0.172512, + 2.896986,2.438333,0.150948, 2.865626,2.421453,0.155736, 2.951146,2.42221,0.177984, + 2.951146,2.42221,0.177984, 2.984243,2.439802,0.172512, 2.896986,2.438333,0.150948, + 2.825126,2.437123,0.115008, 2.795198,2.420829,0.118656, 2.865626,2.421453,0.155736, + 2.865626,2.421453,0.155736, 2.896986,2.438333,0.150948, 2.825126,2.437123,0.115008, + 2.776365,2.436302,0.064692, 2.747407,2.420406,0.066744, 2.795198,2.420829,0.118656, + 2.795198,2.420829,0.118656, 2.825126,2.437123,0.115008, 2.776365,2.436302,0.064692, + 2.7584,2.436,0, 2.7298,2.42025,0, 2.747407,2.420406,0.066744, + 2.747407,2.420406,0.066744, 2.776365,2.436302,0.064692, 2.7584,2.436,0, + 3.406947,2.462176,0.061668, 3.382035,2.446498,0.064692, 3.4,2.4468,0, + 3.4,2.4468,0, 3.424875,2.462606,0, 3.406947,2.462176,0.061668, + 3.358286,2.461009,0.109632, 3.333274,2.445677,0.115008, 3.382035,2.446498,0.064692, + 3.382035,2.446498,0.064692, 3.406947,2.462176,0.061668, 3.358286,2.461009,0.109632, + 3.286576,2.459289,0.143892, 3.261414,2.444467,0.150948, 3.333274,2.445677,0.115008, + 3.333274,2.445677,0.115008, 3.358286,2.461009,0.109632, 3.286576,2.459289,0.143892, + 3.199498,2.457201,0.164448, 3.174157,2.442998,0.172512, 3.261414,2.444467,0.150948, + 3.261414,2.444467,0.150948, 3.286576,2.459289,0.143892, 3.199498,2.457201,0.164448, + 3.104738,2.454928,0.1713, 3.0792,2.4414,0.1797, 3.174157,2.442998,0.172512, + 3.174157,2.442998,0.172512, 3.199498,2.457201,0.164448, 3.104738,2.454928,0.1713, + 3.009977,2.452655,0.164448, 2.984243,2.439802,0.172512, 3.0792,2.4414,0.1797, + 3.0792,2.4414,0.1797, 3.104738,2.454928,0.1713, 3.009977,2.452655,0.164448, + 2.922899,2.450567,0.143892, 2.896986,2.438333,0.150948, 2.984243,2.439802,0.172512, + 2.984243,2.439802,0.172512, 3.009977,2.452655,0.164448, 2.922899,2.450567,0.143892, + 2.851189,2.448847,0.109632, 2.825126,2.437123,0.115008, 2.896986,2.438333,0.150948, + 2.896986,2.438333,0.150948, 2.922899,2.450567,0.143892, 2.851189,2.448847,0.109632, + 2.802528,2.44768,0.061668, 2.776365,2.436302,0.064692, 2.825126,2.437123,0.115008, + 2.825126,2.437123,0.115008, 2.851189,2.448847,0.109632, 2.802528,2.44768,0.061668, + 2.7846,2.44725,0, 2.7584,2.436,0, 2.776365,2.436302,0.064692, + 2.776365,2.436302,0.064692, 2.802528,2.44768,0.061668, 2.7846,2.44725,0, + 3.41645,2.472371,0.057996, 3.406947,2.462176,0.061668, 3.424875,2.462606,0, + 3.424875,2.462606,0, 3.434,2.4729,0, 3.41645,2.472371,0.057996, + 3.368813,2.470934,0.103104, 3.358286,2.461009,0.109632, 3.406947,2.462176,0.061668, + 3.406947,2.462176,0.061668, 3.41645,2.472371,0.057996, 3.368813,2.470934,0.103104, + 3.298611,2.468818,0.135324, 3.286576,2.459289,0.143892, 3.358286,2.461009,0.109632, + 3.358286,2.461009,0.109632, 3.368813,2.470934,0.103104, 3.298611,2.468818,0.135324, + 3.213366,2.466247,0.154656, 3.199498,2.457201,0.164448, 3.286576,2.459289,0.143892, + 3.286576,2.459289,0.143892, 3.298611,2.468818,0.135324, 3.213366,2.466247,0.154656, + 3.1206,2.46345,0.1611, 3.104738,2.454928,0.1713, 3.199498,2.457201,0.164448, + 3.199498,2.457201,0.164448, 3.213366,2.466247,0.154656, 3.1206,2.46345,0.1611, + 3.027834,2.460653,0.154656, 3.009977,2.452655,0.164448, 3.104738,2.454928,0.1713, + 3.104738,2.454928,0.1713, 3.1206,2.46345,0.1611, 3.027834,2.460653,0.154656, + 2.942589,2.458082,0.135324, 2.922899,2.450567,0.143892, 3.009977,2.452655,0.164448, + 3.009977,2.452655,0.164448, 3.027834,2.460653,0.154656, 2.942589,2.458082,0.135324, + 2.872387,2.455966,0.103104, 2.851189,2.448847,0.109632, 2.922899,2.450567,0.143892, + 2.922899,2.450567,0.143892, 2.942589,2.458082,0.135324, 2.872387,2.455966,0.103104, + 2.82475,2.454529,0.057996, 2.802528,2.44768,0.061668, 2.851189,2.448847,0.109632, + 2.851189,2.448847,0.109632, 2.872387,2.455966,0.103104, 2.82475,2.454529,0.057996, + 2.8072,2.454,0, 2.7846,2.44725,0, 2.802528,2.44768,0.061668, + 2.802528,2.44768,0.061668, 2.82475,2.454529,0.057996, 2.8072,2.454,0, + 3.411237,2.476753,0.054, 3.41645,2.472371,0.057996, 3.434,2.4729,0, + 3.434,2.4729,0, 3.428125,2.477344,0, 3.411237,2.476753,0.054, + 3.3654,2.47515,0.096, 3.368813,2.470934,0.103104, 3.41645,2.472371,0.057996, + 3.41645,2.472371,0.057996, 3.411237,2.476753,0.054, 3.3654,2.47515,0.096, + 3.29785,2.472788,0.126, 3.298611,2.468818,0.135324, 3.368813,2.470934,0.103104, + 3.368813,2.470934,0.103104, 3.3654,2.47515,0.096, 3.29785,2.472788,0.126, + 3.215825,2.469919,0.144, 3.213366,2.466247,0.154656, 3.298611,2.468818,0.135324, + 3.298611,2.468818,0.135324, 3.29785,2.472788,0.126, 3.215825,2.469919,0.144, + 3.126562,2.466797,0.15, 3.1206,2.46345,0.1611, 3.213366,2.466247,0.154656, + 3.213366,2.466247,0.154656, 3.215825,2.469919,0.144, 3.126562,2.466797,0.15, + 3.0373,2.463675,0.144, 3.027834,2.460653,0.154656, 3.1206,2.46345,0.1611, + 3.1206,2.46345,0.1611, 3.126562,2.466797,0.15, 3.0373,2.463675,0.144, + 2.955275,2.460806,0.126, 2.942589,2.458082,0.135324, 3.027834,2.460653,0.154656, + 3.027834,2.460653,0.154656, 3.0373,2.463675,0.144, 2.955275,2.460806,0.126, + 2.887725,2.458444,0.096, 2.872387,2.455966,0.103104, 2.942589,2.458082,0.135324, + 2.942589,2.458082,0.135324, 2.955275,2.460806,0.126, 2.887725,2.458444,0.096, + 2.841887,2.456841,0.054, 2.82475,2.454529,0.057996, 2.872387,2.455966,0.103104, + 2.872387,2.455966,0.103104, 2.887725,2.458444,0.096, 2.841887,2.456841,0.054, + 2.825,2.45625,0, 2.8072,2.454,0, 2.82475,2.454529,0.057996, + 2.82475,2.454529,0.057996, 2.841887,2.456841,0.054, 2.825,2.45625,0, + 3.392006,2.474995,0.050004, 3.411237,2.476753,0.054, 3.428125,2.477344,0, + 3.428125,2.477344,0, 3.408,2.4756,0, 3.392006,2.474995,0.050004, + 3.348595,2.473354,0.088896, 3.3654,2.47515,0.096, 3.411237,2.476753,0.054, + 3.411237,2.476753,0.054, 3.392006,2.474995,0.050004, 3.348595,2.473354,0.088896, + 3.284621,2.470934,0.116676, 3.29785,2.472788,0.126, 3.3654,2.47515,0.096, + 3.3654,2.47515,0.096, 3.348595,2.473354,0.088896, 3.284621,2.470934,0.116676, + 3.206938,2.467997,0.133344, 3.215825,2.469919,0.144, 3.29785,2.472788,0.126, + 3.29785,2.472788,0.126, 3.284621,2.470934,0.116676, 3.206938,2.467997,0.133344, + 3.1224,2.4648,0.1389, 3.126562,2.466797,0.15, 3.215825,2.469919,0.144, + 3.215825,2.469919,0.144, 3.206938,2.467997,0.133344, 3.1224,2.4648,0.1389, + 3.037862,2.461603,0.133344, 3.0373,2.463675,0.144, 3.126562,2.466797,0.15, + 3.126562,2.466797,0.15, 3.1224,2.4648,0.1389, 3.037862,2.461603,0.133344, + 2.960179,2.458666,0.116676, 2.955275,2.460806,0.126, 3.0373,2.463675,0.144, + 3.0373,2.463675,0.144, 3.037862,2.461603,0.133344, 2.960179,2.458666,0.116676, + 2.896205,2.456246,0.088896, 2.887725,2.458444,0.096, 2.955275,2.460806,0.126, + 2.955275,2.460806,0.126, 2.960179,2.458666,0.116676, 2.896205,2.456246,0.088896, + 2.852794,2.454605,0.050004, 2.841887,2.456841,0.054, 2.887725,2.458444,0.096, + 2.887725,2.458444,0.096, 2.896205,2.456246,0.088896, 2.852794,2.454605,0.050004, + 2.8368,2.454,0, 2.825,2.45625,0, 2.841887,2.456841,0.054, + 2.841887,2.456841,0.054, 2.852794,2.454605,0.050004, 2.8368,2.454,0, + 3.359452,2.466769,0.046332, 3.392006,2.474995,0.050004, 3.408,2.4756,0, + 3.408,2.4756,0, 3.374375,2.467331,0, 3.359452,2.466769,0.046332, + 3.318946,2.465243,0.082368, 3.348595,2.473354,0.088896, 3.392006,2.474995,0.050004, + 3.392006,2.474995,0.050004, 3.359452,2.466769,0.046332, 3.318946,2.465243,0.082368, + 3.259252,2.462994,0.108108, 3.284621,2.470934,0.116676, 3.348595,2.473354,0.088896, + 3.348595,2.473354,0.088896, 3.318946,2.465243,0.082368, 3.259252,2.462994,0.108108, + 3.186768,2.460263,0.123552, 3.206938,2.467997,0.133344, 3.284621,2.470934,0.116676, + 3.284621,2.470934,0.116676, 3.259252,2.462994,0.108108, 3.186768,2.460263,0.123552, + 3.107887,2.457291,0.1287, 3.1224,2.4648,0.1389, 3.206938,2.467997,0.133344, + 3.206938,2.467997,0.133344, 3.186768,2.460263,0.123552, 3.107887,2.457291,0.1287, + 3.029007,2.454319,0.123552, 3.037862,2.461603,0.133344, 3.1224,2.4648,0.1389, + 3.1224,2.4648,0.1389, 3.107887,2.457291,0.1287, 3.029007,2.454319,0.123552, + 2.956523,2.451588,0.108108, 2.960179,2.458666,0.116676, 3.037862,2.461603,0.133344, + 3.037862,2.461603,0.133344, 3.029007,2.454319,0.123552, 2.956523,2.451588,0.108108, + 2.896829,2.449338,0.082368, 2.896205,2.456246,0.088896, 2.960179,2.458666,0.116676, + 2.960179,2.458666,0.116676, 2.956523,2.451588,0.108108, 2.896829,2.449338,0.082368, + 2.856323,2.447812,0.046332, 2.852794,2.454605,0.050004, 2.896205,2.456246,0.088896, + 2.896205,2.456246,0.088896, 2.896829,2.449338,0.082368, 2.856323,2.447812,0.046332, + 2.8414,2.44725,0, 2.8368,2.454,0, 2.852794,2.454605,0.050004, + 2.852794,2.454605,0.050004, 2.856323,2.447812,0.046332, 2.8414,2.44725,0, + 3.314269,2.451746,0.043308, 3.359452,2.466769,0.046332, 3.374375,2.467331,0, + 3.374375,2.467331,0, 3.328,2.4522,0, 3.314269,2.451746,0.043308, + 3.276998,2.450515,0.076992, 3.318946,2.465243,0.082368, 3.359452,2.466769,0.046332, + 3.359452,2.466769,0.046332, 3.314269,2.451746,0.043308, 3.276998,2.450515,0.076992, + 3.222074,2.448701,0.101052, 3.259252,2.462994,0.108108, 3.318946,2.465243,0.082368, + 3.318946,2.465243,0.082368, 3.276998,2.450515,0.076992, 3.222074,2.448701,0.101052, + 3.155379,2.446498,0.115488, 3.186768,2.460263,0.123552, 3.259252,2.462994,0.108108, + 3.259252,2.462994,0.108108, 3.222074,2.448701,0.101052, 3.155379,2.446498,0.115488, + 3.0828,2.4441,0.1203, 3.107887,2.457291,0.1287, 3.186768,2.460263,0.123552, + 3.186768,2.460263,0.123552, 3.155379,2.446498,0.115488, 3.0828,2.4441,0.1203, + 3.010221,2.441702,0.115488, 3.029007,2.454319,0.123552, 3.107887,2.457291,0.1287, + 3.107887,2.457291,0.1287, 3.0828,2.4441,0.1203, 3.010221,2.441702,0.115488, + 2.943526,2.439499,0.101052, 2.956523,2.451588,0.108108, 3.029007,2.454319,0.123552, + 3.029007,2.454319,0.123552, 3.010221,2.441702,0.115488, 2.943526,2.439499,0.101052, + 2.888602,2.437685,0.076992, 2.896829,2.449338,0.082368, 2.956523,2.451588,0.108108, + 2.956523,2.451588,0.108108, 2.943526,2.439499,0.101052, 2.888602,2.437685,0.076992, + 2.851331,2.436454,0.043308, 2.856323,2.447812,0.046332, 2.896829,2.449338,0.082368, + 2.896829,2.449338,0.082368, 2.888602,2.437685,0.076992, 2.851331,2.436454,0.043308, + 2.8376,2.436,0, 2.8414,2.44725,0, 2.856323,2.447812,0.046332, + 2.856323,2.447812,0.046332, 2.851331,2.436454,0.043308, 2.8376,2.436,0, + 3.257153,2.429599,0.041256, 3.314269,2.451746,0.043308, 3.328,2.4522,0, + 3.328,2.4522,0, 3.269625,2.429869,0, 3.257153,2.429599,0.041256, + 3.223301,2.428868,0.073344, 3.276998,2.450515,0.076992, 3.314269,2.451746,0.043308, + 3.314269,2.451746,0.043308, 3.257153,2.429599,0.041256, 3.223301,2.428868,0.073344, + 3.173413,2.427791,0.096264, 3.222074,2.448701,0.101052, 3.276998,2.450515,0.076992, + 3.276998,2.450515,0.076992, 3.223301,2.428868,0.073344, 3.173413,2.427791,0.096264, + 3.112835,2.426483,0.110016, 3.155379,2.446498,0.115488, 3.222074,2.448701,0.101052, + 3.222074,2.448701,0.101052, 3.173413,2.427791,0.096264, 3.112835,2.426483,0.110016, + 3.046912,2.425059,0.1146, 3.0828,2.4441,0.1203, 3.155379,2.446498,0.115488, + 3.155379,2.446498,0.115488, 3.112835,2.426483,0.110016, 3.046912,2.425059,0.1146, + 2.98099,2.423636,0.110016, 3.010221,2.441702,0.115488, 3.0828,2.4441,0.1203, + 3.0828,2.4441,0.1203, 3.046912,2.425059,0.1146, 2.98099,2.423636,0.110016, + 2.920412,2.422328,0.096264, 2.943526,2.439499,0.101052, 3.010221,2.441702,0.115488, + 3.010221,2.441702,0.115488, 2.98099,2.423636,0.110016, 2.920412,2.422328,0.096264, + 2.870524,2.42125,0.073344, 2.888602,2.437685,0.076992, 2.943526,2.439499,0.101052, + 2.943526,2.439499,0.101052, 2.920412,2.422328,0.096264, 2.870524,2.42125,0.073344, + 2.836672,2.420519,0.041256, 2.851331,2.436454,0.043308, 2.888602,2.437685,0.076992, + 2.888602,2.437685,0.076992, 2.870524,2.42125,0.073344, 2.836672,2.420519,0.041256, + 2.8242,2.42025,0, 2.8376,2.436,0, 2.851331,2.436454,0.043308, + 2.851331,2.436454,0.043308, 2.836672,2.420519,0.041256, 2.8242,2.42025,0, + 3.1888,2.4,0.0405, 3.257153,2.429599,0.041256, 3.269625,2.429869,0, + 3.269625,2.429869,0, 3.2,2.4,0, 3.1888,2.4,0.0405, + 3.1584,2.4,0.072, 3.223301,2.428868,0.073344, 3.257153,2.429599,0.041256, + 3.257153,2.429599,0.041256, 3.1888,2.4,0.0405, 3.1584,2.4,0.072, + 3.1136,2.4,0.0945, 3.173413,2.427791,0.096264, 3.223301,2.428868,0.073344, + 3.223301,2.428868,0.073344, 3.1584,2.4,0.072, 3.1136,2.4,0.0945, + 3.0592,2.4,0.108, 3.112835,2.426483,0.110016, 3.173413,2.427791,0.096264, + 3.173413,2.427791,0.096264, 3.1136,2.4,0.0945, 3.0592,2.4,0.108, + 3,2.4,0.1125, 3.046912,2.425059,0.1146, 3.112835,2.426483,0.110016, + 3.112835,2.426483,0.110016, 3.0592,2.4,0.108, 3,2.4,0.1125, + 2.9408,2.4,0.108, 2.98099,2.423636,0.110016, 3.046912,2.425059,0.1146, + 3.046912,2.425059,0.1146, 3,2.4,0.1125, 2.9408,2.4,0.108, + 2.8864,2.4,0.0945, 2.920412,2.422328,0.096264, 2.98099,2.423636,0.110016, + 2.98099,2.423636,0.110016, 2.9408,2.4,0.108, 2.8864,2.4,0.0945, + 2.8416,2.4,0.072, 2.870524,2.42125,0.073344, 2.920412,2.422328,0.096264, + 2.920412,2.422328,0.096264, 2.8864,2.4,0.0945, 2.8416,2.4,0.072, + 2.8112,2.4,0.0405, 2.836672,2.420519,0.041256, 2.870524,2.42125,0.073344, + 2.870524,2.42125,0.073344, 2.8416,2.4,0.072, 2.8112,2.4,0.0405, + 2.8,2.4,0, 2.8242,2.42025,0, 2.836672,2.420519,0.041256, + 2.836672,2.420519,0.041256, 2.8112,2.4,0.0405, 2.8,2.4,0, + 0,3.15,0, 0.1946,3.14145,0, 0.192107,3.14145,-0.032048, + 0,3.15,0, 0.192107,3.14145,-0.032048, 0.18487,3.14145,-0.062272, + 0,3.15,0, 0.18487,3.14145,-0.062272, 0.173255,3.14145,-0.090306, + 0,3.15,0, 0.173255,3.14145,-0.090306, 0.157626,3.14145,-0.115787, + 0,3.15,0, 0.157626,3.14145,-0.115787, 0.138348,3.14145,-0.138348, + 0,3.15,0, 0.138348,3.14145,-0.138348, 0.115787,3.14145,-0.157626, + 0,3.15,0, 0.115787,3.14145,-0.157626, 0.090306,3.14145,-0.173255, + 0,3.15,0, 0.090306,3.14145,-0.173255, 0.062272,3.14145,-0.18487, + 0,3.15,0, 0.062272,3.14145,-0.18487, 0.032048,3.14145,-0.192107, + 0,3.15,0, 0.032048,3.14145,-0.192107, 0,3.14145,-0.1946, + 0.304843,3.1176,-0.050855, 0.192107,3.14145,-0.032048, 0.1946,3.14145,0, + 0.1946,3.14145,0, 0.3088,3.1176,0, 0.304843,3.1176,-0.050855, + 0.29336,3.1176,-0.098814, 0.18487,3.14145,-0.062272, 0.192107,3.14145,-0.032048, + 0.192107,3.14145,-0.032048, 0.304843,3.1176,-0.050855, 0.29336,3.1176,-0.098814, + 0.274928,3.1176,-0.143301, 0.173255,3.14145,-0.090306, 0.18487,3.14145,-0.062272, + 0.18487,3.14145,-0.062272, 0.29336,3.1176,-0.098814, 0.274928,3.1176,-0.143301, + 0.250127,3.1176,-0.183734, 0.157626,3.14145,-0.115787, 0.173255,3.14145,-0.090306, + 0.173255,3.14145,-0.090306, 0.274928,3.1176,-0.143301, 0.250127,3.1176,-0.183734, + 0.219536,3.1176,-0.219536, 0.138348,3.14145,-0.138348, 0.157626,3.14145,-0.115787, + 0.157626,3.14145,-0.115787, 0.250127,3.1176,-0.183734, 0.219536,3.1176,-0.219536, + 0.183734,3.1176,-0.250127, 0.115787,3.14145,-0.157626, 0.138348,3.14145,-0.138348, + 0.138348,3.14145,-0.138348, 0.219536,3.1176,-0.219536, 0.183734,3.1176,-0.250127, + 0.143301,3.1176,-0.274928, 0.090306,3.14145,-0.173255, 0.115787,3.14145,-0.157626, + 0.115787,3.14145,-0.157626, 0.183734,3.1176,-0.250127, 0.143301,3.1176,-0.274928, + 0.098814,3.1176,-0.29336, 0.062272,3.14145,-0.18487, 0.090306,3.14145,-0.173255, + 0.090306,3.14145,-0.173255, 0.143301,3.1176,-0.274928, 0.098814,3.1176,-0.29336, + 0.050855,3.1176,-0.304843, 0.032048,3.14145,-0.192107, 0.062272,3.14145,-0.18487, + 0.062272,3.14145,-0.18487, 0.098814,3.1176,-0.29336, 0.050855,3.1176,-0.304843, + 0,3.1176,-0.3088, 0,3.14145,-0.1946, 0.032048,3.14145,-0.192107, + 0.032048,3.14145,-0.192107, 0.050855,3.1176,-0.304843, 0,3.1176,-0.3088, + 0.35361,3.08115,-0.058988, 0.304843,3.1176,-0.050855, 0.3088,3.1176,0, + 0.3088,3.1176,0, 0.3582,3.08115,0, 0.35361,3.08115,-0.058988, + 0.340289,3.08115,-0.114619, 0.29336,3.1176,-0.098814, 0.304843,3.1176,-0.050855, + 0.304843,3.1176,-0.050855, 0.35361,3.08115,-0.058988, 0.340289,3.08115,-0.114619, + 0.318907,3.08115,-0.166221, 0.274928,3.1176,-0.143301, 0.29336,3.1176,-0.098814, + 0.29336,3.1176,-0.098814, 0.340289,3.08115,-0.114619, 0.318907,3.08115,-0.166221, + 0.290138,3.08115,-0.213123, 0.250127,3.1176,-0.183734, 0.274928,3.1176,-0.143301, + 0.274928,3.1176,-0.143301, 0.318907,3.08115,-0.166221, 0.290138,3.08115,-0.213123, + 0.254653,3.08115,-0.254653, 0.219536,3.1176,-0.219536, 0.250127,3.1176,-0.183734, + 0.250127,3.1176,-0.183734, 0.290138,3.08115,-0.213123, 0.254653,3.08115,-0.254653, + 0.213123,3.08115,-0.290138, 0.183734,3.1176,-0.250127, 0.219536,3.1176,-0.219536, + 0.219536,3.1176,-0.219536, 0.254653,3.08115,-0.254653, 0.213123,3.08115,-0.290138, + 0.166221,3.08115,-0.318907, 0.143301,3.1176,-0.274928, 0.183734,3.1176,-0.250127, + 0.183734,3.1176,-0.250127, 0.213123,3.08115,-0.290138, 0.166221,3.08115,-0.318907, + 0.114619,3.08115,-0.340289, 0.098814,3.1176,-0.29336, 0.143301,3.1176,-0.274928, + 0.143301,3.1176,-0.274928, 0.166221,3.08115,-0.318907, 0.114619,3.08115,-0.340289, + 0.058988,3.08115,-0.35361, 0.050855,3.1176,-0.304843, 0.098814,3.1176,-0.29336, + 0.098814,3.1176,-0.29336, 0.114619,3.08115,-0.340289, 0.058988,3.08115,-0.35361, + 0,3.08115,-0.3582, 0,3.1176,-0.3088, 0.050855,3.1176,-0.304843, + 0.050855,3.1176,-0.304843, 0.058988,3.08115,-0.35361, 0,3.08115,-0.3582, + 0.353807,3.0348,-0.059016, 0.35361,3.08115,-0.058988, 0.3582,3.08115,0, + 0.3582,3.08115,0, 0.3584,3.0348,0, 0.353807,3.0348,-0.059016, + 0.340477,3.0348,-0.114676, 0.340289,3.08115,-0.114619, 0.35361,3.08115,-0.058988, + 0.35361,3.08115,-0.058988, 0.353807,3.0348,-0.059016, 0.340477,3.0348,-0.114676, + 0.319082,3.0348,-0.166306, 0.318907,3.08115,-0.166221, 0.340289,3.08115,-0.114619, + 0.340289,3.08115,-0.114619, 0.340477,3.0348,-0.114676, 0.319082,3.0348,-0.166306, + 0.290295,3.0348,-0.213234, 0.290138,3.08115,-0.213123, 0.318907,3.08115,-0.166221, + 0.318907,3.08115,-0.166221, 0.319082,3.0348,-0.166306, 0.290295,3.0348,-0.213234, + 0.254788,3.0348,-0.254788, 0.254653,3.08115,-0.254653, 0.290138,3.08115,-0.213123, + 0.290138,3.08115,-0.213123, 0.290295,3.0348,-0.213234, 0.254788,3.0348,-0.254788, + 0.213234,3.0348,-0.290295, 0.213123,3.08115,-0.290138, 0.254653,3.08115,-0.254653, + 0.254653,3.08115,-0.254653, 0.254788,3.0348,-0.254788, 0.213234,3.0348,-0.290295, + 0.166306,3.0348,-0.319082, 0.166221,3.08115,-0.318907, 0.213123,3.08115,-0.290138, + 0.213123,3.08115,-0.290138, 0.213234,3.0348,-0.290295, 0.166306,3.0348,-0.319082, + 0.114676,3.0348,-0.340477, 0.114619,3.08115,-0.340289, 0.166221,3.08115,-0.318907, + 0.166221,3.08115,-0.318907, 0.166306,3.0348,-0.319082, 0.114676,3.0348,-0.340477, + 0.059016,3.0348,-0.353807, 0.058988,3.08115,-0.35361, 0.114619,3.08115,-0.340289, + 0.114619,3.08115,-0.340289, 0.114676,3.0348,-0.340477, 0.059016,3.0348,-0.353807, + 0,3.0348,-0.3584, 0,3.08115,-0.3582, 0.058988,3.08115,-0.35361, + 0.058988,3.08115,-0.35361, 0.059016,3.0348,-0.353807, 0,3.0348,-0.3584, + 0.320834,2.98125,-0.053508, 0.353807,3.0348,-0.059016, 0.3584,3.0348,0, + 0.3584,3.0348,0, 0.325,2.98125,0, 0.320834,2.98125,-0.053508, + 0.308744,2.98125,-0.103976, 0.340477,3.0348,-0.114676, 0.353807,3.0348,-0.059016, + 0.353807,3.0348,-0.059016, 0.320834,2.98125,-0.053508, 0.308744,2.98125,-0.103976, + 0.28934,2.98125,-0.150793, 0.319082,3.0348,-0.166306, 0.340477,3.0348,-0.114676, + 0.340477,3.0348,-0.114676, 0.308744,2.98125,-0.103976, 0.28934,2.98125,-0.150793, + 0.263232,2.98125,-0.193348, 0.290295,3.0348,-0.213234, 0.319082,3.0348,-0.166306, + 0.319082,3.0348,-0.166306, 0.28934,2.98125,-0.150793, 0.263232,2.98125,-0.193348, + 0.231031,2.98125,-0.231031, 0.254788,3.0348,-0.254788, 0.290295,3.0348,-0.213234, + 0.290295,3.0348,-0.213234, 0.263232,2.98125,-0.193348, 0.231031,2.98125,-0.231031, + 0.193348,2.98125,-0.263232, 0.213234,3.0348,-0.290295, 0.254788,3.0348,-0.254788, + 0.254788,3.0348,-0.254788, 0.231031,2.98125,-0.231031, 0.193348,2.98125,-0.263232, + 0.150793,2.98125,-0.28934, 0.166306,3.0348,-0.319082, 0.213234,3.0348,-0.290295, + 0.213234,3.0348,-0.290295, 0.193348,2.98125,-0.263232, 0.150793,2.98125,-0.28934, + 0.103976,2.98125,-0.308744, 0.114676,3.0348,-0.340477, 0.166306,3.0348,-0.319082, + 0.166306,3.0348,-0.319082, 0.150793,2.98125,-0.28934, 0.103976,2.98125,-0.308744, + 0.053508,2.98125,-0.320834, 0.059016,3.0348,-0.353807, 0.114676,3.0348,-0.340477, + 0.114676,3.0348,-0.340477, 0.103976,2.98125,-0.308744, 0.053508,2.98125,-0.320834, + 0,2.98125,-0.325, 0,3.0348,-0.3584, 0.059016,3.0348,-0.353807, + 0.059016,3.0348,-0.353807, 0.053508,2.98125,-0.320834, 0,2.98125,-0.325, + 0.270092,2.9232,-0.045032, 0.320834,2.98125,-0.053508, 0.325,2.98125,0, + 0.325,2.98125,0, 0.2736,2.9232,0, 0.270092,2.9232,-0.045032, + 0.25991,2.9232,-0.087511, 0.308744,2.98125,-0.103976, 0.320834,2.98125,-0.053508, + 0.320834,2.98125,-0.053508, 0.270092,2.9232,-0.045032, 0.25991,2.9232,-0.087511, + 0.243569,2.9232,-0.12692, 0.28934,2.98125,-0.150793, 0.308744,2.98125,-0.103976, + 0.308744,2.98125,-0.103976, 0.25991,2.9232,-0.087511, 0.243569,2.9232,-0.12692, + 0.221585,2.9232,-0.162745, 0.263232,2.98125,-0.193348, 0.28934,2.98125,-0.150793, + 0.28934,2.98125,-0.150793, 0.243569,2.9232,-0.12692, 0.221585,2.9232,-0.162745, + 0.194472,2.9232,-0.194472, 0.231031,2.98125,-0.231031, 0.263232,2.98125,-0.193348, + 0.263232,2.98125,-0.193348, 0.221585,2.9232,-0.162745, 0.194472,2.9232,-0.194472, + 0.162745,2.9232,-0.221585, 0.193348,2.98125,-0.263232, 0.231031,2.98125,-0.231031, + 0.231031,2.98125,-0.231031, 0.194472,2.9232,-0.194472, 0.162745,2.9232,-0.221585, + 0.12692,2.9232,-0.243569, 0.150793,2.98125,-0.28934, 0.193348,2.98125,-0.263232, + 0.193348,2.98125,-0.263232, 0.162745,2.9232,-0.221585, 0.12692,2.9232,-0.243569, + 0.087511,2.9232,-0.25991, 0.103976,2.98125,-0.308744, 0.150793,2.98125,-0.28934, + 0.150793,2.98125,-0.28934, 0.12692,2.9232,-0.243569, 0.087511,2.9232,-0.25991, + 0.045032,2.9232,-0.270092, 0.053508,2.98125,-0.320834, 0.103976,2.98125,-0.308744, + 0.103976,2.98125,-0.308744, 0.087511,2.9232,-0.25991, 0.045032,2.9232,-0.270092, + 0,2.9232,-0.2736, 0,2.98125,-0.325, 0.053508,2.98125,-0.320834, + 0.053508,2.98125,-0.320834, 0.045032,2.9232,-0.270092, 0,2.9232,-0.2736, + 0.216979,2.86335,-0.036157, 0.270092,2.9232,-0.045032, 0.2736,2.9232,0, + 0.2736,2.9232,0, 0.2198,2.86335,0, 0.216979,2.86335,-0.036157, + 0.208794,2.86335,-0.07027, 0.25991,2.9232,-0.087511, 0.270092,2.9232,-0.045032, + 0.270092,2.9232,-0.045032, 0.216979,2.86335,-0.036157, 0.208794,2.86335,-0.07027, + 0.195658,2.86335,-0.101925, 0.243569,2.9232,-0.12692, 0.25991,2.9232,-0.087511, + 0.25991,2.9232,-0.087511, 0.208794,2.86335,-0.07027, 0.195658,2.86335,-0.101925, + 0.177989,2.86335,-0.130707, 0.221585,2.9232,-0.162745, 0.243569,2.9232,-0.12692, + 0.243569,2.9232,-0.12692, 0.195658,2.86335,-0.101925, 0.177989,2.86335,-0.130707, + 0.1562,2.86335,-0.1562, 0.194472,2.9232,-0.194472, 0.221585,2.9232,-0.162745, + 0.221585,2.9232,-0.162745, 0.177989,2.86335,-0.130707, 0.1562,2.86335,-0.1562, + 0.130707,2.86335,-0.177989, 0.162745,2.9232,-0.221585, 0.194472,2.9232,-0.194472, + 0.194472,2.9232,-0.194472, 0.1562,2.86335,-0.1562, 0.130707,2.86335,-0.177989, + 0.101925,2.86335,-0.195658, 0.12692,2.9232,-0.243569, 0.162745,2.9232,-0.221585, + 0.162745,2.9232,-0.221585, 0.130707,2.86335,-0.177989, 0.101925,2.86335,-0.195658, + 0.07027,2.86335,-0.208794, 0.087511,2.9232,-0.25991, 0.12692,2.9232,-0.243569, + 0.12692,2.9232,-0.243569, 0.101925,2.86335,-0.195658, 0.07027,2.86335,-0.208794, + 0.036157,2.86335,-0.216979, 0.045032,2.9232,-0.270092, 0.087511,2.9232,-0.25991, + 0.087511,2.9232,-0.25991, 0.07027,2.86335,-0.208794, 0.036157,2.86335,-0.216979, + 0,2.86335,-0.2198, 0,2.9232,-0.2736, 0.045032,2.9232,-0.270092, + 0.045032,2.9232,-0.270092, 0.036157,2.86335,-0.216979, 0,2.86335,-0.2198, + 0.176897,2.8044,-0.02945, 0.216979,2.86335,-0.036157, 0.2198,2.86335,0, + 0.2198,2.86335,0, 0.1792,2.8044,0, 0.176897,2.8044,-0.02945, + 0.170215,2.8044,-0.057246, 0.208794,2.86335,-0.07027, 0.216979,2.86335,-0.036157, + 0.216979,2.86335,-0.036157, 0.176897,2.8044,-0.02945, 0.170215,2.8044,-0.057246, + 0.159496,2.8044,-0.083047, 0.195658,2.86335,-0.101925, 0.208794,2.86335,-0.07027, + 0.208794,2.86335,-0.07027, 0.170215,2.8044,-0.057246, 0.159496,2.8044,-0.083047, + 0.145078,2.8044,-0.106513, 0.177989,2.86335,-0.130707, 0.195658,2.86335,-0.101925, + 0.195658,2.86335,-0.101925, 0.159496,2.8044,-0.083047, 0.145078,2.8044,-0.106513, + 0.127304,2.8044,-0.127304, 0.1562,2.86335,-0.1562, 0.177989,2.86335,-0.130707, + 0.177989,2.86335,-0.130707, 0.145078,2.8044,-0.106513, 0.127304,2.8044,-0.127304, + 0.106513,2.8044,-0.145078, 0.130707,2.86335,-0.177989, 0.1562,2.86335,-0.1562, + 0.1562,2.86335,-0.1562, 0.127304,2.8044,-0.127304, 0.106513,2.8044,-0.145078, + 0.083047,2.8044,-0.159496, 0.101925,2.86335,-0.195658, 0.130707,2.86335,-0.177989, + 0.130707,2.86335,-0.177989, 0.106513,2.8044,-0.145078, 0.083047,2.8044,-0.159496, + 0.057246,2.8044,-0.170215, 0.07027,2.86335,-0.208794, 0.101925,2.86335,-0.195658, + 0.101925,2.86335,-0.195658, 0.083047,2.8044,-0.159496, 0.057246,2.8044,-0.170215, + 0.02945,2.8044,-0.176897, 0.036157,2.86335,-0.216979, 0.07027,2.86335,-0.208794, + 0.07027,2.86335,-0.208794, 0.057246,2.8044,-0.170215, 0.02945,2.8044,-0.176897, + 0,2.8044,-0.1792, 0,2.86335,-0.2198, 0.036157,2.86335,-0.216979, + 0.036157,2.86335,-0.216979, 0.02945,2.8044,-0.176897, 0,2.8044,-0.1792, + 0.165245,2.74905,-0.02748, 0.176897,2.8044,-0.02945, 0.1792,2.8044,0, + 0.1792,2.8044,0, 0.1674,2.74905,0, 0.165245,2.74905,-0.02748, + 0.158995,2.74905,-0.053428, 0.170215,2.8044,-0.057246, 0.176897,2.8044,-0.02945, + 0.176897,2.8044,-0.02945, 0.165245,2.74905,-0.02748, 0.158995,2.74905,-0.053428, + 0.148969,2.74905,-0.077523, 0.159496,2.8044,-0.083047, 0.170215,2.8044,-0.057246, + 0.170215,2.8044,-0.057246, 0.158995,2.74905,-0.053428, 0.148969,2.74905,-0.077523, + 0.135489,2.74905,-0.099446, 0.145078,2.8044,-0.106513, 0.159496,2.8044,-0.083047, + 0.159496,2.8044,-0.083047, 0.148969,2.74905,-0.077523, 0.135489,2.74905,-0.099446, + 0.118874,2.74905,-0.118874, 0.127304,2.8044,-0.127304, 0.145078,2.8044,-0.106513, + 0.145078,2.8044,-0.106513, 0.135489,2.74905,-0.099446, 0.118874,2.74905,-0.118874, + 0.099446,2.74905,-0.135489, 0.106513,2.8044,-0.145078, 0.127304,2.8044,-0.127304, + 0.127304,2.8044,-0.127304, 0.118874,2.74905,-0.118874, 0.099446,2.74905,-0.135489, + 0.077523,2.74905,-0.148969, 0.083047,2.8044,-0.159496, 0.106513,2.8044,-0.145078, + 0.106513,2.8044,-0.145078, 0.099446,2.74905,-0.135489, 0.077523,2.74905,-0.148969, + 0.053428,2.74905,-0.158995, 0.057246,2.8044,-0.170215, 0.083047,2.8044,-0.159496, + 0.083047,2.8044,-0.159496, 0.077523,2.74905,-0.148969, 0.053428,2.74905,-0.158995, + 0.02748,2.74905,-0.165245, 0.02945,2.8044,-0.176897, 0.057246,2.8044,-0.170215, + 0.057246,2.8044,-0.170215, 0.053428,2.74905,-0.158995, 0.02748,2.74905,-0.165245, + 0,2.74905,-0.1674, 0,2.8044,-0.1792, 0.02945,2.8044,-0.176897, + 0.02945,2.8044,-0.176897, 0.02748,2.74905,-0.165245, 0,2.74905,-0.1674, + 0.197424,2.7,-0.032816, 0.165245,2.74905,-0.02748, 0.1674,2.74905,0, + 0.1674,2.74905,0, 0.2,2.7,0, 0.197424,2.7,-0.032816, + 0.189952,2.7,-0.063808, 0.158995,2.74905,-0.053428, 0.165245,2.74905,-0.02748, + 0.165245,2.74905,-0.02748, 0.197424,2.7,-0.032816, 0.189952,2.7,-0.063808, + 0.177968,2.7,-0.092592, 0.148969,2.74905,-0.077523, 0.158995,2.74905,-0.053428, + 0.158995,2.74905,-0.053428, 0.189952,2.7,-0.063808, 0.177968,2.7,-0.092592, + 0.161856,2.7,-0.118784, 0.135489,2.74905,-0.099446, 0.148969,2.74905,-0.077523, + 0.148969,2.74905,-0.077523, 0.177968,2.7,-0.092592, 0.161856,2.7,-0.118784, + 0.142,2.7,-0.142, 0.118874,2.74905,-0.118874, 0.135489,2.74905,-0.099446, + 0.135489,2.74905,-0.099446, 0.161856,2.7,-0.118784, 0.142,2.7,-0.142, + 0.118784,2.7,-0.161856, 0.099446,2.74905,-0.135489, 0.118874,2.74905,-0.118874, + 0.118874,2.74905,-0.118874, 0.142,2.7,-0.142, 0.118784,2.7,-0.161856, + 0.092592,2.7,-0.177968, 0.077523,2.74905,-0.148969, 0.099446,2.74905,-0.135489, + 0.099446,2.74905,-0.135489, 0.118784,2.7,-0.161856, 0.092592,2.7,-0.177968, + 0.063808,2.7,-0.189952, 0.053428,2.74905,-0.158995, 0.077523,2.74905,-0.148969, + 0.077523,2.74905,-0.148969, 0.092592,2.7,-0.177968, 0.063808,2.7,-0.189952, + 0.032816,2.7,-0.197424, 0.02748,2.74905,-0.165245, 0.053428,2.74905,-0.158995, + 0.053428,2.74905,-0.158995, 0.063808,2.7,-0.189952, 0.032816,2.7,-0.197424, + 0,2.7,-0.2, 0,2.74905,-0.1674, 0.02748,2.74905,-0.165245, + 0.02748,2.74905,-0.165245, 0.032816,2.7,-0.197424, 0,2.7,-0.2, + 0,3.15,0, 0,3.14145,-0.1946, -0.032048,3.14145,-0.192107, + 0,3.15,0, -0.032048,3.14145,-0.192107, -0.062272,3.14145,-0.18487, + 0,3.15,0, -0.062272,3.14145,-0.18487, -0.090306,3.14145,-0.173255, + 0,3.15,0, -0.090306,3.14145,-0.173255, -0.115787,3.14145,-0.157626, + 0,3.15,0, -0.115787,3.14145,-0.157626, -0.138348,3.14145,-0.138348, + 0,3.15,0, -0.138348,3.14145,-0.138348, -0.157626,3.14145,-0.115787, + 0,3.15,0, -0.157626,3.14145,-0.115787, -0.173255,3.14145,-0.090306, + 0,3.15,0, -0.173255,3.14145,-0.090306, -0.18487,3.14145,-0.062272, + 0,3.15,0, -0.18487,3.14145,-0.062272, -0.192107,3.14145,-0.032048, + 0,3.15,0, -0.192107,3.14145,-0.032048, -0.1946,3.14145,0, + -0.050855,3.1176,-0.304843, -0.032048,3.14145,-0.192107, 0,3.14145,-0.1946, + 0,3.14145,-0.1946, 0,3.1176,-0.3088, -0.050855,3.1176,-0.304843, + -0.098814,3.1176,-0.29336, -0.062272,3.14145,-0.18487, -0.032048,3.14145,-0.192107, + -0.032048,3.14145,-0.192107, -0.050855,3.1176,-0.304843, -0.098814,3.1176,-0.29336, + -0.143301,3.1176,-0.274928, -0.090306,3.14145,-0.173255, -0.062272,3.14145,-0.18487, + -0.062272,3.14145,-0.18487, -0.098814,3.1176,-0.29336, -0.143301,3.1176,-0.274928, + -0.183734,3.1176,-0.250127, -0.115787,3.14145,-0.157626, -0.090306,3.14145,-0.173255, + -0.090306,3.14145,-0.173255, -0.143301,3.1176,-0.274928, -0.183734,3.1176,-0.250127, + -0.219536,3.1176,-0.219536, -0.138348,3.14145,-0.138348, -0.115787,3.14145,-0.157626, + -0.115787,3.14145,-0.157626, -0.183734,3.1176,-0.250127, -0.219536,3.1176,-0.219536, + -0.250127,3.1176,-0.183734, -0.157626,3.14145,-0.115787, -0.138348,3.14145,-0.138348, + -0.138348,3.14145,-0.138348, -0.219536,3.1176,-0.219536, -0.250127,3.1176,-0.183734, + -0.274928,3.1176,-0.143301, -0.173255,3.14145,-0.090306, -0.157626,3.14145,-0.115787, + -0.157626,3.14145,-0.115787, -0.250127,3.1176,-0.183734, -0.274928,3.1176,-0.143301, + -0.29336,3.1176,-0.098814, -0.18487,3.14145,-0.062272, -0.173255,3.14145,-0.090306, + -0.173255,3.14145,-0.090306, -0.274928,3.1176,-0.143301, -0.29336,3.1176,-0.098814, + -0.304843,3.1176,-0.050855, -0.192107,3.14145,-0.032048, -0.18487,3.14145,-0.062272, + -0.18487,3.14145,-0.062272, -0.29336,3.1176,-0.098814, -0.304843,3.1176,-0.050855, + -0.3088,3.1176,0, -0.1946,3.14145,0, -0.192107,3.14145,-0.032048, + -0.192107,3.14145,-0.032048, -0.304843,3.1176,-0.050855, -0.3088,3.1176,0, + -0.058988,3.08115,-0.35361, -0.050855,3.1176,-0.304843, 0,3.1176,-0.3088, + 0,3.1176,-0.3088, 0,3.08115,-0.3582, -0.058988,3.08115,-0.35361, + -0.114619,3.08115,-0.340289, -0.098814,3.1176,-0.29336, -0.050855,3.1176,-0.304843, + -0.050855,3.1176,-0.304843, -0.058988,3.08115,-0.35361, -0.114619,3.08115,-0.340289, + -0.166221,3.08115,-0.318907, -0.143301,3.1176,-0.274928, -0.098814,3.1176,-0.29336, + -0.098814,3.1176,-0.29336, -0.114619,3.08115,-0.340289, -0.166221,3.08115,-0.318907, + -0.213123,3.08115,-0.290138, -0.183734,3.1176,-0.250127, -0.143301,3.1176,-0.274928, + -0.143301,3.1176,-0.274928, -0.166221,3.08115,-0.318907, -0.213123,3.08115,-0.290138, + -0.254653,3.08115,-0.254653, -0.219536,3.1176,-0.219536, -0.183734,3.1176,-0.250127, + -0.183734,3.1176,-0.250127, -0.213123,3.08115,-0.290138, -0.254653,3.08115,-0.254653, + -0.290138,3.08115,-0.213123, -0.250127,3.1176,-0.183734, -0.219536,3.1176,-0.219536, + -0.219536,3.1176,-0.219536, -0.254653,3.08115,-0.254653, -0.290138,3.08115,-0.213123, + -0.318907,3.08115,-0.166221, -0.274928,3.1176,-0.143301, -0.250127,3.1176,-0.183734, + -0.250127,3.1176,-0.183734, -0.290138,3.08115,-0.213123, -0.318907,3.08115,-0.166221, + -0.340289,3.08115,-0.114619, -0.29336,3.1176,-0.098814, -0.274928,3.1176,-0.143301, + -0.274928,3.1176,-0.143301, -0.318907,3.08115,-0.166221, -0.340289,3.08115,-0.114619, + -0.35361,3.08115,-0.058988, -0.304843,3.1176,-0.050855, -0.29336,3.1176,-0.098814, + -0.29336,3.1176,-0.098814, -0.340289,3.08115,-0.114619, -0.35361,3.08115,-0.058988, + -0.3582,3.08115,0, -0.3088,3.1176,0, -0.304843,3.1176,-0.050855, + -0.304843,3.1176,-0.050855, -0.35361,3.08115,-0.058988, -0.3582,3.08115,0, + -0.059016,3.0348,-0.353807, -0.058988,3.08115,-0.35361, 0,3.08115,-0.3582, + 0,3.08115,-0.3582, 0,3.0348,-0.3584, -0.059016,3.0348,-0.353807, + -0.114676,3.0348,-0.340477, -0.114619,3.08115,-0.340289, -0.058988,3.08115,-0.35361, + -0.058988,3.08115,-0.35361, -0.059016,3.0348,-0.353807, -0.114676,3.0348,-0.340477, + -0.166306,3.0348,-0.319082, -0.166221,3.08115,-0.318907, -0.114619,3.08115,-0.340289, + -0.114619,3.08115,-0.340289, -0.114676,3.0348,-0.340477, -0.166306,3.0348,-0.319082, + -0.213234,3.0348,-0.290295, -0.213123,3.08115,-0.290138, -0.166221,3.08115,-0.318907, + -0.166221,3.08115,-0.318907, -0.166306,3.0348,-0.319082, -0.213234,3.0348,-0.290295, + -0.254788,3.0348,-0.254788, -0.254653,3.08115,-0.254653, -0.213123,3.08115,-0.290138, + -0.213123,3.08115,-0.290138, -0.213234,3.0348,-0.290295, -0.254788,3.0348,-0.254788, + -0.290295,3.0348,-0.213234, -0.290138,3.08115,-0.213123, -0.254653,3.08115,-0.254653, + -0.254653,3.08115,-0.254653, -0.254788,3.0348,-0.254788, -0.290295,3.0348,-0.213234, + -0.319082,3.0348,-0.166306, -0.318907,3.08115,-0.166221, -0.290138,3.08115,-0.213123, + -0.290138,3.08115,-0.213123, -0.290295,3.0348,-0.213234, -0.319082,3.0348,-0.166306, + -0.340477,3.0348,-0.114676, -0.340289,3.08115,-0.114619, -0.318907,3.08115,-0.166221, + -0.318907,3.08115,-0.166221, -0.319082,3.0348,-0.166306, -0.340477,3.0348,-0.114676, + -0.353807,3.0348,-0.059016, -0.35361,3.08115,-0.058988, -0.340289,3.08115,-0.114619, + -0.340289,3.08115,-0.114619, -0.340477,3.0348,-0.114676, -0.353807,3.0348,-0.059016, + -0.3584,3.0348,0, -0.3582,3.08115,0, -0.35361,3.08115,-0.058988, + -0.35361,3.08115,-0.058988, -0.353807,3.0348,-0.059016, -0.3584,3.0348,0, + -0.053508,2.98125,-0.320834, -0.059016,3.0348,-0.353807, 0,3.0348,-0.3584, + 0,3.0348,-0.3584, 0,2.98125,-0.325, -0.053508,2.98125,-0.320834, + -0.103976,2.98125,-0.308744, -0.114676,3.0348,-0.340477, -0.059016,3.0348,-0.353807, + -0.059016,3.0348,-0.353807, -0.053508,2.98125,-0.320834, -0.103976,2.98125,-0.308744, + -0.150793,2.98125,-0.28934, -0.166306,3.0348,-0.319082, -0.114676,3.0348,-0.340477, + -0.114676,3.0348,-0.340477, -0.103976,2.98125,-0.308744, -0.150793,2.98125,-0.28934, + -0.193348,2.98125,-0.263232, -0.213234,3.0348,-0.290295, -0.166306,3.0348,-0.319082, + -0.166306,3.0348,-0.319082, -0.150793,2.98125,-0.28934, -0.193348,2.98125,-0.263232, + -0.231031,2.98125,-0.231031, -0.254788,3.0348,-0.254788, -0.213234,3.0348,-0.290295, + -0.213234,3.0348,-0.290295, -0.193348,2.98125,-0.263232, -0.231031,2.98125,-0.231031, + -0.263232,2.98125,-0.193348, -0.290295,3.0348,-0.213234, -0.254788,3.0348,-0.254788, + -0.254788,3.0348,-0.254788, -0.231031,2.98125,-0.231031, -0.263232,2.98125,-0.193348, + -0.28934,2.98125,-0.150793, -0.319082,3.0348,-0.166306, -0.290295,3.0348,-0.213234, + -0.290295,3.0348,-0.213234, -0.263232,2.98125,-0.193348, -0.28934,2.98125,-0.150793, + -0.308744,2.98125,-0.103976, -0.340477,3.0348,-0.114676, -0.319082,3.0348,-0.166306, + -0.319082,3.0348,-0.166306, -0.28934,2.98125,-0.150793, -0.308744,2.98125,-0.103976, + -0.320834,2.98125,-0.053508, -0.353807,3.0348,-0.059016, -0.340477,3.0348,-0.114676, + -0.340477,3.0348,-0.114676, -0.308744,2.98125,-0.103976, -0.320834,2.98125,-0.053508, + -0.325,2.98125,0, -0.3584,3.0348,0, -0.353807,3.0348,-0.059016, + -0.353807,3.0348,-0.059016, -0.320834,2.98125,-0.053508, -0.325,2.98125,0, + -0.045032,2.9232,-0.270092, -0.053508,2.98125,-0.320834, 0,2.98125,-0.325, + 0,2.98125,-0.325, 0,2.9232,-0.2736, -0.045032,2.9232,-0.270092, + -0.087511,2.9232,-0.25991, -0.103976,2.98125,-0.308744, -0.053508,2.98125,-0.320834, + -0.053508,2.98125,-0.320834, -0.045032,2.9232,-0.270092, -0.087511,2.9232,-0.25991, + -0.12692,2.9232,-0.243569, -0.150793,2.98125,-0.28934, -0.103976,2.98125,-0.308744, + -0.103976,2.98125,-0.308744, -0.087511,2.9232,-0.25991, -0.12692,2.9232,-0.243569, + -0.162745,2.9232,-0.221585, -0.193348,2.98125,-0.263232, -0.150793,2.98125,-0.28934, + -0.150793,2.98125,-0.28934, -0.12692,2.9232,-0.243569, -0.162745,2.9232,-0.221585, + -0.194472,2.9232,-0.194472, -0.231031,2.98125,-0.231031, -0.193348,2.98125,-0.263232, + -0.193348,2.98125,-0.263232, -0.162745,2.9232,-0.221585, -0.194472,2.9232,-0.194472, + -0.221585,2.9232,-0.162745, -0.263232,2.98125,-0.193348, -0.231031,2.98125,-0.231031, + -0.231031,2.98125,-0.231031, -0.194472,2.9232,-0.194472, -0.221585,2.9232,-0.162745, + -0.243569,2.9232,-0.12692, -0.28934,2.98125,-0.150793, -0.263232,2.98125,-0.193348, + -0.263232,2.98125,-0.193348, -0.221585,2.9232,-0.162745, -0.243569,2.9232,-0.12692, + -0.25991,2.9232,-0.087511, -0.308744,2.98125,-0.103976, -0.28934,2.98125,-0.150793, + -0.28934,2.98125,-0.150793, -0.243569,2.9232,-0.12692, -0.25991,2.9232,-0.087511, + -0.270092,2.9232,-0.045032, -0.320834,2.98125,-0.053508, -0.308744,2.98125,-0.103976, + -0.308744,2.98125,-0.103976, -0.25991,2.9232,-0.087511, -0.270092,2.9232,-0.045032, + -0.2736,2.9232,0, -0.325,2.98125,0, -0.320834,2.98125,-0.053508, + -0.320834,2.98125,-0.053508, -0.270092,2.9232,-0.045032, -0.2736,2.9232,0, + -0.036157,2.86335,-0.216979, -0.045032,2.9232,-0.270092, 0,2.9232,-0.2736, + 0,2.9232,-0.2736, 0,2.86335,-0.2198, -0.036157,2.86335,-0.216979, + -0.07027,2.86335,-0.208794, -0.087511,2.9232,-0.25991, -0.045032,2.9232,-0.270092, + -0.045032,2.9232,-0.270092, -0.036157,2.86335,-0.216979, -0.07027,2.86335,-0.208794, + -0.101925,2.86335,-0.195658, -0.12692,2.9232,-0.243569, -0.087511,2.9232,-0.25991, + -0.087511,2.9232,-0.25991, -0.07027,2.86335,-0.208794, -0.101925,2.86335,-0.195658, + -0.130707,2.86335,-0.177989, -0.162745,2.9232,-0.221585, -0.12692,2.9232,-0.243569, + -0.12692,2.9232,-0.243569, -0.101925,2.86335,-0.195658, -0.130707,2.86335,-0.177989, + -0.1562,2.86335,-0.1562, -0.194472,2.9232,-0.194472, -0.162745,2.9232,-0.221585, + -0.162745,2.9232,-0.221585, -0.130707,2.86335,-0.177989, -0.1562,2.86335,-0.1562, + -0.177989,2.86335,-0.130707, -0.221585,2.9232,-0.162745, -0.194472,2.9232,-0.194472, + -0.194472,2.9232,-0.194472, -0.1562,2.86335,-0.1562, -0.177989,2.86335,-0.130707, + -0.195658,2.86335,-0.101925, -0.243569,2.9232,-0.12692, -0.221585,2.9232,-0.162745, + -0.221585,2.9232,-0.162745, -0.177989,2.86335,-0.130707, -0.195658,2.86335,-0.101925, + -0.208794,2.86335,-0.07027, -0.25991,2.9232,-0.087511, -0.243569,2.9232,-0.12692, + -0.243569,2.9232,-0.12692, -0.195658,2.86335,-0.101925, -0.208794,2.86335,-0.07027, + -0.216979,2.86335,-0.036157, -0.270092,2.9232,-0.045032, -0.25991,2.9232,-0.087511, + -0.25991,2.9232,-0.087511, -0.208794,2.86335,-0.07027, -0.216979,2.86335,-0.036157, + -0.2198,2.86335,0, -0.2736,2.9232,0, -0.270092,2.9232,-0.045032, + -0.270092,2.9232,-0.045032, -0.216979,2.86335,-0.036157, -0.2198,2.86335,0, + -0.02945,2.8044,-0.176897, -0.036157,2.86335,-0.216979, 0,2.86335,-0.2198, + 0,2.86335,-0.2198, 0,2.8044,-0.1792, -0.02945,2.8044,-0.176897, + -0.057246,2.8044,-0.170215, -0.07027,2.86335,-0.208794, -0.036157,2.86335,-0.216979, + -0.036157,2.86335,-0.216979, -0.02945,2.8044,-0.176897, -0.057246,2.8044,-0.170215, + -0.083047,2.8044,-0.159496, -0.101925,2.86335,-0.195658, -0.07027,2.86335,-0.208794, + -0.07027,2.86335,-0.208794, -0.057246,2.8044,-0.170215, -0.083047,2.8044,-0.159496, + -0.106513,2.8044,-0.145078, -0.130707,2.86335,-0.177989, -0.101925,2.86335,-0.195658, + -0.101925,2.86335,-0.195658, -0.083047,2.8044,-0.159496, -0.106513,2.8044,-0.145078, + -0.127304,2.8044,-0.127304, -0.1562,2.86335,-0.1562, -0.130707,2.86335,-0.177989, + -0.130707,2.86335,-0.177989, -0.106513,2.8044,-0.145078, -0.127304,2.8044,-0.127304, + -0.145078,2.8044,-0.106513, -0.177989,2.86335,-0.130707, -0.1562,2.86335,-0.1562, + -0.1562,2.86335,-0.1562, -0.127304,2.8044,-0.127304, -0.145078,2.8044,-0.106513, + -0.159496,2.8044,-0.083047, -0.195658,2.86335,-0.101925, -0.177989,2.86335,-0.130707, + -0.177989,2.86335,-0.130707, -0.145078,2.8044,-0.106513, -0.159496,2.8044,-0.083047, + -0.170215,2.8044,-0.057246, -0.208794,2.86335,-0.07027, -0.195658,2.86335,-0.101925, + -0.195658,2.86335,-0.101925, -0.159496,2.8044,-0.083047, -0.170215,2.8044,-0.057246, + -0.176897,2.8044,-0.02945, -0.216979,2.86335,-0.036157, -0.208794,2.86335,-0.07027, + -0.208794,2.86335,-0.07027, -0.170215,2.8044,-0.057246, -0.176897,2.8044,-0.02945, + -0.1792,2.8044,0, -0.2198,2.86335,0, -0.216979,2.86335,-0.036157, + -0.216979,2.86335,-0.036157, -0.176897,2.8044,-0.02945, -0.1792,2.8044,0, + -0.02748,2.74905,-0.165245, -0.02945,2.8044,-0.176897, 0,2.8044,-0.1792, + 0,2.8044,-0.1792, 0,2.74905,-0.1674, -0.02748,2.74905,-0.165245, + -0.053428,2.74905,-0.158995, -0.057246,2.8044,-0.170215, -0.02945,2.8044,-0.176897, + -0.02945,2.8044,-0.176897, -0.02748,2.74905,-0.165245, -0.053428,2.74905,-0.158995, + -0.077523,2.74905,-0.148969, -0.083047,2.8044,-0.159496, -0.057246,2.8044,-0.170215, + -0.057246,2.8044,-0.170215, -0.053428,2.74905,-0.158995, -0.077523,2.74905,-0.148969, + -0.099446,2.74905,-0.135489, -0.106513,2.8044,-0.145078, -0.083047,2.8044,-0.159496, + -0.083047,2.8044,-0.159496, -0.077523,2.74905,-0.148969, -0.099446,2.74905,-0.135489, + -0.118874,2.74905,-0.118874, -0.127304,2.8044,-0.127304, -0.106513,2.8044,-0.145078, + -0.106513,2.8044,-0.145078, -0.099446,2.74905,-0.135489, -0.118874,2.74905,-0.118874, + -0.135489,2.74905,-0.099446, -0.145078,2.8044,-0.106513, -0.127304,2.8044,-0.127304, + -0.127304,2.8044,-0.127304, -0.118874,2.74905,-0.118874, -0.135489,2.74905,-0.099446, + -0.148969,2.74905,-0.077523, -0.159496,2.8044,-0.083047, -0.145078,2.8044,-0.106513, + -0.145078,2.8044,-0.106513, -0.135489,2.74905,-0.099446, -0.148969,2.74905,-0.077523, + -0.158995,2.74905,-0.053428, -0.170215,2.8044,-0.057246, -0.159496,2.8044,-0.083047, + -0.159496,2.8044,-0.083047, -0.148969,2.74905,-0.077523, -0.158995,2.74905,-0.053428, + -0.165245,2.74905,-0.02748, -0.176897,2.8044,-0.02945, -0.170215,2.8044,-0.057246, + -0.170215,2.8044,-0.057246, -0.158995,2.74905,-0.053428, -0.165245,2.74905,-0.02748, + -0.1674,2.74905,0, -0.1792,2.8044,0, -0.176897,2.8044,-0.02945, + -0.176897,2.8044,-0.02945, -0.165245,2.74905,-0.02748, -0.1674,2.74905,0, + -0.032816,2.7,-0.197424, -0.02748,2.74905,-0.165245, 0,2.74905,-0.1674, + 0,2.74905,-0.1674, 0,2.7,-0.2, -0.032816,2.7,-0.197424, + -0.063808,2.7,-0.189952, -0.053428,2.74905,-0.158995, -0.02748,2.74905,-0.165245, + -0.02748,2.74905,-0.165245, -0.032816,2.7,-0.197424, -0.063808,2.7,-0.189952, + -0.092592,2.7,-0.177968, -0.077523,2.74905,-0.148969, -0.053428,2.74905,-0.158995, + -0.053428,2.74905,-0.158995, -0.063808,2.7,-0.189952, -0.092592,2.7,-0.177968, + -0.118784,2.7,-0.161856, -0.099446,2.74905,-0.135489, -0.077523,2.74905,-0.148969, + -0.077523,2.74905,-0.148969, -0.092592,2.7,-0.177968, -0.118784,2.7,-0.161856, + -0.142,2.7,-0.142, -0.118874,2.74905,-0.118874, -0.099446,2.74905,-0.135489, + -0.099446,2.74905,-0.135489, -0.118784,2.7,-0.161856, -0.142,2.7,-0.142, + -0.161856,2.7,-0.118784, -0.135489,2.74905,-0.099446, -0.118874,2.74905,-0.118874, + -0.118874,2.74905,-0.118874, -0.142,2.7,-0.142, -0.161856,2.7,-0.118784, + -0.177968,2.7,-0.092592, -0.148969,2.74905,-0.077523, -0.135489,2.74905,-0.099446, + -0.135489,2.74905,-0.099446, -0.161856,2.7,-0.118784, -0.177968,2.7,-0.092592, + -0.189952,2.7,-0.063808, -0.158995,2.74905,-0.053428, -0.148969,2.74905,-0.077523, + -0.148969,2.74905,-0.077523, -0.177968,2.7,-0.092592, -0.189952,2.7,-0.063808, + -0.197424,2.7,-0.032816, -0.165245,2.74905,-0.02748, -0.158995,2.74905,-0.053428, + -0.158995,2.74905,-0.053428, -0.189952,2.7,-0.063808, -0.197424,2.7,-0.032816, + -0.2,2.7,0, -0.1674,2.74905,0, -0.165245,2.74905,-0.02748, + -0.165245,2.74905,-0.02748, -0.197424,2.7,-0.032816, -0.2,2.7,0, + 0,3.15,0, -0.1946,3.14145,0, -0.192107,3.14145,0.032048, + 0,3.15,0, -0.192107,3.14145,0.032048, -0.18487,3.14145,0.062272, + 0,3.15,0, -0.18487,3.14145,0.062272, -0.173255,3.14145,0.090306, + 0,3.15,0, -0.173255,3.14145,0.090306, -0.157626,3.14145,0.115787, + 0,3.15,0, -0.157626,3.14145,0.115787, -0.138348,3.14145,0.138348, + 0,3.15,0, -0.138348,3.14145,0.138348, -0.115787,3.14145,0.157626, + 0,3.15,0, -0.115787,3.14145,0.157626, -0.090306,3.14145,0.173255, + 0,3.15,0, -0.090306,3.14145,0.173255, -0.062272,3.14145,0.18487, + 0,3.15,0, -0.062272,3.14145,0.18487, -0.032048,3.14145,0.192107, + 0,3.15,0, -0.032048,3.14145,0.192107, 0,3.14145,0.1946, + -0.304843,3.1176,0.050855, -0.192107,3.14145,0.032048, -0.1946,3.14145,0, + -0.1946,3.14145,0, -0.3088,3.1176,0, -0.304843,3.1176,0.050855, + -0.29336,3.1176,0.098814, -0.18487,3.14145,0.062272, -0.192107,3.14145,0.032048, + -0.192107,3.14145,0.032048, -0.304843,3.1176,0.050855, -0.29336,3.1176,0.098814, + -0.274928,3.1176,0.143301, -0.173255,3.14145,0.090306, -0.18487,3.14145,0.062272, + -0.18487,3.14145,0.062272, -0.29336,3.1176,0.098814, -0.274928,3.1176,0.143301, + -0.250127,3.1176,0.183734, -0.157626,3.14145,0.115787, -0.173255,3.14145,0.090306, + -0.173255,3.14145,0.090306, -0.274928,3.1176,0.143301, -0.250127,3.1176,0.183734, + -0.219536,3.1176,0.219536, -0.138348,3.14145,0.138348, -0.157626,3.14145,0.115787, + -0.157626,3.14145,0.115787, -0.250127,3.1176,0.183734, -0.219536,3.1176,0.219536, + -0.183734,3.1176,0.250127, -0.115787,3.14145,0.157626, -0.138348,3.14145,0.138348, + -0.138348,3.14145,0.138348, -0.219536,3.1176,0.219536, -0.183734,3.1176,0.250127, + -0.143301,3.1176,0.274928, -0.090306,3.14145,0.173255, -0.115787,3.14145,0.157626, + -0.115787,3.14145,0.157626, -0.183734,3.1176,0.250127, -0.143301,3.1176,0.274928, + -0.098814,3.1176,0.29336, -0.062272,3.14145,0.18487, -0.090306,3.14145,0.173255, + -0.090306,3.14145,0.173255, -0.143301,3.1176,0.274928, -0.098814,3.1176,0.29336, + -0.050855,3.1176,0.304843, -0.032048,3.14145,0.192107, -0.062272,3.14145,0.18487, + -0.062272,3.14145,0.18487, -0.098814,3.1176,0.29336, -0.050855,3.1176,0.304843, + 0,3.1176,0.3088, 0,3.14145,0.1946, -0.032048,3.14145,0.192107, + -0.032048,3.14145,0.192107, -0.050855,3.1176,0.304843, 0,3.1176,0.3088, + -0.35361,3.08115,0.058988, -0.304843,3.1176,0.050855, -0.3088,3.1176,0, + -0.3088,3.1176,0, -0.3582,3.08115,0, -0.35361,3.08115,0.058988, + -0.340289,3.08115,0.114619, -0.29336,3.1176,0.098814, -0.304843,3.1176,0.050855, + -0.304843,3.1176,0.050855, -0.35361,3.08115,0.058988, -0.340289,3.08115,0.114619, + -0.318907,3.08115,0.166221, -0.274928,3.1176,0.143301, -0.29336,3.1176,0.098814, + -0.29336,3.1176,0.098814, -0.340289,3.08115,0.114619, -0.318907,3.08115,0.166221, + -0.290138,3.08115,0.213123, -0.250127,3.1176,0.183734, -0.274928,3.1176,0.143301, + -0.274928,3.1176,0.143301, -0.318907,3.08115,0.166221, -0.290138,3.08115,0.213123, + -0.254653,3.08115,0.254653, -0.219536,3.1176,0.219536, -0.250127,3.1176,0.183734, + -0.250127,3.1176,0.183734, -0.290138,3.08115,0.213123, -0.254653,3.08115,0.254653, + -0.213123,3.08115,0.290138, -0.183734,3.1176,0.250127, -0.219536,3.1176,0.219536, + -0.219536,3.1176,0.219536, -0.254653,3.08115,0.254653, -0.213123,3.08115,0.290138, + -0.166221,3.08115,0.318907, -0.143301,3.1176,0.274928, -0.183734,3.1176,0.250127, + -0.183734,3.1176,0.250127, -0.213123,3.08115,0.290138, -0.166221,3.08115,0.318907, + -0.114619,3.08115,0.340289, -0.098814,3.1176,0.29336, -0.143301,3.1176,0.274928, + -0.143301,3.1176,0.274928, -0.166221,3.08115,0.318907, -0.114619,3.08115,0.340289, + -0.058988,3.08115,0.35361, -0.050855,3.1176,0.304843, -0.098814,3.1176,0.29336, + -0.098814,3.1176,0.29336, -0.114619,3.08115,0.340289, -0.058988,3.08115,0.35361, + 0,3.08115,0.3582, 0,3.1176,0.3088, -0.050855,3.1176,0.304843, + -0.050855,3.1176,0.304843, -0.058988,3.08115,0.35361, 0,3.08115,0.3582, + -0.353807,3.0348,0.059016, -0.35361,3.08115,0.058988, -0.3582,3.08115,0, + -0.3582,3.08115,0, -0.3584,3.0348,0, -0.353807,3.0348,0.059016, + -0.340477,3.0348,0.114676, -0.340289,3.08115,0.114619, -0.35361,3.08115,0.058988, + -0.35361,3.08115,0.058988, -0.353807,3.0348,0.059016, -0.340477,3.0348,0.114676, + -0.319082,3.0348,0.166306, -0.318907,3.08115,0.166221, -0.340289,3.08115,0.114619, + -0.340289,3.08115,0.114619, -0.340477,3.0348,0.114676, -0.319082,3.0348,0.166306, + -0.290295,3.0348,0.213234, -0.290138,3.08115,0.213123, -0.318907,3.08115,0.166221, + -0.318907,3.08115,0.166221, -0.319082,3.0348,0.166306, -0.290295,3.0348,0.213234, + -0.254788,3.0348,0.254788, -0.254653,3.08115,0.254653, -0.290138,3.08115,0.213123, + -0.290138,3.08115,0.213123, -0.290295,3.0348,0.213234, -0.254788,3.0348,0.254788, + -0.213234,3.0348,0.290295, -0.213123,3.08115,0.290138, -0.254653,3.08115,0.254653, + -0.254653,3.08115,0.254653, -0.254788,3.0348,0.254788, -0.213234,3.0348,0.290295, + -0.166306,3.0348,0.319082, -0.166221,3.08115,0.318907, -0.213123,3.08115,0.290138, + -0.213123,3.08115,0.290138, -0.213234,3.0348,0.290295, -0.166306,3.0348,0.319082, + -0.114676,3.0348,0.340477, -0.114619,3.08115,0.340289, -0.166221,3.08115,0.318907, + -0.166221,3.08115,0.318907, -0.166306,3.0348,0.319082, -0.114676,3.0348,0.340477, + -0.059016,3.0348,0.353807, -0.058988,3.08115,0.35361, -0.114619,3.08115,0.340289, + -0.114619,3.08115,0.340289, -0.114676,3.0348,0.340477, -0.059016,3.0348,0.353807, + 0,3.0348,0.3584, 0,3.08115,0.3582, -0.058988,3.08115,0.35361, + -0.058988,3.08115,0.35361, -0.059016,3.0348,0.353807, 0,3.0348,0.3584, + -0.320834,2.98125,0.053508, -0.353807,3.0348,0.059016, -0.3584,3.0348,0, + -0.3584,3.0348,0, -0.325,2.98125,0, -0.320834,2.98125,0.053508, + -0.308744,2.98125,0.103976, -0.340477,3.0348,0.114676, -0.353807,3.0348,0.059016, + -0.353807,3.0348,0.059016, -0.320834,2.98125,0.053508, -0.308744,2.98125,0.103976, + -0.28934,2.98125,0.150793, -0.319082,3.0348,0.166306, -0.340477,3.0348,0.114676, + -0.340477,3.0348,0.114676, -0.308744,2.98125,0.103976, -0.28934,2.98125,0.150793, + -0.263232,2.98125,0.193348, -0.290295,3.0348,0.213234, -0.319082,3.0348,0.166306, + -0.319082,3.0348,0.166306, -0.28934,2.98125,0.150793, -0.263232,2.98125,0.193348, + -0.231031,2.98125,0.231031, -0.254788,3.0348,0.254788, -0.290295,3.0348,0.213234, + -0.290295,3.0348,0.213234, -0.263232,2.98125,0.193348, -0.231031,2.98125,0.231031, + -0.193348,2.98125,0.263232, -0.213234,3.0348,0.290295, -0.254788,3.0348,0.254788, + -0.254788,3.0348,0.254788, -0.231031,2.98125,0.231031, -0.193348,2.98125,0.263232, + -0.150793,2.98125,0.28934, -0.166306,3.0348,0.319082, -0.213234,3.0348,0.290295, + -0.213234,3.0348,0.290295, -0.193348,2.98125,0.263232, -0.150793,2.98125,0.28934, + -0.103976,2.98125,0.308744, -0.114676,3.0348,0.340477, -0.166306,3.0348,0.319082, + -0.166306,3.0348,0.319082, -0.150793,2.98125,0.28934, -0.103976,2.98125,0.308744, + -0.053508,2.98125,0.320834, -0.059016,3.0348,0.353807, -0.114676,3.0348,0.340477, + -0.114676,3.0348,0.340477, -0.103976,2.98125,0.308744, -0.053508,2.98125,0.320834, + 0,2.98125,0.325, 0,3.0348,0.3584, -0.059016,3.0348,0.353807, + -0.059016,3.0348,0.353807, -0.053508,2.98125,0.320834, 0,2.98125,0.325, + -0.270092,2.9232,0.045032, -0.320834,2.98125,0.053508, -0.325,2.98125,0, + -0.325,2.98125,0, -0.2736,2.9232,0, -0.270092,2.9232,0.045032, + -0.25991,2.9232,0.087511, -0.308744,2.98125,0.103976, -0.320834,2.98125,0.053508, + -0.320834,2.98125,0.053508, -0.270092,2.9232,0.045032, -0.25991,2.9232,0.087511, + -0.243569,2.9232,0.12692, -0.28934,2.98125,0.150793, -0.308744,2.98125,0.103976, + -0.308744,2.98125,0.103976, -0.25991,2.9232,0.087511, -0.243569,2.9232,0.12692, + -0.221585,2.9232,0.162745, -0.263232,2.98125,0.193348, -0.28934,2.98125,0.150793, + -0.28934,2.98125,0.150793, -0.243569,2.9232,0.12692, -0.221585,2.9232,0.162745, + -0.194472,2.9232,0.194472, -0.231031,2.98125,0.231031, -0.263232,2.98125,0.193348, + -0.263232,2.98125,0.193348, -0.221585,2.9232,0.162745, -0.194472,2.9232,0.194472, + -0.162745,2.9232,0.221585, -0.193348,2.98125,0.263232, -0.231031,2.98125,0.231031, + -0.231031,2.98125,0.231031, -0.194472,2.9232,0.194472, -0.162745,2.9232,0.221585, + -0.12692,2.9232,0.243569, -0.150793,2.98125,0.28934, -0.193348,2.98125,0.263232, + -0.193348,2.98125,0.263232, -0.162745,2.9232,0.221585, -0.12692,2.9232,0.243569, + -0.087511,2.9232,0.25991, -0.103976,2.98125,0.308744, -0.150793,2.98125,0.28934, + -0.150793,2.98125,0.28934, -0.12692,2.9232,0.243569, -0.087511,2.9232,0.25991, + -0.045032,2.9232,0.270092, -0.053508,2.98125,0.320834, -0.103976,2.98125,0.308744, + -0.103976,2.98125,0.308744, -0.087511,2.9232,0.25991, -0.045032,2.9232,0.270092, + 0,2.9232,0.2736, 0,2.98125,0.325, -0.053508,2.98125,0.320834, + -0.053508,2.98125,0.320834, -0.045032,2.9232,0.270092, 0,2.9232,0.2736, + -0.216979,2.86335,0.036157, -0.270092,2.9232,0.045032, -0.2736,2.9232,0, + -0.2736,2.9232,0, -0.2198,2.86335,0, -0.216979,2.86335,0.036157, + -0.208794,2.86335,0.07027, -0.25991,2.9232,0.087511, -0.270092,2.9232,0.045032, + -0.270092,2.9232,0.045032, -0.216979,2.86335,0.036157, -0.208794,2.86335,0.07027, + -0.195658,2.86335,0.101925, -0.243569,2.9232,0.12692, -0.25991,2.9232,0.087511, + -0.25991,2.9232,0.087511, -0.208794,2.86335,0.07027, -0.195658,2.86335,0.101925, + -0.177989,2.86335,0.130707, -0.221585,2.9232,0.162745, -0.243569,2.9232,0.12692, + -0.243569,2.9232,0.12692, -0.195658,2.86335,0.101925, -0.177989,2.86335,0.130707, + -0.1562,2.86335,0.1562, -0.194472,2.9232,0.194472, -0.221585,2.9232,0.162745, + -0.221585,2.9232,0.162745, -0.177989,2.86335,0.130707, -0.1562,2.86335,0.1562, + -0.130707,2.86335,0.177989, -0.162745,2.9232,0.221585, -0.194472,2.9232,0.194472, + -0.194472,2.9232,0.194472, -0.1562,2.86335,0.1562, -0.130707,2.86335,0.177989, + -0.101925,2.86335,0.195658, -0.12692,2.9232,0.243569, -0.162745,2.9232,0.221585, + -0.162745,2.9232,0.221585, -0.130707,2.86335,0.177989, -0.101925,2.86335,0.195658, + -0.07027,2.86335,0.208794, -0.087511,2.9232,0.25991, -0.12692,2.9232,0.243569, + -0.12692,2.9232,0.243569, -0.101925,2.86335,0.195658, -0.07027,2.86335,0.208794, + -0.036157,2.86335,0.216979, -0.045032,2.9232,0.270092, -0.087511,2.9232,0.25991, + -0.087511,2.9232,0.25991, -0.07027,2.86335,0.208794, -0.036157,2.86335,0.216979, + 0,2.86335,0.2198, 0,2.9232,0.2736, -0.045032,2.9232,0.270092, + -0.045032,2.9232,0.270092, -0.036157,2.86335,0.216979, 0,2.86335,0.2198, + -0.176897,2.8044,0.02945, -0.216979,2.86335,0.036157, -0.2198,2.86335,0, + -0.2198,2.86335,0, -0.1792,2.8044,0, -0.176897,2.8044,0.02945, + -0.170215,2.8044,0.057246, -0.208794,2.86335,0.07027, -0.216979,2.86335,0.036157, + -0.216979,2.86335,0.036157, -0.176897,2.8044,0.02945, -0.170215,2.8044,0.057246, + -0.159496,2.8044,0.083047, -0.195658,2.86335,0.101925, -0.208794,2.86335,0.07027, + -0.208794,2.86335,0.07027, -0.170215,2.8044,0.057246, -0.159496,2.8044,0.083047, + -0.145078,2.8044,0.106513, -0.177989,2.86335,0.130707, -0.195658,2.86335,0.101925, + -0.195658,2.86335,0.101925, -0.159496,2.8044,0.083047, -0.145078,2.8044,0.106513, + -0.127304,2.8044,0.127304, -0.1562,2.86335,0.1562, -0.177989,2.86335,0.130707, + -0.177989,2.86335,0.130707, -0.145078,2.8044,0.106513, -0.127304,2.8044,0.127304, + -0.106513,2.8044,0.145078, -0.130707,2.86335,0.177989, -0.1562,2.86335,0.1562, + -0.1562,2.86335,0.1562, -0.127304,2.8044,0.127304, -0.106513,2.8044,0.145078, + -0.083047,2.8044,0.159496, -0.101925,2.86335,0.195658, -0.130707,2.86335,0.177989, + -0.130707,2.86335,0.177989, -0.106513,2.8044,0.145078, -0.083047,2.8044,0.159496, + -0.057246,2.8044,0.170215, -0.07027,2.86335,0.208794, -0.101925,2.86335,0.195658, + -0.101925,2.86335,0.195658, -0.083047,2.8044,0.159496, -0.057246,2.8044,0.170215, + -0.02945,2.8044,0.176897, -0.036157,2.86335,0.216979, -0.07027,2.86335,0.208794, + -0.07027,2.86335,0.208794, -0.057246,2.8044,0.170215, -0.02945,2.8044,0.176897, + 0,2.8044,0.1792, 0,2.86335,0.2198, -0.036157,2.86335,0.216979, + -0.036157,2.86335,0.216979, -0.02945,2.8044,0.176897, 0,2.8044,0.1792, + -0.165245,2.74905,0.02748, -0.176897,2.8044,0.02945, -0.1792,2.8044,0, + -0.1792,2.8044,0, -0.1674,2.74905,0, -0.165245,2.74905,0.02748, + -0.158995,2.74905,0.053428, -0.170215,2.8044,0.057246, -0.176897,2.8044,0.02945, + -0.176897,2.8044,0.02945, -0.165245,2.74905,0.02748, -0.158995,2.74905,0.053428, + -0.148969,2.74905,0.077523, -0.159496,2.8044,0.083047, -0.170215,2.8044,0.057246, + -0.170215,2.8044,0.057246, -0.158995,2.74905,0.053428, -0.148969,2.74905,0.077523, + -0.135489,2.74905,0.099446, -0.145078,2.8044,0.106513, -0.159496,2.8044,0.083047, + -0.159496,2.8044,0.083047, -0.148969,2.74905,0.077523, -0.135489,2.74905,0.099446, + -0.118874,2.74905,0.118874, -0.127304,2.8044,0.127304, -0.145078,2.8044,0.106513, + -0.145078,2.8044,0.106513, -0.135489,2.74905,0.099446, -0.118874,2.74905,0.118874, + -0.099446,2.74905,0.135489, -0.106513,2.8044,0.145078, -0.127304,2.8044,0.127304, + -0.127304,2.8044,0.127304, -0.118874,2.74905,0.118874, -0.099446,2.74905,0.135489, + -0.077523,2.74905,0.148969, -0.083047,2.8044,0.159496, -0.106513,2.8044,0.145078, + -0.106513,2.8044,0.145078, -0.099446,2.74905,0.135489, -0.077523,2.74905,0.148969, + -0.053428,2.74905,0.158995, -0.057246,2.8044,0.170215, -0.083047,2.8044,0.159496, + -0.083047,2.8044,0.159496, -0.077523,2.74905,0.148969, -0.053428,2.74905,0.158995, + -0.02748,2.74905,0.165245, -0.02945,2.8044,0.176897, -0.057246,2.8044,0.170215, + -0.057246,2.8044,0.170215, -0.053428,2.74905,0.158995, -0.02748,2.74905,0.165245, + 0,2.74905,0.1674, 0,2.8044,0.1792, -0.02945,2.8044,0.176897, + -0.02945,2.8044,0.176897, -0.02748,2.74905,0.165245, 0,2.74905,0.1674, + -0.197424,2.7,0.032816, -0.165245,2.74905,0.02748, -0.1674,2.74905,0, + -0.1674,2.74905,0, -0.2,2.7,0, -0.197424,2.7,0.032816, + -0.189952,2.7,0.063808, -0.158995,2.74905,0.053428, -0.165245,2.74905,0.02748, + -0.165245,2.74905,0.02748, -0.197424,2.7,0.032816, -0.189952,2.7,0.063808, + -0.177968,2.7,0.092592, -0.148969,2.74905,0.077523, -0.158995,2.74905,0.053428, + -0.158995,2.74905,0.053428, -0.189952,2.7,0.063808, -0.177968,2.7,0.092592, + -0.161856,2.7,0.118784, -0.135489,2.74905,0.099446, -0.148969,2.74905,0.077523, + -0.148969,2.74905,0.077523, -0.177968,2.7,0.092592, -0.161856,2.7,0.118784, + -0.142,2.7,0.142, -0.118874,2.74905,0.118874, -0.135489,2.74905,0.099446, + -0.135489,2.74905,0.099446, -0.161856,2.7,0.118784, -0.142,2.7,0.142, + -0.118784,2.7,0.161856, -0.099446,2.74905,0.135489, -0.118874,2.74905,0.118874, + -0.118874,2.74905,0.118874, -0.142,2.7,0.142, -0.118784,2.7,0.161856, + -0.092592,2.7,0.177968, -0.077523,2.74905,0.148969, -0.099446,2.74905,0.135489, + -0.099446,2.74905,0.135489, -0.118784,2.7,0.161856, -0.092592,2.7,0.177968, + -0.063808,2.7,0.189952, -0.053428,2.74905,0.158995, -0.077523,2.74905,0.148969, + -0.077523,2.74905,0.148969, -0.092592,2.7,0.177968, -0.063808,2.7,0.189952, + -0.032816,2.7,0.197424, -0.02748,2.74905,0.165245, -0.053428,2.74905,0.158995, + -0.053428,2.74905,0.158995, -0.063808,2.7,0.189952, -0.032816,2.7,0.197424, + 0,2.7,0.2, 0,2.74905,0.1674, -0.02748,2.74905,0.165245, + -0.02748,2.74905,0.165245, -0.032816,2.7,0.197424, 0,2.7,0.2, + 0,3.15,0, 0,3.14145,0.1946, 0.032048,3.14145,0.192107, + 0,3.15,0, 0.032048,3.14145,0.192107, 0.062272,3.14145,0.18487, + 0,3.15,0, 0.062272,3.14145,0.18487, 0.090306,3.14145,0.173255, + 0,3.15,0, 0.090306,3.14145,0.173255, 0.115787,3.14145,0.157626, + 0,3.15,0, 0.115787,3.14145,0.157626, 0.138348,3.14145,0.138348, + 0,3.15,0, 0.138348,3.14145,0.138348, 0.157626,3.14145,0.115787, + 0,3.15,0, 0.157626,3.14145,0.115787, 0.173255,3.14145,0.090306, + 0,3.15,0, 0.173255,3.14145,0.090306, 0.18487,3.14145,0.062272, + 0,3.15,0, 0.18487,3.14145,0.062272, 0.192107,3.14145,0.032048, + 0,3.15,0, 0.192107,3.14145,0.032048, 0.1946,3.14145,0, + 0.050855,3.1176,0.304843, 0.032048,3.14145,0.192107, 0,3.14145,0.1946, + 0,3.14145,0.1946, 0,3.1176,0.3088, 0.050855,3.1176,0.304843, + 0.098814,3.1176,0.29336, 0.062272,3.14145,0.18487, 0.032048,3.14145,0.192107, + 0.032048,3.14145,0.192107, 0.050855,3.1176,0.304843, 0.098814,3.1176,0.29336, + 0.143301,3.1176,0.274928, 0.090306,3.14145,0.173255, 0.062272,3.14145,0.18487, + 0.062272,3.14145,0.18487, 0.098814,3.1176,0.29336, 0.143301,3.1176,0.274928, + 0.183734,3.1176,0.250127, 0.115787,3.14145,0.157626, 0.090306,3.14145,0.173255, + 0.090306,3.14145,0.173255, 0.143301,3.1176,0.274928, 0.183734,3.1176,0.250127, + 0.219536,3.1176,0.219536, 0.138348,3.14145,0.138348, 0.115787,3.14145,0.157626, + 0.115787,3.14145,0.157626, 0.183734,3.1176,0.250127, 0.219536,3.1176,0.219536, + 0.250127,3.1176,0.183734, 0.157626,3.14145,0.115787, 0.138348,3.14145,0.138348, + 0.138348,3.14145,0.138348, 0.219536,3.1176,0.219536, 0.250127,3.1176,0.183734, + 0.274928,3.1176,0.143301, 0.173255,3.14145,0.090306, 0.157626,3.14145,0.115787, + 0.157626,3.14145,0.115787, 0.250127,3.1176,0.183734, 0.274928,3.1176,0.143301, + 0.29336,3.1176,0.098814, 0.18487,3.14145,0.062272, 0.173255,3.14145,0.090306, + 0.173255,3.14145,0.090306, 0.274928,3.1176,0.143301, 0.29336,3.1176,0.098814, + 0.304843,3.1176,0.050855, 0.192107,3.14145,0.032048, 0.18487,3.14145,0.062272, + 0.18487,3.14145,0.062272, 0.29336,3.1176,0.098814, 0.304843,3.1176,0.050855, + 0.3088,3.1176,0, 0.1946,3.14145,0, 0.192107,3.14145,0.032048, + 0.192107,3.14145,0.032048, 0.304843,3.1176,0.050855, 0.3088,3.1176,0, + 0.058988,3.08115,0.35361, 0.050855,3.1176,0.304843, 0,3.1176,0.3088, + 0,3.1176,0.3088, 0,3.08115,0.3582, 0.058988,3.08115,0.35361, + 0.114619,3.08115,0.340289, 0.098814,3.1176,0.29336, 0.050855,3.1176,0.304843, + 0.050855,3.1176,0.304843, 0.058988,3.08115,0.35361, 0.114619,3.08115,0.340289, + 0.166221,3.08115,0.318907, 0.143301,3.1176,0.274928, 0.098814,3.1176,0.29336, + 0.098814,3.1176,0.29336, 0.114619,3.08115,0.340289, 0.166221,3.08115,0.318907, + 0.213123,3.08115,0.290138, 0.183734,3.1176,0.250127, 0.143301,3.1176,0.274928, + 0.143301,3.1176,0.274928, 0.166221,3.08115,0.318907, 0.213123,3.08115,0.290138, + 0.254653,3.08115,0.254653, 0.219536,3.1176,0.219536, 0.183734,3.1176,0.250127, + 0.183734,3.1176,0.250127, 0.213123,3.08115,0.290138, 0.254653,3.08115,0.254653, + 0.290138,3.08115,0.213123, 0.250127,3.1176,0.183734, 0.219536,3.1176,0.219536, + 0.219536,3.1176,0.219536, 0.254653,3.08115,0.254653, 0.290138,3.08115,0.213123, + 0.318907,3.08115,0.166221, 0.274928,3.1176,0.143301, 0.250127,3.1176,0.183734, + 0.250127,3.1176,0.183734, 0.290138,3.08115,0.213123, 0.318907,3.08115,0.166221, + 0.340289,3.08115,0.114619, 0.29336,3.1176,0.098814, 0.274928,3.1176,0.143301, + 0.274928,3.1176,0.143301, 0.318907,3.08115,0.166221, 0.340289,3.08115,0.114619, + 0.35361,3.08115,0.058988, 0.304843,3.1176,0.050855, 0.29336,3.1176,0.098814, + 0.29336,3.1176,0.098814, 0.340289,3.08115,0.114619, 0.35361,3.08115,0.058988, + 0.3582,3.08115,0, 0.3088,3.1176,0, 0.304843,3.1176,0.050855, + 0.304843,3.1176,0.050855, 0.35361,3.08115,0.058988, 0.3582,3.08115,0, + 0.059016,3.0348,0.353807, 0.058988,3.08115,0.35361, 0,3.08115,0.3582, + 0,3.08115,0.3582, 0,3.0348,0.3584, 0.059016,3.0348,0.353807, + 0.114676,3.0348,0.340477, 0.114619,3.08115,0.340289, 0.058988,3.08115,0.35361, + 0.058988,3.08115,0.35361, 0.059016,3.0348,0.353807, 0.114676,3.0348,0.340477, + 0.166306,3.0348,0.319082, 0.166221,3.08115,0.318907, 0.114619,3.08115,0.340289, + 0.114619,3.08115,0.340289, 0.114676,3.0348,0.340477, 0.166306,3.0348,0.319082, + 0.213234,3.0348,0.290295, 0.213123,3.08115,0.290138, 0.166221,3.08115,0.318907, + 0.166221,3.08115,0.318907, 0.166306,3.0348,0.319082, 0.213234,3.0348,0.290295, + 0.254788,3.0348,0.254788, 0.254653,3.08115,0.254653, 0.213123,3.08115,0.290138, + 0.213123,3.08115,0.290138, 0.213234,3.0348,0.290295, 0.254788,3.0348,0.254788, + 0.290295,3.0348,0.213234, 0.290138,3.08115,0.213123, 0.254653,3.08115,0.254653, + 0.254653,3.08115,0.254653, 0.254788,3.0348,0.254788, 0.290295,3.0348,0.213234, + 0.319082,3.0348,0.166306, 0.318907,3.08115,0.166221, 0.290138,3.08115,0.213123, + 0.290138,3.08115,0.213123, 0.290295,3.0348,0.213234, 0.319082,3.0348,0.166306, + 0.340477,3.0348,0.114676, 0.340289,3.08115,0.114619, 0.318907,3.08115,0.166221, + 0.318907,3.08115,0.166221, 0.319082,3.0348,0.166306, 0.340477,3.0348,0.114676, + 0.353807,3.0348,0.059016, 0.35361,3.08115,0.058988, 0.340289,3.08115,0.114619, + 0.340289,3.08115,0.114619, 0.340477,3.0348,0.114676, 0.353807,3.0348,0.059016, + 0.3584,3.0348,0, 0.3582,3.08115,0, 0.35361,3.08115,0.058988, + 0.35361,3.08115,0.058988, 0.353807,3.0348,0.059016, 0.3584,3.0348,0, + 0.053508,2.98125,0.320834, 0.059016,3.0348,0.353807, 0,3.0348,0.3584, + 0,3.0348,0.3584, 0,2.98125,0.325, 0.053508,2.98125,0.320834, + 0.103976,2.98125,0.308744, 0.114676,3.0348,0.340477, 0.059016,3.0348,0.353807, + 0.059016,3.0348,0.353807, 0.053508,2.98125,0.320834, 0.103976,2.98125,0.308744, + 0.150793,2.98125,0.28934, 0.166306,3.0348,0.319082, 0.114676,3.0348,0.340477, + 0.114676,3.0348,0.340477, 0.103976,2.98125,0.308744, 0.150793,2.98125,0.28934, + 0.193348,2.98125,0.263232, 0.213234,3.0348,0.290295, 0.166306,3.0348,0.319082, + 0.166306,3.0348,0.319082, 0.150793,2.98125,0.28934, 0.193348,2.98125,0.263232, + 0.231031,2.98125,0.231031, 0.254788,3.0348,0.254788, 0.213234,3.0348,0.290295, + 0.213234,3.0348,0.290295, 0.193348,2.98125,0.263232, 0.231031,2.98125,0.231031, + 0.263232,2.98125,0.193348, 0.290295,3.0348,0.213234, 0.254788,3.0348,0.254788, + 0.254788,3.0348,0.254788, 0.231031,2.98125,0.231031, 0.263232,2.98125,0.193348, + 0.28934,2.98125,0.150793, 0.319082,3.0348,0.166306, 0.290295,3.0348,0.213234, + 0.290295,3.0348,0.213234, 0.263232,2.98125,0.193348, 0.28934,2.98125,0.150793, + 0.308744,2.98125,0.103976, 0.340477,3.0348,0.114676, 0.319082,3.0348,0.166306, + 0.319082,3.0348,0.166306, 0.28934,2.98125,0.150793, 0.308744,2.98125,0.103976, + 0.320834,2.98125,0.053508, 0.353807,3.0348,0.059016, 0.340477,3.0348,0.114676, + 0.340477,3.0348,0.114676, 0.308744,2.98125,0.103976, 0.320834,2.98125,0.053508, + 0.325,2.98125,0, 0.3584,3.0348,0, 0.353807,3.0348,0.059016, + 0.353807,3.0348,0.059016, 0.320834,2.98125,0.053508, 0.325,2.98125,0, + 0.045032,2.9232,0.270092, 0.053508,2.98125,0.320834, 0,2.98125,0.325, + 0,2.98125,0.325, 0,2.9232,0.2736, 0.045032,2.9232,0.270092, + 0.087511,2.9232,0.25991, 0.103976,2.98125,0.308744, 0.053508,2.98125,0.320834, + 0.053508,2.98125,0.320834, 0.045032,2.9232,0.270092, 0.087511,2.9232,0.25991, + 0.12692,2.9232,0.243569, 0.150793,2.98125,0.28934, 0.103976,2.98125,0.308744, + 0.103976,2.98125,0.308744, 0.087511,2.9232,0.25991, 0.12692,2.9232,0.243569, + 0.162745,2.9232,0.221585, 0.193348,2.98125,0.263232, 0.150793,2.98125,0.28934, + 0.150793,2.98125,0.28934, 0.12692,2.9232,0.243569, 0.162745,2.9232,0.221585, + 0.194472,2.9232,0.194472, 0.231031,2.98125,0.231031, 0.193348,2.98125,0.263232, + 0.193348,2.98125,0.263232, 0.162745,2.9232,0.221585, 0.194472,2.9232,0.194472, + 0.221585,2.9232,0.162745, 0.263232,2.98125,0.193348, 0.231031,2.98125,0.231031, + 0.231031,2.98125,0.231031, 0.194472,2.9232,0.194472, 0.221585,2.9232,0.162745, + 0.243569,2.9232,0.12692, 0.28934,2.98125,0.150793, 0.263232,2.98125,0.193348, + 0.263232,2.98125,0.193348, 0.221585,2.9232,0.162745, 0.243569,2.9232,0.12692, + 0.25991,2.9232,0.087511, 0.308744,2.98125,0.103976, 0.28934,2.98125,0.150793, + 0.28934,2.98125,0.150793, 0.243569,2.9232,0.12692, 0.25991,2.9232,0.087511, + 0.270092,2.9232,0.045032, 0.320834,2.98125,0.053508, 0.308744,2.98125,0.103976, + 0.308744,2.98125,0.103976, 0.25991,2.9232,0.087511, 0.270092,2.9232,0.045032, + 0.2736,2.9232,0, 0.325,2.98125,0, 0.320834,2.98125,0.053508, + 0.320834,2.98125,0.053508, 0.270092,2.9232,0.045032, 0.2736,2.9232,0, + 0.036157,2.86335,0.216979, 0.045032,2.9232,0.270092, 0,2.9232,0.2736, + 0,2.9232,0.2736, 0,2.86335,0.2198, 0.036157,2.86335,0.216979, + 0.07027,2.86335,0.208794, 0.087511,2.9232,0.25991, 0.045032,2.9232,0.270092, + 0.045032,2.9232,0.270092, 0.036157,2.86335,0.216979, 0.07027,2.86335,0.208794, + 0.101925,2.86335,0.195658, 0.12692,2.9232,0.243569, 0.087511,2.9232,0.25991, + 0.087511,2.9232,0.25991, 0.07027,2.86335,0.208794, 0.101925,2.86335,0.195658, + 0.130707,2.86335,0.177989, 0.162745,2.9232,0.221585, 0.12692,2.9232,0.243569, + 0.12692,2.9232,0.243569, 0.101925,2.86335,0.195658, 0.130707,2.86335,0.177989, + 0.1562,2.86335,0.1562, 0.194472,2.9232,0.194472, 0.162745,2.9232,0.221585, + 0.162745,2.9232,0.221585, 0.130707,2.86335,0.177989, 0.1562,2.86335,0.1562, + 0.177989,2.86335,0.130707, 0.221585,2.9232,0.162745, 0.194472,2.9232,0.194472, + 0.194472,2.9232,0.194472, 0.1562,2.86335,0.1562, 0.177989,2.86335,0.130707, + 0.195658,2.86335,0.101925, 0.243569,2.9232,0.12692, 0.221585,2.9232,0.162745, + 0.221585,2.9232,0.162745, 0.177989,2.86335,0.130707, 0.195658,2.86335,0.101925, + 0.208794,2.86335,0.07027, 0.25991,2.9232,0.087511, 0.243569,2.9232,0.12692, + 0.243569,2.9232,0.12692, 0.195658,2.86335,0.101925, 0.208794,2.86335,0.07027, + 0.216979,2.86335,0.036157, 0.270092,2.9232,0.045032, 0.25991,2.9232,0.087511, + 0.25991,2.9232,0.087511, 0.208794,2.86335,0.07027, 0.216979,2.86335,0.036157, + 0.2198,2.86335,0, 0.2736,2.9232,0, 0.270092,2.9232,0.045032, + 0.270092,2.9232,0.045032, 0.216979,2.86335,0.036157, 0.2198,2.86335,0, + 0.02945,2.8044,0.176897, 0.036157,2.86335,0.216979, 0,2.86335,0.2198, + 0,2.86335,0.2198, 0,2.8044,0.1792, 0.02945,2.8044,0.176897, + 0.057246,2.8044,0.170215, 0.07027,2.86335,0.208794, 0.036157,2.86335,0.216979, + 0.036157,2.86335,0.216979, 0.02945,2.8044,0.176897, 0.057246,2.8044,0.170215, + 0.083047,2.8044,0.159496, 0.101925,2.86335,0.195658, 0.07027,2.86335,0.208794, + 0.07027,2.86335,0.208794, 0.057246,2.8044,0.170215, 0.083047,2.8044,0.159496, + 0.106513,2.8044,0.145078, 0.130707,2.86335,0.177989, 0.101925,2.86335,0.195658, + 0.101925,2.86335,0.195658, 0.083047,2.8044,0.159496, 0.106513,2.8044,0.145078, + 0.127304,2.8044,0.127304, 0.1562,2.86335,0.1562, 0.130707,2.86335,0.177989, + 0.130707,2.86335,0.177989, 0.106513,2.8044,0.145078, 0.127304,2.8044,0.127304, + 0.145078,2.8044,0.106513, 0.177989,2.86335,0.130707, 0.1562,2.86335,0.1562, + 0.1562,2.86335,0.1562, 0.127304,2.8044,0.127304, 0.145078,2.8044,0.106513, + 0.159496,2.8044,0.083047, 0.195658,2.86335,0.101925, 0.177989,2.86335,0.130707, + 0.177989,2.86335,0.130707, 0.145078,2.8044,0.106513, 0.159496,2.8044,0.083047, + 0.170215,2.8044,0.057246, 0.208794,2.86335,0.07027, 0.195658,2.86335,0.101925, + 0.195658,2.86335,0.101925, 0.159496,2.8044,0.083047, 0.170215,2.8044,0.057246, + 0.176897,2.8044,0.02945, 0.216979,2.86335,0.036157, 0.208794,2.86335,0.07027, + 0.208794,2.86335,0.07027, 0.170215,2.8044,0.057246, 0.176897,2.8044,0.02945, + 0.1792,2.8044,0, 0.2198,2.86335,0, 0.216979,2.86335,0.036157, + 0.216979,2.86335,0.036157, 0.176897,2.8044,0.02945, 0.1792,2.8044,0, + 0.02748,2.74905,0.165245, 0.02945,2.8044,0.176897, 0,2.8044,0.1792, + 0,2.8044,0.1792, 0,2.74905,0.1674, 0.02748,2.74905,0.165245, + 0.053428,2.74905,0.158995, 0.057246,2.8044,0.170215, 0.02945,2.8044,0.176897, + 0.02945,2.8044,0.176897, 0.02748,2.74905,0.165245, 0.053428,2.74905,0.158995, + 0.077523,2.74905,0.148969, 0.083047,2.8044,0.159496, 0.057246,2.8044,0.170215, + 0.057246,2.8044,0.170215, 0.053428,2.74905,0.158995, 0.077523,2.74905,0.148969, + 0.099446,2.74905,0.135489, 0.106513,2.8044,0.145078, 0.083047,2.8044,0.159496, + 0.083047,2.8044,0.159496, 0.077523,2.74905,0.148969, 0.099446,2.74905,0.135489, + 0.118874,2.74905,0.118874, 0.127304,2.8044,0.127304, 0.106513,2.8044,0.145078, + 0.106513,2.8044,0.145078, 0.099446,2.74905,0.135489, 0.118874,2.74905,0.118874, + 0.135489,2.74905,0.099446, 0.145078,2.8044,0.106513, 0.127304,2.8044,0.127304, + 0.127304,2.8044,0.127304, 0.118874,2.74905,0.118874, 0.135489,2.74905,0.099446, + 0.148969,2.74905,0.077523, 0.159496,2.8044,0.083047, 0.145078,2.8044,0.106513, + 0.145078,2.8044,0.106513, 0.135489,2.74905,0.099446, 0.148969,2.74905,0.077523, + 0.158995,2.74905,0.053428, 0.170215,2.8044,0.057246, 0.159496,2.8044,0.083047, + 0.159496,2.8044,0.083047, 0.148969,2.74905,0.077523, 0.158995,2.74905,0.053428, + 0.165245,2.74905,0.02748, 0.176897,2.8044,0.02945, 0.170215,2.8044,0.057246, + 0.170215,2.8044,0.057246, 0.158995,2.74905,0.053428, 0.165245,2.74905,0.02748, + 0.1674,2.74905,0, 0.1792,2.8044,0, 0.176897,2.8044,0.02945, + 0.176897,2.8044,0.02945, 0.165245,2.74905,0.02748, 0.1674,2.74905,0, + 0.032816,2.7,0.197424, 0.02748,2.74905,0.165245, 0,2.74905,0.1674, + 0,2.74905,0.1674, 0,2.7,0.2, 0.032816,2.7,0.197424, + 0.063808,2.7,0.189952, 0.053428,2.74905,0.158995, 0.02748,2.74905,0.165245, + 0.02748,2.74905,0.165245, 0.032816,2.7,0.197424, 0.063808,2.7,0.189952, + 0.092592,2.7,0.177968, 0.077523,2.74905,0.148969, 0.053428,2.74905,0.158995, + 0.053428,2.74905,0.158995, 0.063808,2.7,0.189952, 0.092592,2.7,0.177968, + 0.118784,2.7,0.161856, 0.099446,2.74905,0.135489, 0.077523,2.74905,0.148969, + 0.077523,2.74905,0.148969, 0.092592,2.7,0.177968, 0.118784,2.7,0.161856, + 0.142,2.7,0.142, 0.118874,2.74905,0.118874, 0.099446,2.74905,0.135489, + 0.099446,2.74905,0.135489, 0.118784,2.7,0.161856, 0.142,2.7,0.142, + 0.161856,2.7,0.118784, 0.135489,2.74905,0.099446, 0.118874,2.74905,0.118874, + 0.118874,2.74905,0.118874, 0.142,2.7,0.142, 0.161856,2.7,0.118784, + 0.177968,2.7,0.092592, 0.148969,2.74905,0.077523, 0.135489,2.74905,0.099446, + 0.135489,2.74905,0.099446, 0.161856,2.7,0.118784, 0.177968,2.7,0.092592, + 0.189952,2.7,0.063808, 0.158995,2.74905,0.053428, 0.148969,2.74905,0.077523, + 0.148969,2.74905,0.077523, 0.177968,2.7,0.092592, 0.189952,2.7,0.063808, + 0.197424,2.7,0.032816, 0.165245,2.74905,0.02748, 0.158995,2.74905,0.053428, + 0.158995,2.74905,0.053428, 0.189952,2.7,0.063808, 0.197424,2.7,0.032816, + 0.2,2.7,0, 0.1674,2.74905,0, 0.165245,2.74905,0.02748, + 0.165245,2.74905,0.02748, 0.197424,2.7,0.032816, 0.2,2.7,0, + 0.275801,2.6592,-0.045844, 0.197424,2.7,-0.032816, 0.2,2.7,0, + 0.2,2.7,0, 0.2794,2.6592,0, 0.275801,2.6592,-0.045844, + 0.265363,2.6592,-0.08914, 0.189952,2.7,-0.063808, 0.197424,2.7,-0.032816, + 0.197424,2.7,-0.032816, 0.275801,2.6592,-0.045844, 0.265363,2.6592,-0.08914, + 0.248621,2.6592,-0.129351, 0.177968,2.7,-0.092592, 0.189952,2.7,-0.063808, + 0.189952,2.7,-0.063808, 0.265363,2.6592,-0.08914, 0.248621,2.6592,-0.129351, + 0.226113,2.6592,-0.165941, 0.161856,2.7,-0.118784, 0.177968,2.7,-0.092592, + 0.177968,2.7,-0.092592, 0.248621,2.6592,-0.129351, 0.226113,2.6592,-0.165941, + 0.198374,2.6592,-0.198374, 0.142,2.7,-0.142, 0.161856,2.7,-0.118784, + 0.161856,2.7,-0.118784, 0.226113,2.6592,-0.165941, 0.198374,2.6592,-0.198374, + 0.165941,2.6592,-0.226113, 0.118784,2.7,-0.161856, 0.142,2.7,-0.142, + 0.142,2.7,-0.142, 0.198374,2.6592,-0.198374, 0.165941,2.6592,-0.226113, + 0.129351,2.6592,-0.248621, 0.092592,2.7,-0.177968, 0.118784,2.7,-0.161856, + 0.118784,2.7,-0.161856, 0.165941,2.6592,-0.226113, 0.129351,2.6592,-0.248621, + 0.08914,2.6592,-0.265363, 0.063808,2.7,-0.189952, 0.092592,2.7,-0.177968, + 0.092592,2.7,-0.177968, 0.129351,2.6592,-0.248621, 0.08914,2.6592,-0.265363, + 0.045844,2.6592,-0.275801, 0.032816,2.7,-0.197424, 0.063808,2.7,-0.189952, + 0.063808,2.7,-0.189952, 0.08914,2.6592,-0.265363, 0.045844,2.6592,-0.275801, + 0,2.6592,-0.2794, 0,2.7,-0.2, 0.032816,2.7,-0.197424, + 0.032816,2.7,-0.197424, 0.045844,2.6592,-0.275801, 0,2.6592,-0.2794, + 0.386161,2.6256,-0.064188, 0.275801,2.6592,-0.045844, 0.2794,2.6592,0, + 0.2794,2.6592,0, 0.3912,2.6256,0, 0.386161,2.6256,-0.064188, + 0.371546,2.6256,-0.124808, 0.265363,2.6592,-0.08914, 0.275801,2.6592,-0.045844, + 0.275801,2.6592,-0.045844, 0.386161,2.6256,-0.064188, 0.371546,2.6256,-0.124808, + 0.348105,2.6256,-0.18111, 0.248621,2.6592,-0.129351, 0.265363,2.6592,-0.08914, + 0.265363,2.6592,-0.08914, 0.371546,2.6256,-0.124808, 0.348105,2.6256,-0.18111, + 0.31659,2.6256,-0.232342, 0.226113,2.6592,-0.165941, 0.248621,2.6592,-0.129351, + 0.248621,2.6592,-0.129351, 0.348105,2.6256,-0.18111, 0.31659,2.6256,-0.232342, + 0.277752,2.6256,-0.277752, 0.198374,2.6592,-0.198374, 0.226113,2.6592,-0.165941, + 0.226113,2.6592,-0.165941, 0.31659,2.6256,-0.232342, 0.277752,2.6256,-0.277752, + 0.232342,2.6256,-0.31659, 0.165941,2.6592,-0.226113, 0.198374,2.6592,-0.198374, + 0.198374,2.6592,-0.198374, 0.277752,2.6256,-0.277752, 0.232342,2.6256,-0.31659, + 0.18111,2.6256,-0.348105, 0.129351,2.6592,-0.248621, 0.165941,2.6592,-0.226113, + 0.165941,2.6592,-0.226113, 0.232342,2.6256,-0.31659, 0.18111,2.6256,-0.348105, + 0.124808,2.6256,-0.371546, 0.08914,2.6592,-0.265363, 0.129351,2.6592,-0.248621, + 0.129351,2.6592,-0.248621, 0.18111,2.6256,-0.348105, 0.124808,2.6256,-0.371546, + 0.064188,2.6256,-0.386161, 0.045844,2.6592,-0.275801, 0.08914,2.6592,-0.265363, + 0.08914,2.6592,-0.265363, 0.124808,2.6256,-0.371546, 0.064188,2.6256,-0.386161, + 0,2.6256,-0.3912, 0,2.6592,-0.2794, 0.045844,2.6592,-0.275801, + 0.045844,2.6592,-0.275801, 0.064188,2.6256,-0.386161, 0,2.6256,-0.3912, + 0.519028,2.5974,-0.086273, 0.386161,2.6256,-0.064188, 0.3912,2.6256,0, + 0.3912,2.6256,0, 0.5258,2.5974,0, 0.519028,2.5974,-0.086273, + 0.499384,2.5974,-0.167751, 0.371546,2.6256,-0.124808, 0.386161,2.6256,-0.064188, + 0.386161,2.6256,-0.064188, 0.519028,2.5974,-0.086273, 0.499384,2.5974,-0.167751, + 0.467878,2.5974,-0.243424, 0.348105,2.6256,-0.18111, 0.371546,2.6256,-0.124808, + 0.371546,2.6256,-0.124808, 0.499384,2.5974,-0.167751, 0.467878,2.5974,-0.243424, + 0.425519,2.5974,-0.312283, 0.31659,2.6256,-0.232342, 0.348105,2.6256,-0.18111, + 0.348105,2.6256,-0.18111, 0.467878,2.5974,-0.243424, 0.425519,2.5974,-0.312283, + 0.373318,2.5974,-0.373318, 0.277752,2.6256,-0.277752, 0.31659,2.6256,-0.232342, + 0.31659,2.6256,-0.232342, 0.425519,2.5974,-0.312283, 0.373318,2.5974,-0.373318, + 0.312283,2.5974,-0.425519, 0.232342,2.6256,-0.31659, 0.277752,2.6256,-0.277752, + 0.277752,2.6256,-0.277752, 0.373318,2.5974,-0.373318, 0.312283,2.5974,-0.425519, + 0.243424,2.5974,-0.467878, 0.18111,2.6256,-0.348105, 0.232342,2.6256,-0.31659, + 0.232342,2.6256,-0.31659, 0.312283,2.5974,-0.425519, 0.243424,2.5974,-0.467878, + 0.167751,2.5974,-0.499384, 0.124808,2.6256,-0.371546, 0.18111,2.6256,-0.348105, + 0.18111,2.6256,-0.348105, 0.243424,2.5974,-0.467878, 0.167751,2.5974,-0.499384, + 0.086273,2.5974,-0.519028, 0.064188,2.6256,-0.386161, 0.124808,2.6256,-0.371546, + 0.124808,2.6256,-0.371546, 0.167751,2.5974,-0.499384, 0.086273,2.5974,-0.519028, + 0,2.5974,-0.5258, 0,2.6256,-0.3912, 0.064188,2.6256,-0.386161, + 0.064188,2.6256,-0.386161, 0.086273,2.5974,-0.519028, 0,2.5974,-0.5258, + 0.664924,2.5728,-0.110524, 0.519028,2.5974,-0.086273, 0.5258,2.5974,0, + 0.5258,2.5974,0, 0.6736,2.5728,0, 0.664924,2.5728,-0.110524, + 0.639758,2.5728,-0.214905, 0.499384,2.5974,-0.167751, 0.519028,2.5974,-0.086273, + 0.519028,2.5974,-0.086273, 0.664924,2.5728,-0.110524, 0.639758,2.5728,-0.214905, + 0.599396,2.5728,-0.31185, 0.467878,2.5974,-0.243424, 0.499384,2.5974,-0.167751, + 0.499384,2.5974,-0.167751, 0.639758,2.5728,-0.214905, 0.599396,2.5728,-0.31185, + 0.545131,2.5728,-0.400065, 0.425519,2.5974,-0.312283, 0.467878,2.5974,-0.243424, + 0.467878,2.5974,-0.243424, 0.599396,2.5728,-0.31185, 0.545131,2.5728,-0.400065, + 0.478256,2.5728,-0.478256, 0.373318,2.5974,-0.373318, 0.425519,2.5974,-0.312283, + 0.425519,2.5974,-0.312283, 0.545131,2.5728,-0.400065, 0.478256,2.5728,-0.478256, + 0.400065,2.5728,-0.545131, 0.312283,2.5974,-0.425519, 0.373318,2.5974,-0.373318, + 0.373318,2.5974,-0.373318, 0.478256,2.5728,-0.478256, 0.400065,2.5728,-0.545131, + 0.31185,2.5728,-0.599396, 0.243424,2.5974,-0.467878, 0.312283,2.5974,-0.425519, + 0.312283,2.5974,-0.425519, 0.400065,2.5728,-0.545131, 0.31185,2.5728,-0.599396, + 0.214905,2.5728,-0.639758, 0.167751,2.5974,-0.499384, 0.243424,2.5974,-0.467878, + 0.243424,2.5974,-0.467878, 0.31185,2.5728,-0.599396, 0.214905,2.5728,-0.639758, + 0.110524,2.5728,-0.664924, 0.086273,2.5974,-0.519028, 0.167751,2.5974,-0.499384, + 0.167751,2.5974,-0.499384, 0.214905,2.5728,-0.639758, 0.110524,2.5728,-0.664924, + 0,2.5728,-0.6736, 0,2.5974,-0.5258, 0.086273,2.5974,-0.519028, + 0.086273,2.5974,-0.519028, 0.110524,2.5728,-0.664924, 0,2.5728,-0.6736, + 0.814374,2.55,-0.135366, 0.664924,2.5728,-0.110524, 0.6736,2.5728,0, + 0.6736,2.5728,0, 0.825,2.55,0, 0.814374,2.55,-0.135366, + 0.783552,2.55,-0.263208, 0.639758,2.5728,-0.214905, 0.664924,2.5728,-0.110524, + 0.664924,2.5728,-0.110524, 0.814374,2.55,-0.135366, 0.783552,2.55,-0.263208, + 0.734118,2.55,-0.381942, 0.599396,2.5728,-0.31185, 0.639758,2.5728,-0.214905, + 0.639758,2.5728,-0.214905, 0.783552,2.55,-0.263208, 0.734118,2.55,-0.381942, + 0.667656,2.55,-0.489984, 0.545131,2.5728,-0.400065, 0.599396,2.5728,-0.31185, + 0.599396,2.5728,-0.31185, 0.734118,2.55,-0.381942, 0.667656,2.55,-0.489984, + 0.58575,2.55,-0.58575, 0.478256,2.5728,-0.478256, 0.545131,2.5728,-0.400065, + 0.545131,2.5728,-0.400065, 0.667656,2.55,-0.489984, 0.58575,2.55,-0.58575, + 0.489984,2.55,-0.667656, 0.400065,2.5728,-0.545131, 0.478256,2.5728,-0.478256, + 0.478256,2.5728,-0.478256, 0.58575,2.55,-0.58575, 0.489984,2.55,-0.667656, + 0.381942,2.55,-0.734118, 0.31185,2.5728,-0.599396, 0.400065,2.5728,-0.545131, + 0.400065,2.5728,-0.545131, 0.489984,2.55,-0.667656, 0.381942,2.55,-0.734118, + 0.263208,2.55,-0.783552, 0.214905,2.5728,-0.639758, 0.31185,2.5728,-0.599396, + 0.31185,2.5728,-0.599396, 0.381942,2.55,-0.734118, 0.263208,2.55,-0.783552, + 0.135366,2.55,-0.814374, 0.110524,2.5728,-0.664924, 0.214905,2.5728,-0.639758, + 0.214905,2.5728,-0.639758, 0.263208,2.55,-0.783552, 0.135366,2.55,-0.814374, + 0,2.55,-0.825, 0,2.5728,-0.6736, 0.110524,2.5728,-0.664924, + 0.110524,2.5728,-0.664924, 0.135366,2.55,-0.814374, 0,2.55,-0.825, + 0.957901,2.5272,-0.159223, 0.814374,2.55,-0.135366, 0.825,2.55,0, + 0.825,2.55,0, 0.9704,2.5272,0, 0.957901,2.5272,-0.159223, + 0.921647,2.5272,-0.309596, 0.783552,2.55,-0.263208, 0.814374,2.55,-0.135366, + 0.814374,2.55,-0.135366, 0.957901,2.5272,-0.159223, 0.921647,2.5272,-0.309596, + 0.863501,2.5272,-0.449256, 0.734118,2.55,-0.381942, 0.783552,2.55,-0.263208, + 0.783552,2.55,-0.263208, 0.921647,2.5272,-0.309596, 0.863501,2.5272,-0.449256, + 0.785325,2.5272,-0.57634, 0.667656,2.55,-0.489984, 0.734118,2.55,-0.381942, + 0.734118,2.55,-0.381942, 0.863501,2.5272,-0.449256, 0.785325,2.5272,-0.57634, + 0.688984,2.5272,-0.688984, 0.58575,2.55,-0.58575, 0.667656,2.55,-0.489984, + 0.667656,2.55,-0.489984, 0.785325,2.5272,-0.57634, 0.688984,2.5272,-0.688984, + 0.57634,2.5272,-0.785325, 0.489984,2.55,-0.667656, 0.58575,2.55,-0.58575, + 0.58575,2.55,-0.58575, 0.688984,2.5272,-0.688984, 0.57634,2.5272,-0.785325, + 0.449256,2.5272,-0.863501, 0.381942,2.55,-0.734118, 0.489984,2.55,-0.667656, + 0.489984,2.55,-0.667656, 0.57634,2.5272,-0.785325, 0.449256,2.5272,-0.863501, + 0.309596,2.5272,-0.921647, 0.263208,2.55,-0.783552, 0.381942,2.55,-0.734118, + 0.381942,2.55,-0.734118, 0.449256,2.5272,-0.863501, 0.309596,2.5272,-0.921647, + 0.159223,2.5272,-0.957901, 0.135366,2.55,-0.814374, 0.263208,2.55,-0.783552, + 0.263208,2.55,-0.783552, 0.309596,2.5272,-0.921647, 0.159223,2.5272,-0.957901, + 0,2.5272,-0.9704, 0,2.55,-0.825, 0.135366,2.55,-0.814374, + 0.135366,2.55,-0.814374, 0.159223,2.5272,-0.957901, 0,2.5272,-0.9704, + 1.086029,2.5026,-0.180521, 0.957901,2.5272,-0.159223, 0.9704,2.5272,0, + 0.9704,2.5272,0, 1.1002,2.5026,0, 1.086029,2.5026,-0.180521, + 1.044926,2.5026,-0.351008, 0.921647,2.5272,-0.309596, 0.957901,2.5272,-0.159223, + 0.957901,2.5272,-0.159223, 1.086029,2.5026,-0.180521, 1.044926,2.5026,-0.351008, + 0.979002,2.5026,-0.509349, 0.863501,2.5272,-0.449256, 0.921647,2.5272,-0.309596, + 0.921647,2.5272,-0.309596, 1.044926,2.5026,-0.351008, 0.979002,2.5026,-0.509349, + 0.89037,2.5026,-0.653431, 0.785325,2.5272,-0.57634, 0.863501,2.5272,-0.449256, + 0.863501,2.5272,-0.449256, 0.979002,2.5026,-0.509349, 0.89037,2.5026,-0.653431, + 0.781142,2.5026,-0.781142, 0.688984,2.5272,-0.688984, 0.785325,2.5272,-0.57634, + 0.785325,2.5272,-0.57634, 0.89037,2.5026,-0.653431, 0.781142,2.5026,-0.781142, + 0.653431,2.5026,-0.89037, 0.57634,2.5272,-0.785325, 0.688984,2.5272,-0.688984, + 0.688984,2.5272,-0.688984, 0.781142,2.5026,-0.781142, 0.653431,2.5026,-0.89037, + 0.509349,2.5026,-0.979002, 0.449256,2.5272,-0.863501, 0.57634,2.5272,-0.785325, + 0.57634,2.5272,-0.785325, 0.653431,2.5026,-0.89037, 0.509349,2.5026,-0.979002, + 0.351008,2.5026,-1.044926, 0.309596,2.5272,-0.921647, 0.449256,2.5272,-0.863501, + 0.449256,2.5272,-0.863501, 0.509349,2.5026,-0.979002, 0.351008,2.5026,-1.044926, + 0.180521,2.5026,-1.086029, 0.159223,2.5272,-0.957901, 0.309596,2.5272,-0.921647, + 0.309596,2.5272,-0.921647, 0.351008,2.5026,-1.044926, 0.180521,2.5026,-1.086029, + 0,2.5026,-1.1002, 0,2.5272,-0.9704, 0.159223,2.5272,-0.957901, + 0.159223,2.5272,-0.957901, 0.180521,2.5026,-1.086029, 0,2.5026,-1.1002, + 1.189282,2.4744,-0.197684, 1.086029,2.5026,-0.180521, 1.1002,2.5026,0, + 1.1002,2.5026,0, 1.2048,2.4744,0, 1.189282,2.4744,-0.197684, + 1.144271,2.4744,-0.384379, 1.044926,2.5026,-0.351008, 1.086029,2.5026,-0.180521, + 1.086029,2.5026,-0.180521, 1.189282,2.4744,-0.197684, 1.144271,2.4744,-0.384379, + 1.072079,2.4744,-0.557774, 0.979002,2.5026,-0.509349, 1.044926,2.5026,-0.351008, + 1.044926,2.5026,-0.351008, 1.144271,2.4744,-0.384379, 1.072079,2.4744,-0.557774, + 0.975021,2.4744,-0.715555, 0.89037,2.5026,-0.653431, 0.979002,2.5026,-0.509349, + 0.979002,2.5026,-0.509349, 1.072079,2.4744,-0.557774, 0.975021,2.4744,-0.715555, + 0.855408,2.4744,-0.855408, 0.781142,2.5026,-0.781142, 0.89037,2.5026,-0.653431, + 0.89037,2.5026,-0.653431, 0.975021,2.4744,-0.715555, 0.855408,2.4744,-0.855408, + 0.715555,2.4744,-0.975021, 0.653431,2.5026,-0.89037, 0.781142,2.5026,-0.781142, + 0.781142,2.5026,-0.781142, 0.855408,2.4744,-0.855408, 0.715555,2.4744,-0.975021, + 0.557774,2.4744,-1.072079, 0.509349,2.5026,-0.979002, 0.653431,2.5026,-0.89037, + 0.653431,2.5026,-0.89037, 0.715555,2.4744,-0.975021, 0.557774,2.4744,-1.072079, + 0.384379,2.4744,-1.144271, 0.351008,2.5026,-1.044926, 0.509349,2.5026,-0.979002, + 0.509349,2.5026,-0.979002, 0.557774,2.4744,-1.072079, 0.384379,2.4744,-1.144271, + 0.197684,2.4744,-1.189282, 0.180521,2.5026,-1.086029, 0.351008,2.5026,-1.044926, + 0.351008,2.5026,-1.044926, 0.384379,2.4744,-1.144271, 0.197684,2.4744,-1.189282, + 0,2.4744,-1.2048, 0,2.5026,-1.1002, 0.180521,2.5026,-1.086029, + 0.180521,2.5026,-1.086029, 0.197684,2.4744,-1.189282, 0,2.4744,-1.2048, + 1.258183,2.4408,-0.209136, 1.189282,2.4744,-0.197684, 1.2048,2.4744,0, + 1.2048,2.4744,0, 1.2746,2.4408,0, 1.258183,2.4408,-0.209136, + 1.210564,2.4408,-0.406648, 1.144271,2.4744,-0.384379, 1.189282,2.4744,-0.197684, + 1.189282,2.4744,-0.197684, 1.258183,2.4408,-0.209136, 1.210564,2.4408,-0.406648, + 1.13419,2.4408,-0.590089, 1.072079,2.4744,-0.557774, 1.144271,2.4744,-0.384379, + 1.144271,2.4744,-0.384379, 1.210564,2.4408,-0.406648, 1.13419,2.4408,-0.590089, + 1.031508,2.4408,-0.75701, 0.975021,2.4744,-0.715555, 1.072079,2.4744,-0.557774, + 1.072079,2.4744,-0.557774, 1.13419,2.4408,-0.590089, 1.031508,2.4408,-0.75701, + 0.904966,2.4408,-0.904966, 0.855408,2.4744,-0.855408, 0.975021,2.4744,-0.715555, + 0.975021,2.4744,-0.715555, 1.031508,2.4408,-0.75701, 0.904966,2.4408,-0.904966, + 0.75701,2.4408,-1.031508, 0.715555,2.4744,-0.975021, 0.855408,2.4744,-0.855408, + 0.855408,2.4744,-0.855408, 0.904966,2.4408,-0.904966, 0.75701,2.4408,-1.031508, + 0.590089,2.4408,-1.13419, 0.557774,2.4744,-1.072079, 0.715555,2.4744,-0.975021, + 0.715555,2.4744,-0.975021, 0.75701,2.4408,-1.031508, 0.590089,2.4408,-1.13419, + 0.406648,2.4408,-1.210564, 0.384379,2.4744,-1.144271, 0.557774,2.4744,-1.072079, + 0.557774,2.4744,-1.072079, 0.590089,2.4408,-1.13419, 0.406648,2.4408,-1.210564, + 0.209136,2.4408,-1.258183, 0.197684,2.4744,-1.189282, 0.384379,2.4744,-1.144271, + 0.384379,2.4744,-1.144271, 0.406648,2.4408,-1.210564, 0.209136,2.4408,-1.258183, + 0,2.4408,-1.2746, 0,2.4744,-1.2048, 0.197684,2.4744,-1.189282, + 0.197684,2.4744,-1.189282, 0.209136,2.4408,-1.258183, 0,2.4408,-1.2746, + 1.283256,2.4,-0.213304, 1.258183,2.4408,-0.209136, 1.2746,2.4408,0, + 1.2746,2.4408,0, 1.3,2.4,0, 1.283256,2.4,-0.213304, + 1.234688,2.4,-0.414752, 1.210564,2.4408,-0.406648, 1.258183,2.4408,-0.209136, + 1.258183,2.4408,-0.209136, 1.283256,2.4,-0.213304, 1.234688,2.4,-0.414752, + 1.156792,2.4,-0.601848, 1.13419,2.4408,-0.590089, 1.210564,2.4408,-0.406648, + 1.210564,2.4408,-0.406648, 1.234688,2.4,-0.414752, 1.156792,2.4,-0.601848, + 1.052064,2.4,-0.772096, 1.031508,2.4408,-0.75701, 1.13419,2.4408,-0.590089, + 1.13419,2.4408,-0.590089, 1.156792,2.4,-0.601848, 1.052064,2.4,-0.772096, + 0.923,2.4,-0.923, 0.904966,2.4408,-0.904966, 1.031508,2.4408,-0.75701, + 1.031508,2.4408,-0.75701, 1.052064,2.4,-0.772096, 0.923,2.4,-0.923, + 0.772096,2.4,-1.052064, 0.75701,2.4408,-1.031508, 0.904966,2.4408,-0.904966, + 0.904966,2.4408,-0.904966, 0.923,2.4,-0.923, 0.772096,2.4,-1.052064, + 0.601848,2.4,-1.156792, 0.590089,2.4408,-1.13419, 0.75701,2.4408,-1.031508, + 0.75701,2.4408,-1.031508, 0.772096,2.4,-1.052064, 0.601848,2.4,-1.156792, + 0.414752,2.4,-1.234688, 0.406648,2.4408,-1.210564, 0.590089,2.4408,-1.13419, + 0.590089,2.4408,-1.13419, 0.601848,2.4,-1.156792, 0.414752,2.4,-1.234688, + 0.213304,2.4,-1.283256, 0.209136,2.4408,-1.258183, 0.406648,2.4408,-1.210564, + 0.406648,2.4408,-1.210564, 0.414752,2.4,-1.234688, 0.213304,2.4,-1.283256, + 0,2.4,-1.3, 0,2.4408,-1.2746, 0.209136,2.4408,-1.258183, + 0.209136,2.4408,-1.258183, 0.213304,2.4,-1.283256, 0,2.4,-1.3, + -0.045844,2.6592,-0.275801, -0.032816,2.7,-0.197424, 0,2.7,-0.2, + 0,2.7,-0.2, 0,2.6592,-0.2794, -0.045844,2.6592,-0.275801, + -0.08914,2.6592,-0.265363, -0.063808,2.7,-0.189952, -0.032816,2.7,-0.197424, + -0.032816,2.7,-0.197424, -0.045844,2.6592,-0.275801, -0.08914,2.6592,-0.265363, + -0.129351,2.6592,-0.248621, -0.092592,2.7,-0.177968, -0.063808,2.7,-0.189952, + -0.063808,2.7,-0.189952, -0.08914,2.6592,-0.265363, -0.129351,2.6592,-0.248621, + -0.165941,2.6592,-0.226113, -0.118784,2.7,-0.161856, -0.092592,2.7,-0.177968, + -0.092592,2.7,-0.177968, -0.129351,2.6592,-0.248621, -0.165941,2.6592,-0.226113, + -0.198374,2.6592,-0.198374, -0.142,2.7,-0.142, -0.118784,2.7,-0.161856, + -0.118784,2.7,-0.161856, -0.165941,2.6592,-0.226113, -0.198374,2.6592,-0.198374, + -0.226113,2.6592,-0.165941, -0.161856,2.7,-0.118784, -0.142,2.7,-0.142, + -0.142,2.7,-0.142, -0.198374,2.6592,-0.198374, -0.226113,2.6592,-0.165941, + -0.248621,2.6592,-0.129351, -0.177968,2.7,-0.092592, -0.161856,2.7,-0.118784, + -0.161856,2.7,-0.118784, -0.226113,2.6592,-0.165941, -0.248621,2.6592,-0.129351, + -0.265363,2.6592,-0.08914, -0.189952,2.7,-0.063808, -0.177968,2.7,-0.092592, + -0.177968,2.7,-0.092592, -0.248621,2.6592,-0.129351, -0.265363,2.6592,-0.08914, + -0.275801,2.6592,-0.045844, -0.197424,2.7,-0.032816, -0.189952,2.7,-0.063808, + -0.189952,2.7,-0.063808, -0.265363,2.6592,-0.08914, -0.275801,2.6592,-0.045844, + -0.2794,2.6592,0, -0.2,2.7,0, -0.197424,2.7,-0.032816, + -0.197424,2.7,-0.032816, -0.275801,2.6592,-0.045844, -0.2794,2.6592,0, + -0.064188,2.6256,-0.386161, -0.045844,2.6592,-0.275801, 0,2.6592,-0.2794, + 0,2.6592,-0.2794, 0,2.6256,-0.3912, -0.064188,2.6256,-0.386161, + -0.124808,2.6256,-0.371546, -0.08914,2.6592,-0.265363, -0.045844,2.6592,-0.275801, + -0.045844,2.6592,-0.275801, -0.064188,2.6256,-0.386161, -0.124808,2.6256,-0.371546, + -0.18111,2.6256,-0.348105, -0.129351,2.6592,-0.248621, -0.08914,2.6592,-0.265363, + -0.08914,2.6592,-0.265363, -0.124808,2.6256,-0.371546, -0.18111,2.6256,-0.348105, + -0.232342,2.6256,-0.31659, -0.165941,2.6592,-0.226113, -0.129351,2.6592,-0.248621, + -0.129351,2.6592,-0.248621, -0.18111,2.6256,-0.348105, -0.232342,2.6256,-0.31659, + -0.277752,2.6256,-0.277752, -0.198374,2.6592,-0.198374, -0.165941,2.6592,-0.226113, + -0.165941,2.6592,-0.226113, -0.232342,2.6256,-0.31659, -0.277752,2.6256,-0.277752, + -0.31659,2.6256,-0.232342, -0.226113,2.6592,-0.165941, -0.198374,2.6592,-0.198374, + -0.198374,2.6592,-0.198374, -0.277752,2.6256,-0.277752, -0.31659,2.6256,-0.232342, + -0.348105,2.6256,-0.18111, -0.248621,2.6592,-0.129351, -0.226113,2.6592,-0.165941, + -0.226113,2.6592,-0.165941, -0.31659,2.6256,-0.232342, -0.348105,2.6256,-0.18111, + -0.371546,2.6256,-0.124808, -0.265363,2.6592,-0.08914, -0.248621,2.6592,-0.129351, + -0.248621,2.6592,-0.129351, -0.348105,2.6256,-0.18111, -0.371546,2.6256,-0.124808, + -0.386161,2.6256,-0.064188, -0.275801,2.6592,-0.045844, -0.265363,2.6592,-0.08914, + -0.265363,2.6592,-0.08914, -0.371546,2.6256,-0.124808, -0.386161,2.6256,-0.064188, + -0.3912,2.6256,0, -0.2794,2.6592,0, -0.275801,2.6592,-0.045844, + -0.275801,2.6592,-0.045844, -0.386161,2.6256,-0.064188, -0.3912,2.6256,0, + -0.086273,2.5974,-0.519028, -0.064188,2.6256,-0.386161, 0,2.6256,-0.3912, + 0,2.6256,-0.3912, 0,2.5974,-0.5258, -0.086273,2.5974,-0.519028, + -0.167751,2.5974,-0.499384, -0.124808,2.6256,-0.371546, -0.064188,2.6256,-0.386161, + -0.064188,2.6256,-0.386161, -0.086273,2.5974,-0.519028, -0.167751,2.5974,-0.499384, + -0.243424,2.5974,-0.467878, -0.18111,2.6256,-0.348105, -0.124808,2.6256,-0.371546, + -0.124808,2.6256,-0.371546, -0.167751,2.5974,-0.499384, -0.243424,2.5974,-0.467878, + -0.312283,2.5974,-0.425519, -0.232342,2.6256,-0.31659, -0.18111,2.6256,-0.348105, + -0.18111,2.6256,-0.348105, -0.243424,2.5974,-0.467878, -0.312283,2.5974,-0.425519, + -0.373318,2.5974,-0.373318, -0.277752,2.6256,-0.277752, -0.232342,2.6256,-0.31659, + -0.232342,2.6256,-0.31659, -0.312283,2.5974,-0.425519, -0.373318,2.5974,-0.373318, + -0.425519,2.5974,-0.312283, -0.31659,2.6256,-0.232342, -0.277752,2.6256,-0.277752, + -0.277752,2.6256,-0.277752, -0.373318,2.5974,-0.373318, -0.425519,2.5974,-0.312283, + -0.467878,2.5974,-0.243424, -0.348105,2.6256,-0.18111, -0.31659,2.6256,-0.232342, + -0.31659,2.6256,-0.232342, -0.425519,2.5974,-0.312283, -0.467878,2.5974,-0.243424, + -0.499384,2.5974,-0.167751, -0.371546,2.6256,-0.124808, -0.348105,2.6256,-0.18111, + -0.348105,2.6256,-0.18111, -0.467878,2.5974,-0.243424, -0.499384,2.5974,-0.167751, + -0.519028,2.5974,-0.086273, -0.386161,2.6256,-0.064188, -0.371546,2.6256,-0.124808, + -0.371546,2.6256,-0.124808, -0.499384,2.5974,-0.167751, -0.519028,2.5974,-0.086273, + -0.5258,2.5974,0, -0.3912,2.6256,0, -0.386161,2.6256,-0.064188, + -0.386161,2.6256,-0.064188, -0.519028,2.5974,-0.086273, -0.5258,2.5974,0, + -0.110524,2.5728,-0.664924, -0.086273,2.5974,-0.519028, 0,2.5974,-0.5258, + 0,2.5974,-0.5258, 0,2.5728,-0.6736, -0.110524,2.5728,-0.664924, + -0.214905,2.5728,-0.639758, -0.167751,2.5974,-0.499384, -0.086273,2.5974,-0.519028, + -0.086273,2.5974,-0.519028, -0.110524,2.5728,-0.664924, -0.214905,2.5728,-0.639758, + -0.31185,2.5728,-0.599396, -0.243424,2.5974,-0.467878, -0.167751,2.5974,-0.499384, + -0.167751,2.5974,-0.499384, -0.214905,2.5728,-0.639758, -0.31185,2.5728,-0.599396, + -0.400065,2.5728,-0.545131, -0.312283,2.5974,-0.425519, -0.243424,2.5974,-0.467878, + -0.243424,2.5974,-0.467878, -0.31185,2.5728,-0.599396, -0.400065,2.5728,-0.545131, + -0.478256,2.5728,-0.478256, -0.373318,2.5974,-0.373318, -0.312283,2.5974,-0.425519, + -0.312283,2.5974,-0.425519, -0.400065,2.5728,-0.545131, -0.478256,2.5728,-0.478256, + -0.545131,2.5728,-0.400065, -0.425519,2.5974,-0.312283, -0.373318,2.5974,-0.373318, + -0.373318,2.5974,-0.373318, -0.478256,2.5728,-0.478256, -0.545131,2.5728,-0.400065, + -0.599396,2.5728,-0.31185, -0.467878,2.5974,-0.243424, -0.425519,2.5974,-0.312283, + -0.425519,2.5974,-0.312283, -0.545131,2.5728,-0.400065, -0.599396,2.5728,-0.31185, + -0.639758,2.5728,-0.214905, -0.499384,2.5974,-0.167751, -0.467878,2.5974,-0.243424, + -0.467878,2.5974,-0.243424, -0.599396,2.5728,-0.31185, -0.639758,2.5728,-0.214905, + -0.664924,2.5728,-0.110524, -0.519028,2.5974,-0.086273, -0.499384,2.5974,-0.167751, + -0.499384,2.5974,-0.167751, -0.639758,2.5728,-0.214905, -0.664924,2.5728,-0.110524, + -0.6736,2.5728,0, -0.5258,2.5974,0, -0.519028,2.5974,-0.086273, + -0.519028,2.5974,-0.086273, -0.664924,2.5728,-0.110524, -0.6736,2.5728,0, + -0.135366,2.55,-0.814374, -0.110524,2.5728,-0.664924, 0,2.5728,-0.6736, + 0,2.5728,-0.6736, 0,2.55,-0.825, -0.135366,2.55,-0.814374, + -0.263208,2.55,-0.783552, -0.214905,2.5728,-0.639758, -0.110524,2.5728,-0.664924, + -0.110524,2.5728,-0.664924, -0.135366,2.55,-0.814374, -0.263208,2.55,-0.783552, + -0.381942,2.55,-0.734118, -0.31185,2.5728,-0.599396, -0.214905,2.5728,-0.639758, + -0.214905,2.5728,-0.639758, -0.263208,2.55,-0.783552, -0.381942,2.55,-0.734118, + -0.489984,2.55,-0.667656, -0.400065,2.5728,-0.545131, -0.31185,2.5728,-0.599396, + -0.31185,2.5728,-0.599396, -0.381942,2.55,-0.734118, -0.489984,2.55,-0.667656, + -0.58575,2.55,-0.58575, -0.478256,2.5728,-0.478256, -0.400065,2.5728,-0.545131, + -0.400065,2.5728,-0.545131, -0.489984,2.55,-0.667656, -0.58575,2.55,-0.58575, + -0.667656,2.55,-0.489984, -0.545131,2.5728,-0.400065, -0.478256,2.5728,-0.478256, + -0.478256,2.5728,-0.478256, -0.58575,2.55,-0.58575, -0.667656,2.55,-0.489984, + -0.734118,2.55,-0.381942, -0.599396,2.5728,-0.31185, -0.545131,2.5728,-0.400065, + -0.545131,2.5728,-0.400065, -0.667656,2.55,-0.489984, -0.734118,2.55,-0.381942, + -0.783552,2.55,-0.263208, -0.639758,2.5728,-0.214905, -0.599396,2.5728,-0.31185, + -0.599396,2.5728,-0.31185, -0.734118,2.55,-0.381942, -0.783552,2.55,-0.263208, + -0.814374,2.55,-0.135366, -0.664924,2.5728,-0.110524, -0.639758,2.5728,-0.214905, + -0.639758,2.5728,-0.214905, -0.783552,2.55,-0.263208, -0.814374,2.55,-0.135366, + -0.825,2.55,0, -0.6736,2.5728,0, -0.664924,2.5728,-0.110524, + -0.664924,2.5728,-0.110524, -0.814374,2.55,-0.135366, -0.825,2.55,0, + -0.159223,2.5272,-0.957901, -0.135366,2.55,-0.814374, 0,2.55,-0.825, + 0,2.55,-0.825, 0,2.5272,-0.9704, -0.159223,2.5272,-0.957901, + -0.309596,2.5272,-0.921647, -0.263208,2.55,-0.783552, -0.135366,2.55,-0.814374, + -0.135366,2.55,-0.814374, -0.159223,2.5272,-0.957901, -0.309596,2.5272,-0.921647, + -0.449256,2.5272,-0.863501, -0.381942,2.55,-0.734118, -0.263208,2.55,-0.783552, + -0.263208,2.55,-0.783552, -0.309596,2.5272,-0.921647, -0.449256,2.5272,-0.863501, + -0.57634,2.5272,-0.785325, -0.489984,2.55,-0.667656, -0.381942,2.55,-0.734118, + -0.381942,2.55,-0.734118, -0.449256,2.5272,-0.863501, -0.57634,2.5272,-0.785325, + -0.688984,2.5272,-0.688984, -0.58575,2.55,-0.58575, -0.489984,2.55,-0.667656, + -0.489984,2.55,-0.667656, -0.57634,2.5272,-0.785325, -0.688984,2.5272,-0.688984, + -0.785325,2.5272,-0.57634, -0.667656,2.55,-0.489984, -0.58575,2.55,-0.58575, + -0.58575,2.55,-0.58575, -0.688984,2.5272,-0.688984, -0.785325,2.5272,-0.57634, + -0.863501,2.5272,-0.449256, -0.734118,2.55,-0.381942, -0.667656,2.55,-0.489984, + -0.667656,2.55,-0.489984, -0.785325,2.5272,-0.57634, -0.863501,2.5272,-0.449256, + -0.921647,2.5272,-0.309596, -0.783552,2.55,-0.263208, -0.734118,2.55,-0.381942, + -0.734118,2.55,-0.381942, -0.863501,2.5272,-0.449256, -0.921647,2.5272,-0.309596, + -0.957901,2.5272,-0.159223, -0.814374,2.55,-0.135366, -0.783552,2.55,-0.263208, + -0.783552,2.55,-0.263208, -0.921647,2.5272,-0.309596, -0.957901,2.5272,-0.159223, + -0.9704,2.5272,0, -0.825,2.55,0, -0.814374,2.55,-0.135366, + -0.814374,2.55,-0.135366, -0.957901,2.5272,-0.159223, -0.9704,2.5272,0, + -0.180521,2.5026,-1.086029, -0.159223,2.5272,-0.957901, 0,2.5272,-0.9704, + 0,2.5272,-0.9704, 0,2.5026,-1.1002, -0.180521,2.5026,-1.086029, + -0.351008,2.5026,-1.044926, -0.309596,2.5272,-0.921647, -0.159223,2.5272,-0.957901, + -0.159223,2.5272,-0.957901, -0.180521,2.5026,-1.086029, -0.351008,2.5026,-1.044926, + -0.509349,2.5026,-0.979002, -0.449256,2.5272,-0.863501, -0.309596,2.5272,-0.921647, + -0.309596,2.5272,-0.921647, -0.351008,2.5026,-1.044926, -0.509349,2.5026,-0.979002, + -0.653431,2.5026,-0.89037, -0.57634,2.5272,-0.785325, -0.449256,2.5272,-0.863501, + -0.449256,2.5272,-0.863501, -0.509349,2.5026,-0.979002, -0.653431,2.5026,-0.89037, + -0.781142,2.5026,-0.781142, -0.688984,2.5272,-0.688984, -0.57634,2.5272,-0.785325, + -0.57634,2.5272,-0.785325, -0.653431,2.5026,-0.89037, -0.781142,2.5026,-0.781142, + -0.89037,2.5026,-0.653431, -0.785325,2.5272,-0.57634, -0.688984,2.5272,-0.688984, + -0.688984,2.5272,-0.688984, -0.781142,2.5026,-0.781142, -0.89037,2.5026,-0.653431, + -0.979002,2.5026,-0.509349, -0.863501,2.5272,-0.449256, -0.785325,2.5272,-0.57634, + -0.785325,2.5272,-0.57634, -0.89037,2.5026,-0.653431, -0.979002,2.5026,-0.509349, + -1.044926,2.5026,-0.351008, -0.921647,2.5272,-0.309596, -0.863501,2.5272,-0.449256, + -0.863501,2.5272,-0.449256, -0.979002,2.5026,-0.509349, -1.044926,2.5026,-0.351008, + -1.086029,2.5026,-0.180521, -0.957901,2.5272,-0.159223, -0.921647,2.5272,-0.309596, + -0.921647,2.5272,-0.309596, -1.044926,2.5026,-0.351008, -1.086029,2.5026,-0.180521, + -1.1002,2.5026,0, -0.9704,2.5272,0, -0.957901,2.5272,-0.159223, + -0.957901,2.5272,-0.159223, -1.086029,2.5026,-0.180521, -1.1002,2.5026,0, + -0.197684,2.4744,-1.189282, -0.180521,2.5026,-1.086029, 0,2.5026,-1.1002, + 0,2.5026,-1.1002, 0,2.4744,-1.2048, -0.197684,2.4744,-1.189282, + -0.384379,2.4744,-1.144271, -0.351008,2.5026,-1.044926, -0.180521,2.5026,-1.086029, + -0.180521,2.5026,-1.086029, -0.197684,2.4744,-1.189282, -0.384379,2.4744,-1.144271, + -0.557774,2.4744,-1.072079, -0.509349,2.5026,-0.979002, -0.351008,2.5026,-1.044926, + -0.351008,2.5026,-1.044926, -0.384379,2.4744,-1.144271, -0.557774,2.4744,-1.072079, + -0.715555,2.4744,-0.975021, -0.653431,2.5026,-0.89037, -0.509349,2.5026,-0.979002, + -0.509349,2.5026,-0.979002, -0.557774,2.4744,-1.072079, -0.715555,2.4744,-0.975021, + -0.855408,2.4744,-0.855408, -0.781142,2.5026,-0.781142, -0.653431,2.5026,-0.89037, + -0.653431,2.5026,-0.89037, -0.715555,2.4744,-0.975021, -0.855408,2.4744,-0.855408, + -0.975021,2.4744,-0.715555, -0.89037,2.5026,-0.653431, -0.781142,2.5026,-0.781142, + -0.781142,2.5026,-0.781142, -0.855408,2.4744,-0.855408, -0.975021,2.4744,-0.715555, + -1.072079,2.4744,-0.557774, -0.979002,2.5026,-0.509349, -0.89037,2.5026,-0.653431, + -0.89037,2.5026,-0.653431, -0.975021,2.4744,-0.715555, -1.072079,2.4744,-0.557774, + -1.144271,2.4744,-0.384379, -1.044926,2.5026,-0.351008, -0.979002,2.5026,-0.509349, + -0.979002,2.5026,-0.509349, -1.072079,2.4744,-0.557774, -1.144271,2.4744,-0.384379, + -1.189282,2.4744,-0.197684, -1.086029,2.5026,-0.180521, -1.044926,2.5026,-0.351008, + -1.044926,2.5026,-0.351008, -1.144271,2.4744,-0.384379, -1.189282,2.4744,-0.197684, + -1.2048,2.4744,0, -1.1002,2.5026,0, -1.086029,2.5026,-0.180521, + -1.086029,2.5026,-0.180521, -1.189282,2.4744,-0.197684, -1.2048,2.4744,0, + -0.209136,2.4408,-1.258183, -0.197684,2.4744,-1.189282, 0,2.4744,-1.2048, + 0,2.4744,-1.2048, 0,2.4408,-1.2746, -0.209136,2.4408,-1.258183, + -0.406648,2.4408,-1.210564, -0.384379,2.4744,-1.144271, -0.197684,2.4744,-1.189282, + -0.197684,2.4744,-1.189282, -0.209136,2.4408,-1.258183, -0.406648,2.4408,-1.210564, + -0.590089,2.4408,-1.13419, -0.557774,2.4744,-1.072079, -0.384379,2.4744,-1.144271, + -0.384379,2.4744,-1.144271, -0.406648,2.4408,-1.210564, -0.590089,2.4408,-1.13419, + -0.75701,2.4408,-1.031508, -0.715555,2.4744,-0.975021, -0.557774,2.4744,-1.072079, + -0.557774,2.4744,-1.072079, -0.590089,2.4408,-1.13419, -0.75701,2.4408,-1.031508, + -0.904966,2.4408,-0.904966, -0.855408,2.4744,-0.855408, -0.715555,2.4744,-0.975021, + -0.715555,2.4744,-0.975021, -0.75701,2.4408,-1.031508, -0.904966,2.4408,-0.904966, + -1.031508,2.4408,-0.75701, -0.975021,2.4744,-0.715555, -0.855408,2.4744,-0.855408, + -0.855408,2.4744,-0.855408, -0.904966,2.4408,-0.904966, -1.031508,2.4408,-0.75701, + -1.13419,2.4408,-0.590089, -1.072079,2.4744,-0.557774, -0.975021,2.4744,-0.715555, + -0.975021,2.4744,-0.715555, -1.031508,2.4408,-0.75701, -1.13419,2.4408,-0.590089, + -1.210564,2.4408,-0.406648, -1.144271,2.4744,-0.384379, -1.072079,2.4744,-0.557774, + -1.072079,2.4744,-0.557774, -1.13419,2.4408,-0.590089, -1.210564,2.4408,-0.406648, + -1.258183,2.4408,-0.209136, -1.189282,2.4744,-0.197684, -1.144271,2.4744,-0.384379, + -1.144271,2.4744,-0.384379, -1.210564,2.4408,-0.406648, -1.258183,2.4408,-0.209136, + -1.2746,2.4408,0, -1.2048,2.4744,0, -1.189282,2.4744,-0.197684, + -1.189282,2.4744,-0.197684, -1.258183,2.4408,-0.209136, -1.2746,2.4408,0, + -0.213304,2.4,-1.283256, -0.209136,2.4408,-1.258183, 0,2.4408,-1.2746, + 0,2.4408,-1.2746, 0,2.4,-1.3, -0.213304,2.4,-1.283256, + -0.414752,2.4,-1.234688, -0.406648,2.4408,-1.210564, -0.209136,2.4408,-1.258183, + -0.209136,2.4408,-1.258183, -0.213304,2.4,-1.283256, -0.414752,2.4,-1.234688, + -0.601848,2.4,-1.156792, -0.590089,2.4408,-1.13419, -0.406648,2.4408,-1.210564, + -0.406648,2.4408,-1.210564, -0.414752,2.4,-1.234688, -0.601848,2.4,-1.156792, + -0.772096,2.4,-1.052064, -0.75701,2.4408,-1.031508, -0.590089,2.4408,-1.13419, + -0.590089,2.4408,-1.13419, -0.601848,2.4,-1.156792, -0.772096,2.4,-1.052064, + -0.923,2.4,-0.923, -0.904966,2.4408,-0.904966, -0.75701,2.4408,-1.031508, + -0.75701,2.4408,-1.031508, -0.772096,2.4,-1.052064, -0.923,2.4,-0.923, + -1.052064,2.4,-0.772096, -1.031508,2.4408,-0.75701, -0.904966,2.4408,-0.904966, + -0.904966,2.4408,-0.904966, -0.923,2.4,-0.923, -1.052064,2.4,-0.772096, + -1.156792,2.4,-0.601848, -1.13419,2.4408,-0.590089, -1.031508,2.4408,-0.75701, + -1.031508,2.4408,-0.75701, -1.052064,2.4,-0.772096, -1.156792,2.4,-0.601848, + -1.234688,2.4,-0.414752, -1.210564,2.4408,-0.406648, -1.13419,2.4408,-0.590089, + -1.13419,2.4408,-0.590089, -1.156792,2.4,-0.601848, -1.234688,2.4,-0.414752, + -1.283256,2.4,-0.213304, -1.258183,2.4408,-0.209136, -1.210564,2.4408,-0.406648, + -1.210564,2.4408,-0.406648, -1.234688,2.4,-0.414752, -1.283256,2.4,-0.213304, + -1.3,2.4,0, -1.2746,2.4408,0, -1.258183,2.4408,-0.209136, + -1.258183,2.4408,-0.209136, -1.283256,2.4,-0.213304, -1.3,2.4,0, + -0.275801,2.6592,0.045844, -0.197424,2.7,0.032816, -0.2,2.7,0, + -0.2,2.7,0, -0.2794,2.6592,0, -0.275801,2.6592,0.045844, + -0.265363,2.6592,0.08914, -0.189952,2.7,0.063808, -0.197424,2.7,0.032816, + -0.197424,2.7,0.032816, -0.275801,2.6592,0.045844, -0.265363,2.6592,0.08914, + -0.248621,2.6592,0.129351, -0.177968,2.7,0.092592, -0.189952,2.7,0.063808, + -0.189952,2.7,0.063808, -0.265363,2.6592,0.08914, -0.248621,2.6592,0.129351, + -0.226113,2.6592,0.165941, -0.161856,2.7,0.118784, -0.177968,2.7,0.092592, + -0.177968,2.7,0.092592, -0.248621,2.6592,0.129351, -0.226113,2.6592,0.165941, + -0.198374,2.6592,0.198374, -0.142,2.7,0.142, -0.161856,2.7,0.118784, + -0.161856,2.7,0.118784, -0.226113,2.6592,0.165941, -0.198374,2.6592,0.198374, + -0.165941,2.6592,0.226113, -0.118784,2.7,0.161856, -0.142,2.7,0.142, + -0.142,2.7,0.142, -0.198374,2.6592,0.198374, -0.165941,2.6592,0.226113, + -0.129351,2.6592,0.248621, -0.092592,2.7,0.177968, -0.118784,2.7,0.161856, + -0.118784,2.7,0.161856, -0.165941,2.6592,0.226113, -0.129351,2.6592,0.248621, + -0.08914,2.6592,0.265363, -0.063808,2.7,0.189952, -0.092592,2.7,0.177968, + -0.092592,2.7,0.177968, -0.129351,2.6592,0.248621, -0.08914,2.6592,0.265363, + -0.045844,2.6592,0.275801, -0.032816,2.7,0.197424, -0.063808,2.7,0.189952, + -0.063808,2.7,0.189952, -0.08914,2.6592,0.265363, -0.045844,2.6592,0.275801, + 0,2.6592,0.2794, 0,2.7,0.2, -0.032816,2.7,0.197424, + -0.032816,2.7,0.197424, -0.045844,2.6592,0.275801, 0,2.6592,0.2794, + -0.386161,2.6256,0.064188, -0.275801,2.6592,0.045844, -0.2794,2.6592,0, + -0.2794,2.6592,0, -0.3912,2.6256,0, -0.386161,2.6256,0.064188, + -0.371546,2.6256,0.124808, -0.265363,2.6592,0.08914, -0.275801,2.6592,0.045844, + -0.275801,2.6592,0.045844, -0.386161,2.6256,0.064188, -0.371546,2.6256,0.124808, + -0.348105,2.6256,0.18111, -0.248621,2.6592,0.129351, -0.265363,2.6592,0.08914, + -0.265363,2.6592,0.08914, -0.371546,2.6256,0.124808, -0.348105,2.6256,0.18111, + -0.31659,2.6256,0.232342, -0.226113,2.6592,0.165941, -0.248621,2.6592,0.129351, + -0.248621,2.6592,0.129351, -0.348105,2.6256,0.18111, -0.31659,2.6256,0.232342, + -0.277752,2.6256,0.277752, -0.198374,2.6592,0.198374, -0.226113,2.6592,0.165941, + -0.226113,2.6592,0.165941, -0.31659,2.6256,0.232342, -0.277752,2.6256,0.277752, + -0.232342,2.6256,0.31659, -0.165941,2.6592,0.226113, -0.198374,2.6592,0.198374, + -0.198374,2.6592,0.198374, -0.277752,2.6256,0.277752, -0.232342,2.6256,0.31659, + -0.18111,2.6256,0.348105, -0.129351,2.6592,0.248621, -0.165941,2.6592,0.226113, + -0.165941,2.6592,0.226113, -0.232342,2.6256,0.31659, -0.18111,2.6256,0.348105, + -0.124808,2.6256,0.371546, -0.08914,2.6592,0.265363, -0.129351,2.6592,0.248621, + -0.129351,2.6592,0.248621, -0.18111,2.6256,0.348105, -0.124808,2.6256,0.371546, + -0.064188,2.6256,0.386161, -0.045844,2.6592,0.275801, -0.08914,2.6592,0.265363, + -0.08914,2.6592,0.265363, -0.124808,2.6256,0.371546, -0.064188,2.6256,0.386161, + 0,2.6256,0.3912, 0,2.6592,0.2794, -0.045844,2.6592,0.275801, + -0.045844,2.6592,0.275801, -0.064188,2.6256,0.386161, 0,2.6256,0.3912, + -0.519028,2.5974,0.086273, -0.386161,2.6256,0.064188, -0.3912,2.6256,0, + -0.3912,2.6256,0, -0.5258,2.5974,0, -0.519028,2.5974,0.086273, + -0.499384,2.5974,0.167751, -0.371546,2.6256,0.124808, -0.386161,2.6256,0.064188, + -0.386161,2.6256,0.064188, -0.519028,2.5974,0.086273, -0.499384,2.5974,0.167751, + -0.467878,2.5974,0.243424, -0.348105,2.6256,0.18111, -0.371546,2.6256,0.124808, + -0.371546,2.6256,0.124808, -0.499384,2.5974,0.167751, -0.467878,2.5974,0.243424, + -0.425519,2.5974,0.312283, -0.31659,2.6256,0.232342, -0.348105,2.6256,0.18111, + -0.348105,2.6256,0.18111, -0.467878,2.5974,0.243424, -0.425519,2.5974,0.312283, + -0.373318,2.5974,0.373318, -0.277752,2.6256,0.277752, -0.31659,2.6256,0.232342, + -0.31659,2.6256,0.232342, -0.425519,2.5974,0.312283, -0.373318,2.5974,0.373318, + -0.312283,2.5974,0.425519, -0.232342,2.6256,0.31659, -0.277752,2.6256,0.277752, + -0.277752,2.6256,0.277752, -0.373318,2.5974,0.373318, -0.312283,2.5974,0.425519, + -0.243424,2.5974,0.467878, -0.18111,2.6256,0.348105, -0.232342,2.6256,0.31659, + -0.232342,2.6256,0.31659, -0.312283,2.5974,0.425519, -0.243424,2.5974,0.467878, + -0.167751,2.5974,0.499384, -0.124808,2.6256,0.371546, -0.18111,2.6256,0.348105, + -0.18111,2.6256,0.348105, -0.243424,2.5974,0.467878, -0.167751,2.5974,0.499384, + -0.086273,2.5974,0.519028, -0.064188,2.6256,0.386161, -0.124808,2.6256,0.371546, + -0.124808,2.6256,0.371546, -0.167751,2.5974,0.499384, -0.086273,2.5974,0.519028, + 0,2.5974,0.5258, 0,2.6256,0.3912, -0.064188,2.6256,0.386161, + -0.064188,2.6256,0.386161, -0.086273,2.5974,0.519028, 0,2.5974,0.5258, + -0.664924,2.5728,0.110524, -0.519028,2.5974,0.086273, -0.5258,2.5974,0, + -0.5258,2.5974,0, -0.6736,2.5728,0, -0.664924,2.5728,0.110524, + -0.639758,2.5728,0.214905, -0.499384,2.5974,0.167751, -0.519028,2.5974,0.086273, + -0.519028,2.5974,0.086273, -0.664924,2.5728,0.110524, -0.639758,2.5728,0.214905, + -0.599396,2.5728,0.31185, -0.467878,2.5974,0.243424, -0.499384,2.5974,0.167751, + -0.499384,2.5974,0.167751, -0.639758,2.5728,0.214905, -0.599396,2.5728,0.31185, + -0.545131,2.5728,0.400065, -0.425519,2.5974,0.312283, -0.467878,2.5974,0.243424, + -0.467878,2.5974,0.243424, -0.599396,2.5728,0.31185, -0.545131,2.5728,0.400065, + -0.478256,2.5728,0.478256, -0.373318,2.5974,0.373318, -0.425519,2.5974,0.312283, + -0.425519,2.5974,0.312283, -0.545131,2.5728,0.400065, -0.478256,2.5728,0.478256, + -0.400065,2.5728,0.545131, -0.312283,2.5974,0.425519, -0.373318,2.5974,0.373318, + -0.373318,2.5974,0.373318, -0.478256,2.5728,0.478256, -0.400065,2.5728,0.545131, + -0.31185,2.5728,0.599396, -0.243424,2.5974,0.467878, -0.312283,2.5974,0.425519, + -0.312283,2.5974,0.425519, -0.400065,2.5728,0.545131, -0.31185,2.5728,0.599396, + -0.214905,2.5728,0.639758, -0.167751,2.5974,0.499384, -0.243424,2.5974,0.467878, + -0.243424,2.5974,0.467878, -0.31185,2.5728,0.599396, -0.214905,2.5728,0.639758, + -0.110524,2.5728,0.664924, -0.086273,2.5974,0.519028, -0.167751,2.5974,0.499384, + -0.167751,2.5974,0.499384, -0.214905,2.5728,0.639758, -0.110524,2.5728,0.664924, + 0,2.5728,0.6736, 0,2.5974,0.5258, -0.086273,2.5974,0.519028, + -0.086273,2.5974,0.519028, -0.110524,2.5728,0.664924, 0,2.5728,0.6736, + -0.814374,2.55,0.135366, -0.664924,2.5728,0.110524, -0.6736,2.5728,0, + -0.6736,2.5728,0, -0.825,2.55,0, -0.814374,2.55,0.135366, + -0.783552,2.55,0.263208, -0.639758,2.5728,0.214905, -0.664924,2.5728,0.110524, + -0.664924,2.5728,0.110524, -0.814374,2.55,0.135366, -0.783552,2.55,0.263208, + -0.734118,2.55,0.381942, -0.599396,2.5728,0.31185, -0.639758,2.5728,0.214905, + -0.639758,2.5728,0.214905, -0.783552,2.55,0.263208, -0.734118,2.55,0.381942, + -0.667656,2.55,0.489984, -0.545131,2.5728,0.400065, -0.599396,2.5728,0.31185, + -0.599396,2.5728,0.31185, -0.734118,2.55,0.381942, -0.667656,2.55,0.489984, + -0.58575,2.55,0.58575, -0.478256,2.5728,0.478256, -0.545131,2.5728,0.400065, + -0.545131,2.5728,0.400065, -0.667656,2.55,0.489984, -0.58575,2.55,0.58575, + -0.489984,2.55,0.667656, -0.400065,2.5728,0.545131, -0.478256,2.5728,0.478256, + -0.478256,2.5728,0.478256, -0.58575,2.55,0.58575, -0.489984,2.55,0.667656, + -0.381942,2.55,0.734118, -0.31185,2.5728,0.599396, -0.400065,2.5728,0.545131, + -0.400065,2.5728,0.545131, -0.489984,2.55,0.667656, -0.381942,2.55,0.734118, + -0.263208,2.55,0.783552, -0.214905,2.5728,0.639758, -0.31185,2.5728,0.599396, + -0.31185,2.5728,0.599396, -0.381942,2.55,0.734118, -0.263208,2.55,0.783552, + -0.135366,2.55,0.814374, -0.110524,2.5728,0.664924, -0.214905,2.5728,0.639758, + -0.214905,2.5728,0.639758, -0.263208,2.55,0.783552, -0.135366,2.55,0.814374, + 0,2.55,0.825, 0,2.5728,0.6736, -0.110524,2.5728,0.664924, + -0.110524,2.5728,0.664924, -0.135366,2.55,0.814374, 0,2.55,0.825, + -0.957901,2.5272,0.159223, -0.814374,2.55,0.135366, -0.825,2.55,0, + -0.825,2.55,0, -0.9704,2.5272,0, -0.957901,2.5272,0.159223, + -0.921647,2.5272,0.309596, -0.783552,2.55,0.263208, -0.814374,2.55,0.135366, + -0.814374,2.55,0.135366, -0.957901,2.5272,0.159223, -0.921647,2.5272,0.309596, + -0.863501,2.5272,0.449256, -0.734118,2.55,0.381942, -0.783552,2.55,0.263208, + -0.783552,2.55,0.263208, -0.921647,2.5272,0.309596, -0.863501,2.5272,0.449256, + -0.785325,2.5272,0.57634, -0.667656,2.55,0.489984, -0.734118,2.55,0.381942, + -0.734118,2.55,0.381942, -0.863501,2.5272,0.449256, -0.785325,2.5272,0.57634, + -0.688984,2.5272,0.688984, -0.58575,2.55,0.58575, -0.667656,2.55,0.489984, + -0.667656,2.55,0.489984, -0.785325,2.5272,0.57634, -0.688984,2.5272,0.688984, + -0.57634,2.5272,0.785325, -0.489984,2.55,0.667656, -0.58575,2.55,0.58575, + -0.58575,2.55,0.58575, -0.688984,2.5272,0.688984, -0.57634,2.5272,0.785325, + -0.449256,2.5272,0.863501, -0.381942,2.55,0.734118, -0.489984,2.55,0.667656, + -0.489984,2.55,0.667656, -0.57634,2.5272,0.785325, -0.449256,2.5272,0.863501, + -0.309596,2.5272,0.921647, -0.263208,2.55,0.783552, -0.381942,2.55,0.734118, + -0.381942,2.55,0.734118, -0.449256,2.5272,0.863501, -0.309596,2.5272,0.921647, + -0.159223,2.5272,0.957901, -0.135366,2.55,0.814374, -0.263208,2.55,0.783552, + -0.263208,2.55,0.783552, -0.309596,2.5272,0.921647, -0.159223,2.5272,0.957901, + 0,2.5272,0.9704, 0,2.55,0.825, -0.135366,2.55,0.814374, + -0.135366,2.55,0.814374, -0.159223,2.5272,0.957901, 0,2.5272,0.9704, + -1.086029,2.5026,0.180521, -0.957901,2.5272,0.159223, -0.9704,2.5272,0, + -0.9704,2.5272,0, -1.1002,2.5026,0, -1.086029,2.5026,0.180521, + -1.044926,2.5026,0.351008, -0.921647,2.5272,0.309596, -0.957901,2.5272,0.159223, + -0.957901,2.5272,0.159223, -1.086029,2.5026,0.180521, -1.044926,2.5026,0.351008, + -0.979002,2.5026,0.509349, -0.863501,2.5272,0.449256, -0.921647,2.5272,0.309596, + -0.921647,2.5272,0.309596, -1.044926,2.5026,0.351008, -0.979002,2.5026,0.509349, + -0.89037,2.5026,0.653431, -0.785325,2.5272,0.57634, -0.863501,2.5272,0.449256, + -0.863501,2.5272,0.449256, -0.979002,2.5026,0.509349, -0.89037,2.5026,0.653431, + -0.781142,2.5026,0.781142, -0.688984,2.5272,0.688984, -0.785325,2.5272,0.57634, + -0.785325,2.5272,0.57634, -0.89037,2.5026,0.653431, -0.781142,2.5026,0.781142, + -0.653431,2.5026,0.89037, -0.57634,2.5272,0.785325, -0.688984,2.5272,0.688984, + -0.688984,2.5272,0.688984, -0.781142,2.5026,0.781142, -0.653431,2.5026,0.89037, + -0.509349,2.5026,0.979002, -0.449256,2.5272,0.863501, -0.57634,2.5272,0.785325, + -0.57634,2.5272,0.785325, -0.653431,2.5026,0.89037, -0.509349,2.5026,0.979002, + -0.351008,2.5026,1.044926, -0.309596,2.5272,0.921647, -0.449256,2.5272,0.863501, + -0.449256,2.5272,0.863501, -0.509349,2.5026,0.979002, -0.351008,2.5026,1.044926, + -0.180521,2.5026,1.086029, -0.159223,2.5272,0.957901, -0.309596,2.5272,0.921647, + -0.309596,2.5272,0.921647, -0.351008,2.5026,1.044926, -0.180521,2.5026,1.086029, + 0,2.5026,1.1002, 0,2.5272,0.9704, -0.159223,2.5272,0.957901, + -0.159223,2.5272,0.957901, -0.180521,2.5026,1.086029, 0,2.5026,1.1002, + -1.189282,2.4744,0.197684, -1.086029,2.5026,0.180521, -1.1002,2.5026,0, + -1.1002,2.5026,0, -1.2048,2.4744,0, -1.189282,2.4744,0.197684, + -1.144271,2.4744,0.384379, -1.044926,2.5026,0.351008, -1.086029,2.5026,0.180521, + -1.086029,2.5026,0.180521, -1.189282,2.4744,0.197684, -1.144271,2.4744,0.384379, + -1.072079,2.4744,0.557774, -0.979002,2.5026,0.509349, -1.044926,2.5026,0.351008, + -1.044926,2.5026,0.351008, -1.144271,2.4744,0.384379, -1.072079,2.4744,0.557774, + -0.975021,2.4744,0.715555, -0.89037,2.5026,0.653431, -0.979002,2.5026,0.509349, + -0.979002,2.5026,0.509349, -1.072079,2.4744,0.557774, -0.975021,2.4744,0.715555, + -0.855408,2.4744,0.855408, -0.781142,2.5026,0.781142, -0.89037,2.5026,0.653431, + -0.89037,2.5026,0.653431, -0.975021,2.4744,0.715555, -0.855408,2.4744,0.855408, + -0.715555,2.4744,0.975021, -0.653431,2.5026,0.89037, -0.781142,2.5026,0.781142, + -0.781142,2.5026,0.781142, -0.855408,2.4744,0.855408, -0.715555,2.4744,0.975021, + -0.557774,2.4744,1.072079, -0.509349,2.5026,0.979002, -0.653431,2.5026,0.89037, + -0.653431,2.5026,0.89037, -0.715555,2.4744,0.975021, -0.557774,2.4744,1.072079, + -0.384379,2.4744,1.144271, -0.351008,2.5026,1.044926, -0.509349,2.5026,0.979002, + -0.509349,2.5026,0.979002, -0.557774,2.4744,1.072079, -0.384379,2.4744,1.144271, + -0.197684,2.4744,1.189282, -0.180521,2.5026,1.086029, -0.351008,2.5026,1.044926, + -0.351008,2.5026,1.044926, -0.384379,2.4744,1.144271, -0.197684,2.4744,1.189282, + 0,2.4744,1.2048, 0,2.5026,1.1002, -0.180521,2.5026,1.086029, + -0.180521,2.5026,1.086029, -0.197684,2.4744,1.189282, 0,2.4744,1.2048, + -1.258183,2.4408,0.209136, -1.189282,2.4744,0.197684, -1.2048,2.4744,0, + -1.2048,2.4744,0, -1.2746,2.4408,0, -1.258183,2.4408,0.209136, + -1.210564,2.4408,0.406648, -1.144271,2.4744,0.384379, -1.189282,2.4744,0.197684, + -1.189282,2.4744,0.197684, -1.258183,2.4408,0.209136, -1.210564,2.4408,0.406648, + -1.13419,2.4408,0.590089, -1.072079,2.4744,0.557774, -1.144271,2.4744,0.384379, + -1.144271,2.4744,0.384379, -1.210564,2.4408,0.406648, -1.13419,2.4408,0.590089, + -1.031508,2.4408,0.75701, -0.975021,2.4744,0.715555, -1.072079,2.4744,0.557774, + -1.072079,2.4744,0.557774, -1.13419,2.4408,0.590089, -1.031508,2.4408,0.75701, + -0.904966,2.4408,0.904966, -0.855408,2.4744,0.855408, -0.975021,2.4744,0.715555, + -0.975021,2.4744,0.715555, -1.031508,2.4408,0.75701, -0.904966,2.4408,0.904966, + -0.75701,2.4408,1.031508, -0.715555,2.4744,0.975021, -0.855408,2.4744,0.855408, + -0.855408,2.4744,0.855408, -0.904966,2.4408,0.904966, -0.75701,2.4408,1.031508, + -0.590089,2.4408,1.13419, -0.557774,2.4744,1.072079, -0.715555,2.4744,0.975021, + -0.715555,2.4744,0.975021, -0.75701,2.4408,1.031508, -0.590089,2.4408,1.13419, + -0.406648,2.4408,1.210564, -0.384379,2.4744,1.144271, -0.557774,2.4744,1.072079, + -0.557774,2.4744,1.072079, -0.590089,2.4408,1.13419, -0.406648,2.4408,1.210564, + -0.209136,2.4408,1.258183, -0.197684,2.4744,1.189282, -0.384379,2.4744,1.144271, + -0.384379,2.4744,1.144271, -0.406648,2.4408,1.210564, -0.209136,2.4408,1.258183, + 0,2.4408,1.2746, 0,2.4744,1.2048, -0.197684,2.4744,1.189282, + -0.197684,2.4744,1.189282, -0.209136,2.4408,1.258183, 0,2.4408,1.2746, + -1.283256,2.4,0.213304, -1.258183,2.4408,0.209136, -1.2746,2.4408,0, + -1.2746,2.4408,0, -1.3,2.4,0, -1.283256,2.4,0.213304, + -1.234688,2.4,0.414752, -1.210564,2.4408,0.406648, -1.258183,2.4408,0.209136, + -1.258183,2.4408,0.209136, -1.283256,2.4,0.213304, -1.234688,2.4,0.414752, + -1.156792,2.4,0.601848, -1.13419,2.4408,0.590089, -1.210564,2.4408,0.406648, + -1.210564,2.4408,0.406648, -1.234688,2.4,0.414752, -1.156792,2.4,0.601848, + -1.052064,2.4,0.772096, -1.031508,2.4408,0.75701, -1.13419,2.4408,0.590089, + -1.13419,2.4408,0.590089, -1.156792,2.4,0.601848, -1.052064,2.4,0.772096, + -0.923,2.4,0.923, -0.904966,2.4408,0.904966, -1.031508,2.4408,0.75701, + -1.031508,2.4408,0.75701, -1.052064,2.4,0.772096, -0.923,2.4,0.923, + -0.772096,2.4,1.052064, -0.75701,2.4408,1.031508, -0.904966,2.4408,0.904966, + -0.904966,2.4408,0.904966, -0.923,2.4,0.923, -0.772096,2.4,1.052064, + -0.601848,2.4,1.156792, -0.590089,2.4408,1.13419, -0.75701,2.4408,1.031508, + -0.75701,2.4408,1.031508, -0.772096,2.4,1.052064, -0.601848,2.4,1.156792, + -0.414752,2.4,1.234688, -0.406648,2.4408,1.210564, -0.590089,2.4408,1.13419, + -0.590089,2.4408,1.13419, -0.601848,2.4,1.156792, -0.414752,2.4,1.234688, + -0.213304,2.4,1.283256, -0.209136,2.4408,1.258183, -0.406648,2.4408,1.210564, + -0.406648,2.4408,1.210564, -0.414752,2.4,1.234688, -0.213304,2.4,1.283256, + 0,2.4,1.3, 0,2.4408,1.2746, -0.209136,2.4408,1.258183, + -0.209136,2.4408,1.258183, -0.213304,2.4,1.283256, 0,2.4,1.3, + 0.045844,2.6592,0.275801, 0.032816,2.7,0.197424, 0,2.7,0.2, + 0,2.7,0.2, 0,2.6592,0.2794, 0.045844,2.6592,0.275801, + 0.08914,2.6592,0.265363, 0.063808,2.7,0.189952, 0.032816,2.7,0.197424, + 0.032816,2.7,0.197424, 0.045844,2.6592,0.275801, 0.08914,2.6592,0.265363, + 0.129351,2.6592,0.248621, 0.092592,2.7,0.177968, 0.063808,2.7,0.189952, + 0.063808,2.7,0.189952, 0.08914,2.6592,0.265363, 0.129351,2.6592,0.248621, + 0.165941,2.6592,0.226113, 0.118784,2.7,0.161856, 0.092592,2.7,0.177968, + 0.092592,2.7,0.177968, 0.129351,2.6592,0.248621, 0.165941,2.6592,0.226113, + 0.198374,2.6592,0.198374, 0.142,2.7,0.142, 0.118784,2.7,0.161856, + 0.118784,2.7,0.161856, 0.165941,2.6592,0.226113, 0.198374,2.6592,0.198374, + 0.226113,2.6592,0.165941, 0.161856,2.7,0.118784, 0.142,2.7,0.142, + 0.142,2.7,0.142, 0.198374,2.6592,0.198374, 0.226113,2.6592,0.165941, + 0.248621,2.6592,0.129351, 0.177968,2.7,0.092592, 0.161856,2.7,0.118784, + 0.161856,2.7,0.118784, 0.226113,2.6592,0.165941, 0.248621,2.6592,0.129351, + 0.265363,2.6592,0.08914, 0.189952,2.7,0.063808, 0.177968,2.7,0.092592, + 0.177968,2.7,0.092592, 0.248621,2.6592,0.129351, 0.265363,2.6592,0.08914, + 0.275801,2.6592,0.045844, 0.197424,2.7,0.032816, 0.189952,2.7,0.063808, + 0.189952,2.7,0.063808, 0.265363,2.6592,0.08914, 0.275801,2.6592,0.045844, + 0.2794,2.6592,0, 0.2,2.7,0, 0.197424,2.7,0.032816, + 0.197424,2.7,0.032816, 0.275801,2.6592,0.045844, 0.2794,2.6592,0, + 0.064188,2.6256,0.386161, 0.045844,2.6592,0.275801, 0,2.6592,0.2794, + 0,2.6592,0.2794, 0,2.6256,0.3912, 0.064188,2.6256,0.386161, + 0.124808,2.6256,0.371546, 0.08914,2.6592,0.265363, 0.045844,2.6592,0.275801, + 0.045844,2.6592,0.275801, 0.064188,2.6256,0.386161, 0.124808,2.6256,0.371546, + 0.18111,2.6256,0.348105, 0.129351,2.6592,0.248621, 0.08914,2.6592,0.265363, + 0.08914,2.6592,0.265363, 0.124808,2.6256,0.371546, 0.18111,2.6256,0.348105, + 0.232342,2.6256,0.31659, 0.165941,2.6592,0.226113, 0.129351,2.6592,0.248621, + 0.129351,2.6592,0.248621, 0.18111,2.6256,0.348105, 0.232342,2.6256,0.31659, + 0.277752,2.6256,0.277752, 0.198374,2.6592,0.198374, 0.165941,2.6592,0.226113, + 0.165941,2.6592,0.226113, 0.232342,2.6256,0.31659, 0.277752,2.6256,0.277752, + 0.31659,2.6256,0.232342, 0.226113,2.6592,0.165941, 0.198374,2.6592,0.198374, + 0.198374,2.6592,0.198374, 0.277752,2.6256,0.277752, 0.31659,2.6256,0.232342, + 0.348105,2.6256,0.18111, 0.248621,2.6592,0.129351, 0.226113,2.6592,0.165941, + 0.226113,2.6592,0.165941, 0.31659,2.6256,0.232342, 0.348105,2.6256,0.18111, + 0.371546,2.6256,0.124808, 0.265363,2.6592,0.08914, 0.248621,2.6592,0.129351, + 0.248621,2.6592,0.129351, 0.348105,2.6256,0.18111, 0.371546,2.6256,0.124808, + 0.386161,2.6256,0.064188, 0.275801,2.6592,0.045844, 0.265363,2.6592,0.08914, + 0.265363,2.6592,0.08914, 0.371546,2.6256,0.124808, 0.386161,2.6256,0.064188, + 0.3912,2.6256,0, 0.2794,2.6592,0, 0.275801,2.6592,0.045844, + 0.275801,2.6592,0.045844, 0.386161,2.6256,0.064188, 0.3912,2.6256,0, + 0.086273,2.5974,0.519028, 0.064188,2.6256,0.386161, 0,2.6256,0.3912, + 0,2.6256,0.3912, 0,2.5974,0.5258, 0.086273,2.5974,0.519028, + 0.167751,2.5974,0.499384, 0.124808,2.6256,0.371546, 0.064188,2.6256,0.386161, + 0.064188,2.6256,0.386161, 0.086273,2.5974,0.519028, 0.167751,2.5974,0.499384, + 0.243424,2.5974,0.467878, 0.18111,2.6256,0.348105, 0.124808,2.6256,0.371546, + 0.124808,2.6256,0.371546, 0.167751,2.5974,0.499384, 0.243424,2.5974,0.467878, + 0.312283,2.5974,0.425519, 0.232342,2.6256,0.31659, 0.18111,2.6256,0.348105, + 0.18111,2.6256,0.348105, 0.243424,2.5974,0.467878, 0.312283,2.5974,0.425519, + 0.373318,2.5974,0.373318, 0.277752,2.6256,0.277752, 0.232342,2.6256,0.31659, + 0.232342,2.6256,0.31659, 0.312283,2.5974,0.425519, 0.373318,2.5974,0.373318, + 0.425519,2.5974,0.312283, 0.31659,2.6256,0.232342, 0.277752,2.6256,0.277752, + 0.277752,2.6256,0.277752, 0.373318,2.5974,0.373318, 0.425519,2.5974,0.312283, + 0.467878,2.5974,0.243424, 0.348105,2.6256,0.18111, 0.31659,2.6256,0.232342, + 0.31659,2.6256,0.232342, 0.425519,2.5974,0.312283, 0.467878,2.5974,0.243424, + 0.499384,2.5974,0.167751, 0.371546,2.6256,0.124808, 0.348105,2.6256,0.18111, + 0.348105,2.6256,0.18111, 0.467878,2.5974,0.243424, 0.499384,2.5974,0.167751, + 0.519028,2.5974,0.086273, 0.386161,2.6256,0.064188, 0.371546,2.6256,0.124808, + 0.371546,2.6256,0.124808, 0.499384,2.5974,0.167751, 0.519028,2.5974,0.086273, + 0.5258,2.5974,0, 0.3912,2.6256,0, 0.386161,2.6256,0.064188, + 0.386161,2.6256,0.064188, 0.519028,2.5974,0.086273, 0.5258,2.5974,0, + 0.110524,2.5728,0.664924, 0.086273,2.5974,0.519028, 0,2.5974,0.5258, + 0,2.5974,0.5258, 0,2.5728,0.6736, 0.110524,2.5728,0.664924, + 0.214905,2.5728,0.639758, 0.167751,2.5974,0.499384, 0.086273,2.5974,0.519028, + 0.086273,2.5974,0.519028, 0.110524,2.5728,0.664924, 0.214905,2.5728,0.639758, + 0.31185,2.5728,0.599396, 0.243424,2.5974,0.467878, 0.167751,2.5974,0.499384, + 0.167751,2.5974,0.499384, 0.214905,2.5728,0.639758, 0.31185,2.5728,0.599396, + 0.400065,2.5728,0.545131, 0.312283,2.5974,0.425519, 0.243424,2.5974,0.467878, + 0.243424,2.5974,0.467878, 0.31185,2.5728,0.599396, 0.400065,2.5728,0.545131, + 0.478256,2.5728,0.478256, 0.373318,2.5974,0.373318, 0.312283,2.5974,0.425519, + 0.312283,2.5974,0.425519, 0.400065,2.5728,0.545131, 0.478256,2.5728,0.478256, + 0.545131,2.5728,0.400065, 0.425519,2.5974,0.312283, 0.373318,2.5974,0.373318, + 0.373318,2.5974,0.373318, 0.478256,2.5728,0.478256, 0.545131,2.5728,0.400065, + 0.599396,2.5728,0.31185, 0.467878,2.5974,0.243424, 0.425519,2.5974,0.312283, + 0.425519,2.5974,0.312283, 0.545131,2.5728,0.400065, 0.599396,2.5728,0.31185, + 0.639758,2.5728,0.214905, 0.499384,2.5974,0.167751, 0.467878,2.5974,0.243424, + 0.467878,2.5974,0.243424, 0.599396,2.5728,0.31185, 0.639758,2.5728,0.214905, + 0.664924,2.5728,0.110524, 0.519028,2.5974,0.086273, 0.499384,2.5974,0.167751, + 0.499384,2.5974,0.167751, 0.639758,2.5728,0.214905, 0.664924,2.5728,0.110524, + 0.6736,2.5728,0, 0.5258,2.5974,0, 0.519028,2.5974,0.086273, + 0.519028,2.5974,0.086273, 0.664924,2.5728,0.110524, 0.6736,2.5728,0, + 0.135366,2.55,0.814374, 0.110524,2.5728,0.664924, 0,2.5728,0.6736, + 0,2.5728,0.6736, 0,2.55,0.825, 0.135366,2.55,0.814374, + 0.263208,2.55,0.783552, 0.214905,2.5728,0.639758, 0.110524,2.5728,0.664924, + 0.110524,2.5728,0.664924, 0.135366,2.55,0.814374, 0.263208,2.55,0.783552, + 0.381942,2.55,0.734118, 0.31185,2.5728,0.599396, 0.214905,2.5728,0.639758, + 0.214905,2.5728,0.639758, 0.263208,2.55,0.783552, 0.381942,2.55,0.734118, + 0.489984,2.55,0.667656, 0.400065,2.5728,0.545131, 0.31185,2.5728,0.599396, + 0.31185,2.5728,0.599396, 0.381942,2.55,0.734118, 0.489984,2.55,0.667656, + 0.58575,2.55,0.58575, 0.478256,2.5728,0.478256, 0.400065,2.5728,0.545131, + 0.400065,2.5728,0.545131, 0.489984,2.55,0.667656, 0.58575,2.55,0.58575, + 0.667656,2.55,0.489984, 0.545131,2.5728,0.400065, 0.478256,2.5728,0.478256, + 0.478256,2.5728,0.478256, 0.58575,2.55,0.58575, 0.667656,2.55,0.489984, + 0.734118,2.55,0.381942, 0.599396,2.5728,0.31185, 0.545131,2.5728,0.400065, + 0.545131,2.5728,0.400065, 0.667656,2.55,0.489984, 0.734118,2.55,0.381942, + 0.783552,2.55,0.263208, 0.639758,2.5728,0.214905, 0.599396,2.5728,0.31185, + 0.599396,2.5728,0.31185, 0.734118,2.55,0.381942, 0.783552,2.55,0.263208, + 0.814374,2.55,0.135366, 0.664924,2.5728,0.110524, 0.639758,2.5728,0.214905, + 0.639758,2.5728,0.214905, 0.783552,2.55,0.263208, 0.814374,2.55,0.135366, + 0.825,2.55,0, 0.6736,2.5728,0, 0.664924,2.5728,0.110524, + 0.664924,2.5728,0.110524, 0.814374,2.55,0.135366, 0.825,2.55,0, + 0.159223,2.5272,0.957901, 0.135366,2.55,0.814374, 0,2.55,0.825, + 0,2.55,0.825, 0,2.5272,0.9704, 0.159223,2.5272,0.957901, + 0.309596,2.5272,0.921647, 0.263208,2.55,0.783552, 0.135366,2.55,0.814374, + 0.135366,2.55,0.814374, 0.159223,2.5272,0.957901, 0.309596,2.5272,0.921647, + 0.449256,2.5272,0.863501, 0.381942,2.55,0.734118, 0.263208,2.55,0.783552, + 0.263208,2.55,0.783552, 0.309596,2.5272,0.921647, 0.449256,2.5272,0.863501, + 0.57634,2.5272,0.785325, 0.489984,2.55,0.667656, 0.381942,2.55,0.734118, + 0.381942,2.55,0.734118, 0.449256,2.5272,0.863501, 0.57634,2.5272,0.785325, + 0.688984,2.5272,0.688984, 0.58575,2.55,0.58575, 0.489984,2.55,0.667656, + 0.489984,2.55,0.667656, 0.57634,2.5272,0.785325, 0.688984,2.5272,0.688984, + 0.785325,2.5272,0.57634, 0.667656,2.55,0.489984, 0.58575,2.55,0.58575, + 0.58575,2.55,0.58575, 0.688984,2.5272,0.688984, 0.785325,2.5272,0.57634, + 0.863501,2.5272,0.449256, 0.734118,2.55,0.381942, 0.667656,2.55,0.489984, + 0.667656,2.55,0.489984, 0.785325,2.5272,0.57634, 0.863501,2.5272,0.449256, + 0.921647,2.5272,0.309596, 0.783552,2.55,0.263208, 0.734118,2.55,0.381942, + 0.734118,2.55,0.381942, 0.863501,2.5272,0.449256, 0.921647,2.5272,0.309596, + 0.957901,2.5272,0.159223, 0.814374,2.55,0.135366, 0.783552,2.55,0.263208, + 0.783552,2.55,0.263208, 0.921647,2.5272,0.309596, 0.957901,2.5272,0.159223, + 0.9704,2.5272,0, 0.825,2.55,0, 0.814374,2.55,0.135366, + 0.814374,2.55,0.135366, 0.957901,2.5272,0.159223, 0.9704,2.5272,0, + 0.180521,2.5026,1.086029, 0.159223,2.5272,0.957901, 0,2.5272,0.9704, + 0,2.5272,0.9704, 0,2.5026,1.1002, 0.180521,2.5026,1.086029, + 0.351008,2.5026,1.044926, 0.309596,2.5272,0.921647, 0.159223,2.5272,0.957901, + 0.159223,2.5272,0.957901, 0.180521,2.5026,1.086029, 0.351008,2.5026,1.044926, + 0.509349,2.5026,0.979002, 0.449256,2.5272,0.863501, 0.309596,2.5272,0.921647, + 0.309596,2.5272,0.921647, 0.351008,2.5026,1.044926, 0.509349,2.5026,0.979002, + 0.653431,2.5026,0.89037, 0.57634,2.5272,0.785325, 0.449256,2.5272,0.863501, + 0.449256,2.5272,0.863501, 0.509349,2.5026,0.979002, 0.653431,2.5026,0.89037, + 0.781142,2.5026,0.781142, 0.688984,2.5272,0.688984, 0.57634,2.5272,0.785325, + 0.57634,2.5272,0.785325, 0.653431,2.5026,0.89037, 0.781142,2.5026,0.781142, + 0.89037,2.5026,0.653431, 0.785325,2.5272,0.57634, 0.688984,2.5272,0.688984, + 0.688984,2.5272,0.688984, 0.781142,2.5026,0.781142, 0.89037,2.5026,0.653431, + 0.979002,2.5026,0.509349, 0.863501,2.5272,0.449256, 0.785325,2.5272,0.57634, + 0.785325,2.5272,0.57634, 0.89037,2.5026,0.653431, 0.979002,2.5026,0.509349, + 1.044926,2.5026,0.351008, 0.921647,2.5272,0.309596, 0.863501,2.5272,0.449256, + 0.863501,2.5272,0.449256, 0.979002,2.5026,0.509349, 1.044926,2.5026,0.351008, + 1.086029,2.5026,0.180521, 0.957901,2.5272,0.159223, 0.921647,2.5272,0.309596, + 0.921647,2.5272,0.309596, 1.044926,2.5026,0.351008, 1.086029,2.5026,0.180521, + 1.1002,2.5026,0, 0.9704,2.5272,0, 0.957901,2.5272,0.159223, + 0.957901,2.5272,0.159223, 1.086029,2.5026,0.180521, 1.1002,2.5026,0, + 0.197684,2.4744,1.189282, 0.180521,2.5026,1.086029, 0,2.5026,1.1002, + 0,2.5026,1.1002, 0,2.4744,1.2048, 0.197684,2.4744,1.189282, + 0.384379,2.4744,1.144271, 0.351008,2.5026,1.044926, 0.180521,2.5026,1.086029, + 0.180521,2.5026,1.086029, 0.197684,2.4744,1.189282, 0.384379,2.4744,1.144271, + 0.557774,2.4744,1.072079, 0.509349,2.5026,0.979002, 0.351008,2.5026,1.044926, + 0.351008,2.5026,1.044926, 0.384379,2.4744,1.144271, 0.557774,2.4744,1.072079, + 0.715555,2.4744,0.975021, 0.653431,2.5026,0.89037, 0.509349,2.5026,0.979002, + 0.509349,2.5026,0.979002, 0.557774,2.4744,1.072079, 0.715555,2.4744,0.975021, + 0.855408,2.4744,0.855408, 0.781142,2.5026,0.781142, 0.653431,2.5026,0.89037, + 0.653431,2.5026,0.89037, 0.715555,2.4744,0.975021, 0.855408,2.4744,0.855408, + 0.975021,2.4744,0.715555, 0.89037,2.5026,0.653431, 0.781142,2.5026,0.781142, + 0.781142,2.5026,0.781142, 0.855408,2.4744,0.855408, 0.975021,2.4744,0.715555, + 1.072079,2.4744,0.557774, 0.979002,2.5026,0.509349, 0.89037,2.5026,0.653431, + 0.89037,2.5026,0.653431, 0.975021,2.4744,0.715555, 1.072079,2.4744,0.557774, + 1.144271,2.4744,0.384379, 1.044926,2.5026,0.351008, 0.979002,2.5026,0.509349, + 0.979002,2.5026,0.509349, 1.072079,2.4744,0.557774, 1.144271,2.4744,0.384379, + 1.189282,2.4744,0.197684, 1.086029,2.5026,0.180521, 1.044926,2.5026,0.351008, + 1.044926,2.5026,0.351008, 1.144271,2.4744,0.384379, 1.189282,2.4744,0.197684, + 1.2048,2.4744,0, 1.1002,2.5026,0, 1.086029,2.5026,0.180521, + 1.086029,2.5026,0.180521, 1.189282,2.4744,0.197684, 1.2048,2.4744,0, + 0.209136,2.4408,1.258183, 0.197684,2.4744,1.189282, 0,2.4744,1.2048, + 0,2.4744,1.2048, 0,2.4408,1.2746, 0.209136,2.4408,1.258183, + 0.406648,2.4408,1.210564, 0.384379,2.4744,1.144271, 0.197684,2.4744,1.189282, + 0.197684,2.4744,1.189282, 0.209136,2.4408,1.258183, 0.406648,2.4408,1.210564, + 0.590089,2.4408,1.13419, 0.557774,2.4744,1.072079, 0.384379,2.4744,1.144271, + 0.384379,2.4744,1.144271, 0.406648,2.4408,1.210564, 0.590089,2.4408,1.13419, + 0.75701,2.4408,1.031508, 0.715555,2.4744,0.975021, 0.557774,2.4744,1.072079, + 0.557774,2.4744,1.072079, 0.590089,2.4408,1.13419, 0.75701,2.4408,1.031508, + 0.904966,2.4408,0.904966, 0.855408,2.4744,0.855408, 0.715555,2.4744,0.975021, + 0.715555,2.4744,0.975021, 0.75701,2.4408,1.031508, 0.904966,2.4408,0.904966, + 1.031508,2.4408,0.75701, 0.975021,2.4744,0.715555, 0.855408,2.4744,0.855408, + 0.855408,2.4744,0.855408, 0.904966,2.4408,0.904966, 1.031508,2.4408,0.75701, + 1.13419,2.4408,0.590089, 1.072079,2.4744,0.557774, 0.975021,2.4744,0.715555, + 0.975021,2.4744,0.715555, 1.031508,2.4408,0.75701, 1.13419,2.4408,0.590089, + 1.210564,2.4408,0.406648, 1.144271,2.4744,0.384379, 1.072079,2.4744,0.557774, + 1.072079,2.4744,0.557774, 1.13419,2.4408,0.590089, 1.210564,2.4408,0.406648, + 1.258183,2.4408,0.209136, 1.189282,2.4744,0.197684, 1.144271,2.4744,0.384379, + 1.144271,2.4744,0.384379, 1.210564,2.4408,0.406648, 1.258183,2.4408,0.209136, + 1.2746,2.4408,0, 1.2048,2.4744,0, 1.189282,2.4744,0.197684, + 1.189282,2.4744,0.197684, 1.258183,2.4408,0.209136, 1.2746,2.4408,0, + 0.213304,2.4,1.283256, 0.209136,2.4408,1.258183, 0,2.4408,1.2746, + 0,2.4408,1.2746, 0,2.4,1.3, 0.213304,2.4,1.283256, + 0.414752,2.4,1.234688, 0.406648,2.4408,1.210564, 0.209136,2.4408,1.258183, + 0.209136,2.4408,1.258183, 0.213304,2.4,1.283256, 0.414752,2.4,1.234688, + 0.601848,2.4,1.156792, 0.590089,2.4408,1.13419, 0.406648,2.4408,1.210564, + 0.406648,2.4408,1.210564, 0.414752,2.4,1.234688, 0.601848,2.4,1.156792, + 0.772096,2.4,1.052064, 0.75701,2.4408,1.031508, 0.590089,2.4408,1.13419, + 0.590089,2.4408,1.13419, 0.601848,2.4,1.156792, 0.772096,2.4,1.052064, + 0.923,2.4,0.923, 0.904966,2.4408,0.904966, 0.75701,2.4408,1.031508, + 0.75701,2.4408,1.031508, 0.772096,2.4,1.052064, 0.923,2.4,0.923, + 1.052064,2.4,0.772096, 1.031508,2.4408,0.75701, 0.904966,2.4408,0.904966, + 0.904966,2.4408,0.904966, 0.923,2.4,0.923, 1.052064,2.4,0.772096, + 1.156792,2.4,0.601848, 1.13419,2.4408,0.590089, 1.031508,2.4408,0.75701, + 1.031508,2.4408,0.75701, 1.052064,2.4,0.772096, 1.156792,2.4,0.601848, + 1.234688,2.4,0.414752, 1.210564,2.4408,0.406648, 1.13419,2.4408,0.590089, + 1.13419,2.4408,0.590089, 1.156792,2.4,0.601848, 1.234688,2.4,0.414752, + 1.283256,2.4,0.213304, 1.258183,2.4408,0.209136, 1.210564,2.4408,0.406648, + 1.210564,2.4408,0.406648, 1.234688,2.4,0.414752, 1.283256,2.4,0.213304, + 1.3,2.4,0, 1.2746,2.4408,0, 1.258183,2.4408,0.209136, + 1.258183,2.4408,0.209136, 1.283256,2.4,0.213304, 1.3,2.4,0, + 0,0,0, 0.388275,0.002175,0, 0.383274,0.002175,0.063708, + 0,0,0, 0.383274,0.002175,0.063708, 0.368768,0.002175,0.123875, + 0,0,0, 0.368768,0.002175,0.123875, 0.345503,0.002175,0.179756, + 0,0,0, 0.345503,0.002175,0.179756, 0.314223,0.002175,0.230604, + 0,0,0, 0.314223,0.002175,0.230604, 0.275675,0.002175,0.275675, + 0,0,0, 0.275675,0.002175,0.275675, 0.230604,0.002175,0.314223, + 0,0,0, 0.230604,0.002175,0.314223, 0.179756,0.002175,0.345503, + 0,0,0, 0.179756,0.002175,0.345503, 0.123875,0.002175,0.368768, + 0,0,0, 0.123875,0.002175,0.368768, 0.063708,0.002175,0.383274, + 0,0,0, 0.063708,0.002175,0.383274, 0,0.002175,0.388275, + 0.694143,0.0084,0.115381, 0.383274,0.002175,0.063708, 0.388275,0.002175,0, + 0.388275,0.002175,0, 0.7032,0.0084,0, 0.694143,0.0084,0.115381, + 0.667871,0.0084,0.224349, 0.368768,0.002175,0.123875, 0.383274,0.002175,0.063708, + 0.383274,0.002175,0.063708, 0.694143,0.0084,0.115381, 0.667871,0.0084,0.224349, + 0.625735,0.0084,0.325553, 0.345503,0.002175,0.179756, 0.368768,0.002175,0.123875, + 0.368768,0.002175,0.123875, 0.667871,0.0084,0.224349, 0.625735,0.0084,0.325553, + 0.569086,0.0084,0.417645, 0.314223,0.002175,0.230604, 0.345503,0.002175,0.179756, + 0.345503,0.002175,0.179756, 0.625735,0.0084,0.325553, 0.569086,0.0084,0.417645, + 0.499272,0.0084,0.499272, 0.275675,0.002175,0.275675, 0.314223,0.002175,0.230604, + 0.314223,0.002175,0.230604, 0.569086,0.0084,0.417645, 0.499272,0.0084,0.499272, + 0.417645,0.0084,0.569086, 0.230604,0.002175,0.314223, 0.275675,0.002175,0.275675, + 0.275675,0.002175,0.275675, 0.499272,0.0084,0.499272, 0.417645,0.0084,0.569086, + 0.325553,0.0084,0.625735, 0.179756,0.002175,0.345503, 0.230604,0.002175,0.314223, + 0.230604,0.002175,0.314223, 0.417645,0.0084,0.569086, 0.325553,0.0084,0.625735, + 0.224349,0.0084,0.667871, 0.123875,0.002175,0.368768, 0.179756,0.002175,0.345503, + 0.179756,0.002175,0.345503, 0.325553,0.0084,0.625735, 0.224349,0.0084,0.667871, + 0.115381,0.0084,0.694143, 0.063708,0.002175,0.383274, 0.123875,0.002175,0.368768, + 0.123875,0.002175,0.368768, 0.224349,0.0084,0.667871, 0.115381,0.0084,0.694143, + 0,0.0084,0.7032, 0,0.002175,0.388275, 0.063708,0.002175,0.383274, + 0.063708,0.002175,0.383274, 0.115381,0.0084,0.694143, 0,0.0084,0.7032, + 0.940158,0.018225,0.156274, 0.694143,0.0084,0.115381, 0.7032,0.0084,0, + 0.7032,0.0084,0, 0.952425,0.018225,0, 0.940158,0.018225,0.156274, + 0.904575,0.018225,0.303862, 0.667871,0.0084,0.224349, 0.694143,0.0084,0.115381, + 0.694143,0.0084,0.115381, 0.940158,0.018225,0.156274, 0.904575,0.018225,0.303862, + 0.847506,0.018225,0.440935, 0.625735,0.0084,0.325553, 0.667871,0.0084,0.224349, + 0.667871,0.0084,0.224349, 0.904575,0.018225,0.303862, 0.847506,0.018225,0.440935, + 0.770779,0.018225,0.565664, 0.569086,0.0084,0.417645, 0.625735,0.0084,0.325553, + 0.625735,0.0084,0.325553, 0.847506,0.018225,0.440935, 0.770779,0.018225,0.565664, + 0.676222,0.018225,0.676222, 0.499272,0.0084,0.499272, 0.569086,0.0084,0.417645, + 0.569086,0.0084,0.417645, 0.770779,0.018225,0.565664, 0.676222,0.018225,0.676222, + 0.565664,0.018225,0.770779, 0.417645,0.0084,0.569086, 0.499272,0.0084,0.499272, + 0.499272,0.0084,0.499272, 0.676222,0.018225,0.676222, 0.565664,0.018225,0.770779, + 0.440935,0.018225,0.847506, 0.325553,0.0084,0.625735, 0.417645,0.0084,0.569086, + 0.417645,0.0084,0.569086, 0.565664,0.018225,0.770779, 0.440935,0.018225,0.847506, + 0.303862,0.018225,0.904575, 0.224349,0.0084,0.667871, 0.325553,0.0084,0.625735, + 0.325553,0.0084,0.625735, 0.440935,0.018225,0.847506, 0.303862,0.018225,0.904575, + 0.156274,0.018225,0.940158, 0.115381,0.0084,0.694143, 0.224349,0.0084,0.667871, + 0.224349,0.0084,0.667871, 0.303862,0.018225,0.904575, 0.156274,0.018225,0.940158, + 0,0.018225,0.952425, 0,0.0084,0.7032, 0.115381,0.0084,0.694143, + 0.115381,0.0084,0.694143, 0.156274,0.018225,0.940158, 0,0.018225,0.952425, + 1.12887,0.0312,0.187642, 0.940158,0.018225,0.156274, 0.952425,0.018225,0, + 0.952425,0.018225,0, 1.1436,0.0312,0, 1.12887,0.0312,0.187642, + 1.086146,0.0312,0.364854, 0.904575,0.018225,0.303862, 0.940158,0.018225,0.156274, + 0.940158,0.018225,0.156274, 1.12887,0.0312,0.187642, 1.086146,0.0312,0.364854, + 1.017621,0.0312,0.529441, 0.847506,0.018225,0.440935, 0.904575,0.018225,0.303862, + 0.904575,0.018225,0.303862, 1.086146,0.0312,0.364854, 1.017621,0.0312,0.529441, + 0.925493,0.0312,0.679207, 0.770779,0.018225,0.565664, 0.847506,0.018225,0.440935, + 0.847506,0.018225,0.440935, 1.017621,0.0312,0.529441, 0.925493,0.0312,0.679207, + 0.811956,0.0312,0.811956, 0.676222,0.018225,0.676222, 0.770779,0.018225,0.565664, + 0.770779,0.018225,0.565664, 0.925493,0.0312,0.679207, 0.811956,0.0312,0.811956, + 0.679207,0.0312,0.925493, 0.565664,0.018225,0.770779, 0.676222,0.018225,0.676222, + 0.676222,0.018225,0.676222, 0.811956,0.0312,0.811956, 0.679207,0.0312,0.925493, + 0.529441,0.0312,1.017621, 0.440935,0.018225,0.847506, 0.565664,0.018225,0.770779, + 0.565664,0.018225,0.770779, 0.679207,0.0312,0.925493, 0.529441,0.0312,1.017621, + 0.364854,0.0312,1.086146, 0.303862,0.018225,0.904575, 0.440935,0.018225,0.847506, + 0.440935,0.018225,0.847506, 0.529441,0.0312,1.017621, 0.364854,0.0312,1.086146, + 0.187642,0.0312,1.12887, 0.156274,0.018225,0.940158, 0.303862,0.018225,0.904575, + 0.303862,0.018225,0.904575, 0.364854,0.0312,1.086146, 0.187642,0.0312,1.12887, + 0,0.0312,1.1436, 0,0.018225,0.952425, 0.156274,0.018225,0.940158, + 0.156274,0.018225,0.940158, 0.187642,0.0312,1.12887, 0,0.0312,1.1436, + 1.267832,0.046875,0.21074, 1.12887,0.0312,0.187642, 1.1436,0.0312,0, + 1.1436,0.0312,0, 1.284375,0.046875,0, 1.267832,0.046875,0.21074, + 1.219848,0.046875,0.409767, 1.086146,0.0312,0.364854, 1.12887,0.0312,0.187642, + 1.12887,0.0312,0.187642, 1.267832,0.046875,0.21074, 1.219848,0.046875,0.409767, + 1.142888,0.046875,0.594614, 1.017621,0.0312,0.529441, 1.086146,0.0312,0.364854, + 1.086146,0.0312,0.364854, 1.219848,0.046875,0.409767, 1.142888,0.046875,0.594614, + 1.039419,0.046875,0.762816, 0.925493,0.0312,0.679207, 1.017621,0.0312,0.529441, + 1.017621,0.0312,0.529441, 1.142888,0.046875,0.594614, 1.039419,0.046875,0.762816, + 0.911906,0.046875,0.911906, 0.811956,0.0312,0.811956, 0.925493,0.0312,0.679207, + 0.925493,0.0312,0.679207, 1.039419,0.046875,0.762816, 0.911906,0.046875,0.911906, + 0.762816,0.046875,1.039419, 0.679207,0.0312,0.925493, 0.811956,0.0312,0.811956, + 0.811956,0.0312,0.811956, 0.911906,0.046875,0.911906, 0.762816,0.046875,1.039419, + 0.594614,0.046875,1.142888, 0.529441,0.0312,1.017621, 0.679207,0.0312,0.925493, + 0.679207,0.0312,0.925493, 0.762816,0.046875,1.039419, 0.594614,0.046875,1.142888, + 0.409767,0.046875,1.219848, 0.364854,0.0312,1.086146, 0.529441,0.0312,1.017621, + 0.529441,0.0312,1.017621, 0.594614,0.046875,1.142888, 0.409767,0.046875,1.219848, + 0.21074,0.046875,1.267832, 0.187642,0.0312,1.12887, 0.364854,0.0312,1.086146, + 0.364854,0.0312,1.086146, 0.409767,0.046875,1.219848, 0.21074,0.046875,1.267832, + 0,0.046875,1.284375, 0,0.0312,1.1436, 0.187642,0.0312,1.12887, + 0.187642,0.0312,1.12887, 0.21074,0.046875,1.267832, 0,0.046875,1.284375, + 1.364595,0.0648,0.226824, 1.267832,0.046875,0.21074, 1.284375,0.046875,0, + 1.284375,0.046875,0, 1.3824,0.0648,0, 1.364595,0.0648,0.226824, + 1.312948,0.0648,0.441041, 1.219848,0.046875,0.409767, 1.267832,0.046875,0.21074, + 1.267832,0.046875,0.21074, 1.364595,0.0648,0.226824, 1.312948,0.0648,0.441041, + 1.230115,0.0648,0.639996, 1.142888,0.046875,0.594614, 1.219848,0.046875,0.409767, + 1.219848,0.046875,0.409767, 1.312948,0.0648,0.441041, 1.230115,0.0648,0.639996, + 1.118749,0.0648,0.821035, 1.039419,0.046875,0.762816, 1.142888,0.046875,0.594614, + 1.142888,0.046875,0.594614, 1.230115,0.0648,0.639996, 1.118749,0.0648,0.821035, + 0.981504,0.0648,0.981504, 0.911906,0.046875,0.911906, 1.039419,0.046875,0.762816, + 1.039419,0.046875,0.762816, 1.118749,0.0648,0.821035, 0.981504,0.0648,0.981504, + 0.821035,0.0648,1.118749, 0.762816,0.046875,1.039419, 0.911906,0.046875,0.911906, + 0.911906,0.046875,0.911906, 0.981504,0.0648,0.981504, 0.821035,0.0648,1.118749, + 0.639996,0.0648,1.230115, 0.594614,0.046875,1.142888, 0.762816,0.046875,1.039419, + 0.762816,0.046875,1.039419, 0.821035,0.0648,1.118749, 0.639996,0.0648,1.230115, + 0.441041,0.0648,1.312948, 0.409767,0.046875,1.219848, 0.594614,0.046875,1.142888, + 0.594614,0.046875,1.142888, 0.639996,0.0648,1.230115, 0.441041,0.0648,1.312948, + 0.226824,0.0648,1.364595, 0.21074,0.046875,1.267832, 0.409767,0.046875,1.219848, + 0.409767,0.046875,1.219848, 0.441041,0.0648,1.312948, 0.226824,0.0648,1.364595, + 0,0.0648,1.3824, 0,0.046875,1.284375, 0.21074,0.046875,1.267832, + 0.21074,0.046875,1.267832, 0.226824,0.0648,1.364595, 0,0.0648,1.3824, + 1.426709,0.084525,0.237149, 1.364595,0.0648,0.226824, 1.3824,0.0648,0, + 1.3824,0.0648,0, 1.445325,0.084525,0, 1.426709,0.084525,0.237149, + 1.372712,0.084525,0.461116, 1.312948,0.0648,0.441041, 1.364595,0.0648,0.226824, + 1.364595,0.0648,0.226824, 1.426709,0.084525,0.237149, 1.372712,0.084525,0.461116, + 1.286108,0.084525,0.669128, 1.230115,0.0648,0.639996, 1.312948,0.0648,0.441041, + 1.312948,0.0648,0.441041, 1.372712,0.084525,0.461116, 1.286108,0.084525,0.669128, + 1.169673,0.084525,0.858407, 1.118749,0.0648,0.821035, 1.230115,0.0648,0.639996, + 1.230115,0.0648,0.639996, 1.286108,0.084525,0.669128, 1.169673,0.084525,0.858407, + 1.026181,0.084525,1.026181, 0.981504,0.0648,0.981504, 1.118749,0.0648,0.821035, + 1.118749,0.0648,0.821035, 1.169673,0.084525,0.858407, 1.026181,0.084525,1.026181, + 0.858407,0.084525,1.169673, 0.821035,0.0648,1.118749, 0.981504,0.0648,0.981504, + 0.981504,0.0648,0.981504, 1.026181,0.084525,1.026181, 0.858407,0.084525,1.169673, + 0.669128,0.084525,1.286108, 0.639996,0.0648,1.230115, 0.821035,0.0648,1.118749, + 0.821035,0.0648,1.118749, 0.858407,0.084525,1.169673, 0.669128,0.084525,1.286108, + 0.461116,0.084525,1.372712, 0.441041,0.0648,1.312948, 0.639996,0.0648,1.230115, + 0.639996,0.0648,1.230115, 0.669128,0.084525,1.286108, 0.461116,0.084525,1.372712, + 0.237149,0.084525,1.426709, 0.226824,0.0648,1.364595, 0.441041,0.0648,1.312948, + 0.441041,0.0648,1.312948, 0.461116,0.084525,1.372712, 0.237149,0.084525,1.426709, + 0,0.084525,1.445325, 0,0.0648,1.3824, 0.226824,0.0648,1.364595, + 0.226824,0.0648,1.364595, 0.237149,0.084525,1.426709, 0,0.084525,1.445325, + 1.461727,0.1056,0.24297, 1.426709,0.084525,0.237149, 1.445325,0.084525,0, + 1.445325,0.084525,0, 1.4808,0.1056,0, 1.461727,0.1056,0.24297, + 1.406405,0.1056,0.472434, 1.372712,0.084525,0.461116, 1.426709,0.084525,0.237149, + 1.426709,0.084525,0.237149, 1.461727,0.1056,0.24297, 1.406405,0.1056,0.472434, + 1.317675,0.1056,0.685551, 1.286108,0.084525,0.669128, 1.372712,0.084525,0.461116, + 1.372712,0.084525,0.461116, 1.406405,0.1056,0.472434, 1.317675,0.1056,0.685551, + 1.198382,0.1056,0.879477, 1.169673,0.084525,0.858407, 1.286108,0.084525,0.669128, + 1.286108,0.084525,0.669128, 1.317675,0.1056,0.685551, 1.198382,0.1056,0.879477, + 1.051368,0.1056,1.051368, 1.026181,0.084525,1.026181, 1.169673,0.084525,0.858407, + 1.169673,0.084525,0.858407, 1.198382,0.1056,0.879477, 1.051368,0.1056,1.051368, + 0.879477,0.1056,1.198382, 0.858407,0.084525,1.169673, 1.026181,0.084525,1.026181, + 1.026181,0.084525,1.026181, 1.051368,0.1056,1.051368, 0.879477,0.1056,1.198382, + 0.685551,0.1056,1.317675, 0.669128,0.084525,1.286108, 0.858407,0.084525,1.169673, + 0.858407,0.084525,1.169673, 0.879477,0.1056,1.198382, 0.685551,0.1056,1.317675, + 0.472434,0.1056,1.406405, 0.461116,0.084525,1.372712, 0.669128,0.084525,1.286108, + 0.669128,0.084525,1.286108, 0.685551,0.1056,1.317675, 0.472434,0.1056,1.406405, + 0.24297,0.1056,1.461727, 0.237149,0.084525,1.426709, 0.461116,0.084525,1.372712, + 0.461116,0.084525,1.372712, 0.472434,0.1056,1.406405, 0.24297,0.1056,1.461727, + 0,0.1056,1.4808, 0,0.084525,1.445325, 0.237149,0.084525,1.426709, + 0.237149,0.084525,1.426709, 0.24297,0.1056,1.461727, 0,0.1056,1.4808, + 1.4772,0.127575,0.245542, 1.461727,0.1056,0.24297, 1.4808,0.1056,0, + 1.4808,0.1056,0, 1.496475,0.127575,0, 1.4772,0.127575,0.245542, + 1.421292,0.127575,0.477435, 1.406405,0.1056,0.472434, 1.461727,0.1056,0.24297, + 1.461727,0.1056,0.24297, 1.4772,0.127575,0.245542, 1.421292,0.127575,0.477435, + 1.331623,0.127575,0.692808, 1.317675,0.1056,0.685551, 1.406405,0.1056,0.472434, + 1.406405,0.1056,0.472434, 1.421292,0.127575,0.477435, 1.331623,0.127575,0.692808, + 1.211067,0.127575,0.888786, 1.198382,0.1056,0.879477, 1.317675,0.1056,0.685551, + 1.317675,0.1056,0.685551, 1.331623,0.127575,0.692808, 1.211067,0.127575,0.888786, + 1.062497,0.127575,1.062497, 1.051368,0.1056,1.051368, 1.198382,0.1056,0.879477, + 1.198382,0.1056,0.879477, 1.211067,0.127575,0.888786, 1.062497,0.127575,1.062497, + 0.888786,0.127575,1.211067, 0.879477,0.1056,1.198382, 1.051368,0.1056,1.051368, + 1.051368,0.1056,1.051368, 1.062497,0.127575,1.062497, 0.888786,0.127575,1.211067, + 0.692808,0.127575,1.331623, 0.685551,0.1056,1.317675, 0.879477,0.1056,1.198382, + 0.879477,0.1056,1.198382, 0.888786,0.127575,1.211067, 0.692808,0.127575,1.331623, + 0.477435,0.127575,1.421292, 0.472434,0.1056,1.406405, 0.685551,0.1056,1.317675, + 0.685551,0.1056,1.317675, 0.692808,0.127575,1.331623, 0.477435,0.127575,1.421292, + 0.245542,0.127575,1.4772, 0.24297,0.1056,1.461727, 0.472434,0.1056,1.406405, + 0.472434,0.1056,1.406405, 0.477435,0.127575,1.421292, 0.245542,0.127575,1.4772, + 0,0.127575,1.496475, 0,0.1056,1.4808, 0.24297,0.1056,1.461727, + 0.24297,0.1056,1.461727, 0.245542,0.127575,1.4772, 0,0.127575,1.496475, + 1.48068,0.15,0.24612, 1.4772,0.127575,0.245542, 1.496475,0.127575,0, + 1.496475,0.127575,0, 1.5,0.15,0, 1.48068,0.15,0.24612, + 1.42464,0.15,0.47856, 1.421292,0.127575,0.477435, 1.4772,0.127575,0.245542, + 1.4772,0.127575,0.245542, 1.48068,0.15,0.24612, 1.42464,0.15,0.47856, + 1.33476,0.15,0.69444, 1.331623,0.127575,0.692808, 1.421292,0.127575,0.477435, + 1.421292,0.127575,0.477435, 1.42464,0.15,0.47856, 1.33476,0.15,0.69444, + 1.21392,0.15,0.89088, 1.211067,0.127575,0.888786, 1.331623,0.127575,0.692808, + 1.331623,0.127575,0.692808, 1.33476,0.15,0.69444, 1.21392,0.15,0.89088, + 1.065,0.15,1.065, 1.062497,0.127575,1.062497, 1.211067,0.127575,0.888786, + 1.211067,0.127575,0.888786, 1.21392,0.15,0.89088, 1.065,0.15,1.065, + 0.89088,0.15,1.21392, 0.888786,0.127575,1.211067, 1.062497,0.127575,1.062497, + 1.062497,0.127575,1.062497, 1.065,0.15,1.065, 0.89088,0.15,1.21392, + 0.69444,0.15,1.33476, 0.692808,0.127575,1.331623, 0.888786,0.127575,1.211067, + 0.888786,0.127575,1.211067, 0.89088,0.15,1.21392, 0.69444,0.15,1.33476, + 0.47856,0.15,1.42464, 0.477435,0.127575,1.421292, 0.692808,0.127575,1.331623, + 0.692808,0.127575,1.331623, 0.69444,0.15,1.33476, 0.47856,0.15,1.42464, + 0.24612,0.15,1.48068, 0.245542,0.127575,1.4772, 0.477435,0.127575,1.421292, + 0.477435,0.127575,1.421292, 0.47856,0.15,1.42464, 0.24612,0.15,1.48068, + 0,0.15,1.5, 0,0.127575,1.496475, 0.245542,0.127575,1.4772, + 0.245542,0.127575,1.4772, 0.24612,0.15,1.48068, 0,0.15,1.5, + 0,0,0, 0,0.002175,0.388275, -0.063708,0.002175,0.383274, + 0,0,0, -0.063708,0.002175,0.383274, -0.123875,0.002175,0.368768, + 0,0,0, -0.123875,0.002175,0.368768, -0.179756,0.002175,0.345503, + 0,0,0, -0.179756,0.002175,0.345503, -0.230604,0.002175,0.314223, + 0,0,0, -0.230604,0.002175,0.314223, -0.275675,0.002175,0.275675, + 0,0,0, -0.275675,0.002175,0.275675, -0.314223,0.002175,0.230604, + 0,0,0, -0.314223,0.002175,0.230604, -0.345503,0.002175,0.179756, + 0,0,0, -0.345503,0.002175,0.179756, -0.368768,0.002175,0.123875, + 0,0,0, -0.368768,0.002175,0.123875, -0.383274,0.002175,0.063708, + 0,0,0, -0.383274,0.002175,0.063708, -0.388275,0.002175,0, + -0.115381,0.0084,0.694143, -0.063708,0.002175,0.383274, 0,0.002175,0.388275, + 0,0.002175,0.388275, 0,0.0084,0.7032, -0.115381,0.0084,0.694143, + -0.224349,0.0084,0.667871, -0.123875,0.002175,0.368768, -0.063708,0.002175,0.383274, + -0.063708,0.002175,0.383274, -0.115381,0.0084,0.694143, -0.224349,0.0084,0.667871, + -0.325553,0.0084,0.625735, -0.179756,0.002175,0.345503, -0.123875,0.002175,0.368768, + -0.123875,0.002175,0.368768, -0.224349,0.0084,0.667871, -0.325553,0.0084,0.625735, + -0.417645,0.0084,0.569086, -0.230604,0.002175,0.314223, -0.179756,0.002175,0.345503, + -0.179756,0.002175,0.345503, -0.325553,0.0084,0.625735, -0.417645,0.0084,0.569086, + -0.499272,0.0084,0.499272, -0.275675,0.002175,0.275675, -0.230604,0.002175,0.314223, + -0.230604,0.002175,0.314223, -0.417645,0.0084,0.569086, -0.499272,0.0084,0.499272, + -0.569086,0.0084,0.417645, -0.314223,0.002175,0.230604, -0.275675,0.002175,0.275675, + -0.275675,0.002175,0.275675, -0.499272,0.0084,0.499272, -0.569086,0.0084,0.417645, + -0.625735,0.0084,0.325553, -0.345503,0.002175,0.179756, -0.314223,0.002175,0.230604, + -0.314223,0.002175,0.230604, -0.569086,0.0084,0.417645, -0.625735,0.0084,0.325553, + -0.667871,0.0084,0.224349, -0.368768,0.002175,0.123875, -0.345503,0.002175,0.179756, + -0.345503,0.002175,0.179756, -0.625735,0.0084,0.325553, -0.667871,0.0084,0.224349, + -0.694143,0.0084,0.115381, -0.383274,0.002175,0.063708, -0.368768,0.002175,0.123875, + -0.368768,0.002175,0.123875, -0.667871,0.0084,0.224349, -0.694143,0.0084,0.115381, + -0.7032,0.0084,0, -0.388275,0.002175,0, -0.383274,0.002175,0.063708, + -0.383274,0.002175,0.063708, -0.694143,0.0084,0.115381, -0.7032,0.0084,0, + -0.156274,0.018225,0.940158, -0.115381,0.0084,0.694143, 0,0.0084,0.7032, + 0,0.0084,0.7032, 0,0.018225,0.952425, -0.156274,0.018225,0.940158, + -0.303862,0.018225,0.904575, -0.224349,0.0084,0.667871, -0.115381,0.0084,0.694143, + -0.115381,0.0084,0.694143, -0.156274,0.018225,0.940158, -0.303862,0.018225,0.904575, + -0.440935,0.018225,0.847506, -0.325553,0.0084,0.625735, -0.224349,0.0084,0.667871, + -0.224349,0.0084,0.667871, -0.303862,0.018225,0.904575, -0.440935,0.018225,0.847506, + -0.565664,0.018225,0.770779, -0.417645,0.0084,0.569086, -0.325553,0.0084,0.625735, + -0.325553,0.0084,0.625735, -0.440935,0.018225,0.847506, -0.565664,0.018225,0.770779, + -0.676222,0.018225,0.676222, -0.499272,0.0084,0.499272, -0.417645,0.0084,0.569086, + -0.417645,0.0084,0.569086, -0.565664,0.018225,0.770779, -0.676222,0.018225,0.676222, + -0.770779,0.018225,0.565664, -0.569086,0.0084,0.417645, -0.499272,0.0084,0.499272, + -0.499272,0.0084,0.499272, -0.676222,0.018225,0.676222, -0.770779,0.018225,0.565664, + -0.847506,0.018225,0.440935, -0.625735,0.0084,0.325553, -0.569086,0.0084,0.417645, + -0.569086,0.0084,0.417645, -0.770779,0.018225,0.565664, -0.847506,0.018225,0.440935, + -0.904575,0.018225,0.303862, -0.667871,0.0084,0.224349, -0.625735,0.0084,0.325553, + -0.625735,0.0084,0.325553, -0.847506,0.018225,0.440935, -0.904575,0.018225,0.303862, + -0.940158,0.018225,0.156274, -0.694143,0.0084,0.115381, -0.667871,0.0084,0.224349, + -0.667871,0.0084,0.224349, -0.904575,0.018225,0.303862, -0.940158,0.018225,0.156274, + -0.952425,0.018225,0, -0.7032,0.0084,0, -0.694143,0.0084,0.115381, + -0.694143,0.0084,0.115381, -0.940158,0.018225,0.156274, -0.952425,0.018225,0, + -0.187642,0.0312,1.12887, -0.156274,0.018225,0.940158, 0,0.018225,0.952425, + 0,0.018225,0.952425, 0,0.0312,1.1436, -0.187642,0.0312,1.12887, + -0.364854,0.0312,1.086146, -0.303862,0.018225,0.904575, -0.156274,0.018225,0.940158, + -0.156274,0.018225,0.940158, -0.187642,0.0312,1.12887, -0.364854,0.0312,1.086146, + -0.529441,0.0312,1.017621, -0.440935,0.018225,0.847506, -0.303862,0.018225,0.904575, + -0.303862,0.018225,0.904575, -0.364854,0.0312,1.086146, -0.529441,0.0312,1.017621, + -0.679207,0.0312,0.925493, -0.565664,0.018225,0.770779, -0.440935,0.018225,0.847506, + -0.440935,0.018225,0.847506, -0.529441,0.0312,1.017621, -0.679207,0.0312,0.925493, + -0.811956,0.0312,0.811956, -0.676222,0.018225,0.676222, -0.565664,0.018225,0.770779, + -0.565664,0.018225,0.770779, -0.679207,0.0312,0.925493, -0.811956,0.0312,0.811956, + -0.925493,0.0312,0.679207, -0.770779,0.018225,0.565664, -0.676222,0.018225,0.676222, + -0.676222,0.018225,0.676222, -0.811956,0.0312,0.811956, -0.925493,0.0312,0.679207, + -1.017621,0.0312,0.529441, -0.847506,0.018225,0.440935, -0.770779,0.018225,0.565664, + -0.770779,0.018225,0.565664, -0.925493,0.0312,0.679207, -1.017621,0.0312,0.529441, + -1.086146,0.0312,0.364854, -0.904575,0.018225,0.303862, -0.847506,0.018225,0.440935, + -0.847506,0.018225,0.440935, -1.017621,0.0312,0.529441, -1.086146,0.0312,0.364854, + -1.12887,0.0312,0.187642, -0.940158,0.018225,0.156274, -0.904575,0.018225,0.303862, + -0.904575,0.018225,0.303862, -1.086146,0.0312,0.364854, -1.12887,0.0312,0.187642, + -1.1436,0.0312,0, -0.952425,0.018225,0, -0.940158,0.018225,0.156274, + -0.940158,0.018225,0.156274, -1.12887,0.0312,0.187642, -1.1436,0.0312,0, + -0.21074,0.046875,1.267832, -0.187642,0.0312,1.12887, 0,0.0312,1.1436, + 0,0.0312,1.1436, 0,0.046875,1.284375, -0.21074,0.046875,1.267832, + -0.409767,0.046875,1.219848, -0.364854,0.0312,1.086146, -0.187642,0.0312,1.12887, + -0.187642,0.0312,1.12887, -0.21074,0.046875,1.267832, -0.409767,0.046875,1.219848, + -0.594614,0.046875,1.142888, -0.529441,0.0312,1.017621, -0.364854,0.0312,1.086146, + -0.364854,0.0312,1.086146, -0.409767,0.046875,1.219848, -0.594614,0.046875,1.142888, + -0.762816,0.046875,1.039419, -0.679207,0.0312,0.925493, -0.529441,0.0312,1.017621, + -0.529441,0.0312,1.017621, -0.594614,0.046875,1.142888, -0.762816,0.046875,1.039419, + -0.911906,0.046875,0.911906, -0.811956,0.0312,0.811956, -0.679207,0.0312,0.925493, + -0.679207,0.0312,0.925493, -0.762816,0.046875,1.039419, -0.911906,0.046875,0.911906, + -1.039419,0.046875,0.762816, -0.925493,0.0312,0.679207, -0.811956,0.0312,0.811956, + -0.811956,0.0312,0.811956, -0.911906,0.046875,0.911906, -1.039419,0.046875,0.762816, + -1.142888,0.046875,0.594614, -1.017621,0.0312,0.529441, -0.925493,0.0312,0.679207, + -0.925493,0.0312,0.679207, -1.039419,0.046875,0.762816, -1.142888,0.046875,0.594614, + -1.219848,0.046875,0.409767, -1.086146,0.0312,0.364854, -1.017621,0.0312,0.529441, + -1.017621,0.0312,0.529441, -1.142888,0.046875,0.594614, -1.219848,0.046875,0.409767, + -1.267832,0.046875,0.21074, -1.12887,0.0312,0.187642, -1.086146,0.0312,0.364854, + -1.086146,0.0312,0.364854, -1.219848,0.046875,0.409767, -1.267832,0.046875,0.21074, + -1.284375,0.046875,0, -1.1436,0.0312,0, -1.12887,0.0312,0.187642, + -1.12887,0.0312,0.187642, -1.267832,0.046875,0.21074, -1.284375,0.046875,0, + -0.226824,0.0648,1.364595, -0.21074,0.046875,1.267832, 0,0.046875,1.284375, + 0,0.046875,1.284375, 0,0.0648,1.3824, -0.226824,0.0648,1.364595, + -0.441041,0.0648,1.312948, -0.409767,0.046875,1.219848, -0.21074,0.046875,1.267832, + -0.21074,0.046875,1.267832, -0.226824,0.0648,1.364595, -0.441041,0.0648,1.312948, + -0.639996,0.0648,1.230115, -0.594614,0.046875,1.142888, -0.409767,0.046875,1.219848, + -0.409767,0.046875,1.219848, -0.441041,0.0648,1.312948, -0.639996,0.0648,1.230115, + -0.821035,0.0648,1.118749, -0.762816,0.046875,1.039419, -0.594614,0.046875,1.142888, + -0.594614,0.046875,1.142888, -0.639996,0.0648,1.230115, -0.821035,0.0648,1.118749, + -0.981504,0.0648,0.981504, -0.911906,0.046875,0.911906, -0.762816,0.046875,1.039419, + -0.762816,0.046875,1.039419, -0.821035,0.0648,1.118749, -0.981504,0.0648,0.981504, + -1.118749,0.0648,0.821035, -1.039419,0.046875,0.762816, -0.911906,0.046875,0.911906, + -0.911906,0.046875,0.911906, -0.981504,0.0648,0.981504, -1.118749,0.0648,0.821035, + -1.230115,0.0648,0.639996, -1.142888,0.046875,0.594614, -1.039419,0.046875,0.762816, + -1.039419,0.046875,0.762816, -1.118749,0.0648,0.821035, -1.230115,0.0648,0.639996, + -1.312948,0.0648,0.441041, -1.219848,0.046875,0.409767, -1.142888,0.046875,0.594614, + -1.142888,0.046875,0.594614, -1.230115,0.0648,0.639996, -1.312948,0.0648,0.441041, + -1.364595,0.0648,0.226824, -1.267832,0.046875,0.21074, -1.219848,0.046875,0.409767, + -1.219848,0.046875,0.409767, -1.312948,0.0648,0.441041, -1.364595,0.0648,0.226824, + -1.3824,0.0648,0, -1.284375,0.046875,0, -1.267832,0.046875,0.21074, + -1.267832,0.046875,0.21074, -1.364595,0.0648,0.226824, -1.3824,0.0648,0, + -0.237149,0.084525,1.426709, -0.226824,0.0648,1.364595, 0,0.0648,1.3824, + 0,0.0648,1.3824, 0,0.084525,1.445325, -0.237149,0.084525,1.426709, + -0.461116,0.084525,1.372712, -0.441041,0.0648,1.312948, -0.226824,0.0648,1.364595, + -0.226824,0.0648,1.364595, -0.237149,0.084525,1.426709, -0.461116,0.084525,1.372712, + -0.669128,0.084525,1.286108, -0.639996,0.0648,1.230115, -0.441041,0.0648,1.312948, + -0.441041,0.0648,1.312948, -0.461116,0.084525,1.372712, -0.669128,0.084525,1.286108, + -0.858407,0.084525,1.169673, -0.821035,0.0648,1.118749, -0.639996,0.0648,1.230115, + -0.639996,0.0648,1.230115, -0.669128,0.084525,1.286108, -0.858407,0.084525,1.169673, + -1.026181,0.084525,1.026181, -0.981504,0.0648,0.981504, -0.821035,0.0648,1.118749, + -0.821035,0.0648,1.118749, -0.858407,0.084525,1.169673, -1.026181,0.084525,1.026181, + -1.169673,0.084525,0.858407, -1.118749,0.0648,0.821035, -0.981504,0.0648,0.981504, + -0.981504,0.0648,0.981504, -1.026181,0.084525,1.026181, -1.169673,0.084525,0.858407, + -1.286108,0.084525,0.669128, -1.230115,0.0648,0.639996, -1.118749,0.0648,0.821035, + -1.118749,0.0648,0.821035, -1.169673,0.084525,0.858407, -1.286108,0.084525,0.669128, + -1.372712,0.084525,0.461116, -1.312948,0.0648,0.441041, -1.230115,0.0648,0.639996, + -1.230115,0.0648,0.639996, -1.286108,0.084525,0.669128, -1.372712,0.084525,0.461116, + -1.426709,0.084525,0.237149, -1.364595,0.0648,0.226824, -1.312948,0.0648,0.441041, + -1.312948,0.0648,0.441041, -1.372712,0.084525,0.461116, -1.426709,0.084525,0.237149, + -1.445325,0.084525,0, -1.3824,0.0648,0, -1.364595,0.0648,0.226824, + -1.364595,0.0648,0.226824, -1.426709,0.084525,0.237149, -1.445325,0.084525,0, + -0.24297,0.1056,1.461727, -0.237149,0.084525,1.426709, 0,0.084525,1.445325, + 0,0.084525,1.445325, 0,0.1056,1.4808, -0.24297,0.1056,1.461727, + -0.472434,0.1056,1.406405, -0.461116,0.084525,1.372712, -0.237149,0.084525,1.426709, + -0.237149,0.084525,1.426709, -0.24297,0.1056,1.461727, -0.472434,0.1056,1.406405, + -0.685551,0.1056,1.317675, -0.669128,0.084525,1.286108, -0.461116,0.084525,1.372712, + -0.461116,0.084525,1.372712, -0.472434,0.1056,1.406405, -0.685551,0.1056,1.317675, + -0.879477,0.1056,1.198382, -0.858407,0.084525,1.169673, -0.669128,0.084525,1.286108, + -0.669128,0.084525,1.286108, -0.685551,0.1056,1.317675, -0.879477,0.1056,1.198382, + -1.051368,0.1056,1.051368, -1.026181,0.084525,1.026181, -0.858407,0.084525,1.169673, + -0.858407,0.084525,1.169673, -0.879477,0.1056,1.198382, -1.051368,0.1056,1.051368, + -1.198382,0.1056,0.879477, -1.169673,0.084525,0.858407, -1.026181,0.084525,1.026181, + -1.026181,0.084525,1.026181, -1.051368,0.1056,1.051368, -1.198382,0.1056,0.879477, + -1.317675,0.1056,0.685551, -1.286108,0.084525,0.669128, -1.169673,0.084525,0.858407, + -1.169673,0.084525,0.858407, -1.198382,0.1056,0.879477, -1.317675,0.1056,0.685551, + -1.406405,0.1056,0.472434, -1.372712,0.084525,0.461116, -1.286108,0.084525,0.669128, + -1.286108,0.084525,0.669128, -1.317675,0.1056,0.685551, -1.406405,0.1056,0.472434, + -1.461727,0.1056,0.24297, -1.426709,0.084525,0.237149, -1.372712,0.084525,0.461116, + -1.372712,0.084525,0.461116, -1.406405,0.1056,0.472434, -1.461727,0.1056,0.24297, + -1.4808,0.1056,0, -1.445325,0.084525,0, -1.426709,0.084525,0.237149, + -1.426709,0.084525,0.237149, -1.461727,0.1056,0.24297, -1.4808,0.1056,0, + -0.245542,0.127575,1.4772, -0.24297,0.1056,1.461727, 0,0.1056,1.4808, + 0,0.1056,1.4808, 0,0.127575,1.496475, -0.245542,0.127575,1.4772, + -0.477435,0.127575,1.421292, -0.472434,0.1056,1.406405, -0.24297,0.1056,1.461727, + -0.24297,0.1056,1.461727, -0.245542,0.127575,1.4772, -0.477435,0.127575,1.421292, + -0.692808,0.127575,1.331623, -0.685551,0.1056,1.317675, -0.472434,0.1056,1.406405, + -0.472434,0.1056,1.406405, -0.477435,0.127575,1.421292, -0.692808,0.127575,1.331623, + -0.888786,0.127575,1.211067, -0.879477,0.1056,1.198382, -0.685551,0.1056,1.317675, + -0.685551,0.1056,1.317675, -0.692808,0.127575,1.331623, -0.888786,0.127575,1.211067, + -1.062497,0.127575,1.062497, -1.051368,0.1056,1.051368, -0.879477,0.1056,1.198382, + -0.879477,0.1056,1.198382, -0.888786,0.127575,1.211067, -1.062497,0.127575,1.062497, + -1.211067,0.127575,0.888786, -1.198382,0.1056,0.879477, -1.051368,0.1056,1.051368, + -1.051368,0.1056,1.051368, -1.062497,0.127575,1.062497, -1.211067,0.127575,0.888786, + -1.331623,0.127575,0.692808, -1.317675,0.1056,0.685551, -1.198382,0.1056,0.879477, + -1.198382,0.1056,0.879477, -1.211067,0.127575,0.888786, -1.331623,0.127575,0.692808, + -1.421292,0.127575,0.477435, -1.406405,0.1056,0.472434, -1.317675,0.1056,0.685551, + -1.317675,0.1056,0.685551, -1.331623,0.127575,0.692808, -1.421292,0.127575,0.477435, + -1.4772,0.127575,0.245542, -1.461727,0.1056,0.24297, -1.406405,0.1056,0.472434, + -1.406405,0.1056,0.472434, -1.421292,0.127575,0.477435, -1.4772,0.127575,0.245542, + -1.496475,0.127575,0, -1.4808,0.1056,0, -1.461727,0.1056,0.24297, + -1.461727,0.1056,0.24297, -1.4772,0.127575,0.245542, -1.496475,0.127575,0, + -0.24612,0.15,1.48068, -0.245542,0.127575,1.4772, 0,0.127575,1.496475, + 0,0.127575,1.496475, 0,0.15,1.5, -0.24612,0.15,1.48068, + -0.47856,0.15,1.42464, -0.477435,0.127575,1.421292, -0.245542,0.127575,1.4772, + -0.245542,0.127575,1.4772, -0.24612,0.15,1.48068, -0.47856,0.15,1.42464, + -0.69444,0.15,1.33476, -0.692808,0.127575,1.331623, -0.477435,0.127575,1.421292, + -0.477435,0.127575,1.421292, -0.47856,0.15,1.42464, -0.69444,0.15,1.33476, + -0.89088,0.15,1.21392, -0.888786,0.127575,1.211067, -0.692808,0.127575,1.331623, + -0.692808,0.127575,1.331623, -0.69444,0.15,1.33476, -0.89088,0.15,1.21392, + -1.065,0.15,1.065, -1.062497,0.127575,1.062497, -0.888786,0.127575,1.211067, + -0.888786,0.127575,1.211067, -0.89088,0.15,1.21392, -1.065,0.15,1.065, + -1.21392,0.15,0.89088, -1.211067,0.127575,0.888786, -1.062497,0.127575,1.062497, + -1.062497,0.127575,1.062497, -1.065,0.15,1.065, -1.21392,0.15,0.89088, + -1.33476,0.15,0.69444, -1.331623,0.127575,0.692808, -1.211067,0.127575,0.888786, + -1.211067,0.127575,0.888786, -1.21392,0.15,0.89088, -1.33476,0.15,0.69444, + -1.42464,0.15,0.47856, -1.421292,0.127575,0.477435, -1.331623,0.127575,0.692808, + -1.331623,0.127575,0.692808, -1.33476,0.15,0.69444, -1.42464,0.15,0.47856, + -1.48068,0.15,0.24612, -1.4772,0.127575,0.245542, -1.421292,0.127575,0.477435, + -1.421292,0.127575,0.477435, -1.42464,0.15,0.47856, -1.48068,0.15,0.24612, + -1.5,0.15,0, -1.496475,0.127575,0, -1.4772,0.127575,0.245542, + -1.4772,0.127575,0.245542, -1.48068,0.15,0.24612, -1.5,0.15,0, + 0,0,0, -0.388275,0.002175,0, -0.383274,0.002175,-0.063708, + 0,0,0, -0.383274,0.002175,-0.063708, -0.368768,0.002175,-0.123875, + 0,0,0, -0.368768,0.002175,-0.123875, -0.345503,0.002175,-0.179756, + 0,0,0, -0.345503,0.002175,-0.179756, -0.314223,0.002175,-0.230604, + 0,0,0, -0.314223,0.002175,-0.230604, -0.275675,0.002175,-0.275675, + 0,0,0, -0.275675,0.002175,-0.275675, -0.230604,0.002175,-0.314223, + 0,0,0, -0.230604,0.002175,-0.314223, -0.179756,0.002175,-0.345503, + 0,0,0, -0.179756,0.002175,-0.345503, -0.123875,0.002175,-0.368768, + 0,0,0, -0.123875,0.002175,-0.368768, -0.063708,0.002175,-0.383274, + 0,0,0, -0.063708,0.002175,-0.383274, 0,0.002175,-0.388275, + -0.694143,0.0084,-0.115381, -0.383274,0.002175,-0.063708, -0.388275,0.002175,0, + -0.388275,0.002175,0, -0.7032,0.0084,0, -0.694143,0.0084,-0.115381, + -0.667871,0.0084,-0.224349, -0.368768,0.002175,-0.123875, -0.383274,0.002175,-0.063708, + -0.383274,0.002175,-0.063708, -0.694143,0.0084,-0.115381, -0.667871,0.0084,-0.224349, + -0.625735,0.0084,-0.325553, -0.345503,0.002175,-0.179756, -0.368768,0.002175,-0.123875, + -0.368768,0.002175,-0.123875, -0.667871,0.0084,-0.224349, -0.625735,0.0084,-0.325553, + -0.569086,0.0084,-0.417645, -0.314223,0.002175,-0.230604, -0.345503,0.002175,-0.179756, + -0.345503,0.002175,-0.179756, -0.625735,0.0084,-0.325553, -0.569086,0.0084,-0.417645, + -0.499272,0.0084,-0.499272, -0.275675,0.002175,-0.275675, -0.314223,0.002175,-0.230604, + -0.314223,0.002175,-0.230604, -0.569086,0.0084,-0.417645, -0.499272,0.0084,-0.499272, + -0.417645,0.0084,-0.569086, -0.230604,0.002175,-0.314223, -0.275675,0.002175,-0.275675, + -0.275675,0.002175,-0.275675, -0.499272,0.0084,-0.499272, -0.417645,0.0084,-0.569086, + -0.325553,0.0084,-0.625735, -0.179756,0.002175,-0.345503, -0.230604,0.002175,-0.314223, + -0.230604,0.002175,-0.314223, -0.417645,0.0084,-0.569086, -0.325553,0.0084,-0.625735, + -0.224349,0.0084,-0.667871, -0.123875,0.002175,-0.368768, -0.179756,0.002175,-0.345503, + -0.179756,0.002175,-0.345503, -0.325553,0.0084,-0.625735, -0.224349,0.0084,-0.667871, + -0.115381,0.0084,-0.694143, -0.063708,0.002175,-0.383274, -0.123875,0.002175,-0.368768, + -0.123875,0.002175,-0.368768, -0.224349,0.0084,-0.667871, -0.115381,0.0084,-0.694143, + 0,0.0084,-0.7032, 0,0.002175,-0.388275, -0.063708,0.002175,-0.383274, + -0.063708,0.002175,-0.383274, -0.115381,0.0084,-0.694143, 0,0.0084,-0.7032, + -0.940158,0.018225,-0.156274, -0.694143,0.0084,-0.115381, -0.7032,0.0084,0, + -0.7032,0.0084,0, -0.952425,0.018225,0, -0.940158,0.018225,-0.156274, + -0.904575,0.018225,-0.303862, -0.667871,0.0084,-0.224349, -0.694143,0.0084,-0.115381, + -0.694143,0.0084,-0.115381, -0.940158,0.018225,-0.156274, -0.904575,0.018225,-0.303862, + -0.847506,0.018225,-0.440935, -0.625735,0.0084,-0.325553, -0.667871,0.0084,-0.224349, + -0.667871,0.0084,-0.224349, -0.904575,0.018225,-0.303862, -0.847506,0.018225,-0.440935, + -0.770779,0.018225,-0.565664, -0.569086,0.0084,-0.417645, -0.625735,0.0084,-0.325553, + -0.625735,0.0084,-0.325553, -0.847506,0.018225,-0.440935, -0.770779,0.018225,-0.565664, + -0.676222,0.018225,-0.676222, -0.499272,0.0084,-0.499272, -0.569086,0.0084,-0.417645, + -0.569086,0.0084,-0.417645, -0.770779,0.018225,-0.565664, -0.676222,0.018225,-0.676222, + -0.565664,0.018225,-0.770779, -0.417645,0.0084,-0.569086, -0.499272,0.0084,-0.499272, + -0.499272,0.0084,-0.499272, -0.676222,0.018225,-0.676222, -0.565664,0.018225,-0.770779, + -0.440935,0.018225,-0.847506, -0.325553,0.0084,-0.625735, -0.417645,0.0084,-0.569086, + -0.417645,0.0084,-0.569086, -0.565664,0.018225,-0.770779, -0.440935,0.018225,-0.847506, + -0.303862,0.018225,-0.904575, -0.224349,0.0084,-0.667871, -0.325553,0.0084,-0.625735, + -0.325553,0.0084,-0.625735, -0.440935,0.018225,-0.847506, -0.303862,0.018225,-0.904575, + -0.156274,0.018225,-0.940158, -0.115381,0.0084,-0.694143, -0.224349,0.0084,-0.667871, + -0.224349,0.0084,-0.667871, -0.303862,0.018225,-0.904575, -0.156274,0.018225,-0.940158, + 0,0.018225,-0.952425, 0,0.0084,-0.7032, -0.115381,0.0084,-0.694143, + -0.115381,0.0084,-0.694143, -0.156274,0.018225,-0.940158, 0,0.018225,-0.952425, + -1.12887,0.0312,-0.187642, -0.940158,0.018225,-0.156274, -0.952425,0.018225,0, + -0.952425,0.018225,0, -1.1436,0.0312,0, -1.12887,0.0312,-0.187642, + -1.086146,0.0312,-0.364854, -0.904575,0.018225,-0.303862, -0.940158,0.018225,-0.156274, + -0.940158,0.018225,-0.156274, -1.12887,0.0312,-0.187642, -1.086146,0.0312,-0.364854, + -1.017621,0.0312,-0.529441, -0.847506,0.018225,-0.440935, -0.904575,0.018225,-0.303862, + -0.904575,0.018225,-0.303862, -1.086146,0.0312,-0.364854, -1.017621,0.0312,-0.529441, + -0.925493,0.0312,-0.679207, -0.770779,0.018225,-0.565664, -0.847506,0.018225,-0.440935, + -0.847506,0.018225,-0.440935, -1.017621,0.0312,-0.529441, -0.925493,0.0312,-0.679207, + -0.811956,0.0312,-0.811956, -0.676222,0.018225,-0.676222, -0.770779,0.018225,-0.565664, + -0.770779,0.018225,-0.565664, -0.925493,0.0312,-0.679207, -0.811956,0.0312,-0.811956, + -0.679207,0.0312,-0.925493, -0.565664,0.018225,-0.770779, -0.676222,0.018225,-0.676222, + -0.676222,0.018225,-0.676222, -0.811956,0.0312,-0.811956, -0.679207,0.0312,-0.925493, + -0.529441,0.0312,-1.017621, -0.440935,0.018225,-0.847506, -0.565664,0.018225,-0.770779, + -0.565664,0.018225,-0.770779, -0.679207,0.0312,-0.925493, -0.529441,0.0312,-1.017621, + -0.364854,0.0312,-1.086146, -0.303862,0.018225,-0.904575, -0.440935,0.018225,-0.847506, + -0.440935,0.018225,-0.847506, -0.529441,0.0312,-1.017621, -0.364854,0.0312,-1.086146, + -0.187642,0.0312,-1.12887, -0.156274,0.018225,-0.940158, -0.303862,0.018225,-0.904575, + -0.303862,0.018225,-0.904575, -0.364854,0.0312,-1.086146, -0.187642,0.0312,-1.12887, + 0,0.0312,-1.1436, 0,0.018225,-0.952425, -0.156274,0.018225,-0.940158, + -0.156274,0.018225,-0.940158, -0.187642,0.0312,-1.12887, 0,0.0312,-1.1436, + -1.267832,0.046875,-0.21074, -1.12887,0.0312,-0.187642, -1.1436,0.0312,0, + -1.1436,0.0312,0, -1.284375,0.046875,0, -1.267832,0.046875,-0.21074, + -1.219848,0.046875,-0.409767, -1.086146,0.0312,-0.364854, -1.12887,0.0312,-0.187642, + -1.12887,0.0312,-0.187642, -1.267832,0.046875,-0.21074, -1.219848,0.046875,-0.409767, + -1.142888,0.046875,-0.594614, -1.017621,0.0312,-0.529441, -1.086146,0.0312,-0.364854, + -1.086146,0.0312,-0.364854, -1.219848,0.046875,-0.409767, -1.142888,0.046875,-0.594614, + -1.039419,0.046875,-0.762816, -0.925493,0.0312,-0.679207, -1.017621,0.0312,-0.529441, + -1.017621,0.0312,-0.529441, -1.142888,0.046875,-0.594614, -1.039419,0.046875,-0.762816, + -0.911906,0.046875,-0.911906, -0.811956,0.0312,-0.811956, -0.925493,0.0312,-0.679207, + -0.925493,0.0312,-0.679207, -1.039419,0.046875,-0.762816, -0.911906,0.046875,-0.911906, + -0.762816,0.046875,-1.039419, -0.679207,0.0312,-0.925493, -0.811956,0.0312,-0.811956, + -0.811956,0.0312,-0.811956, -0.911906,0.046875,-0.911906, -0.762816,0.046875,-1.039419, + -0.594614,0.046875,-1.142888, -0.529441,0.0312,-1.017621, -0.679207,0.0312,-0.925493, + -0.679207,0.0312,-0.925493, -0.762816,0.046875,-1.039419, -0.594614,0.046875,-1.142888, + -0.409767,0.046875,-1.219848, -0.364854,0.0312,-1.086146, -0.529441,0.0312,-1.017621, + -0.529441,0.0312,-1.017621, -0.594614,0.046875,-1.142888, -0.409767,0.046875,-1.219848, + -0.21074,0.046875,-1.267832, -0.187642,0.0312,-1.12887, -0.364854,0.0312,-1.086146, + -0.364854,0.0312,-1.086146, -0.409767,0.046875,-1.219848, -0.21074,0.046875,-1.267832, + 0,0.046875,-1.284375, 0,0.0312,-1.1436, -0.187642,0.0312,-1.12887, + -0.187642,0.0312,-1.12887, -0.21074,0.046875,-1.267832, 0,0.046875,-1.284375, + -1.364595,0.0648,-0.226824, -1.267832,0.046875,-0.21074, -1.284375,0.046875,0, + -1.284375,0.046875,0, -1.3824,0.0648,0, -1.364595,0.0648,-0.226824, + -1.312948,0.0648,-0.441041, -1.219848,0.046875,-0.409767, -1.267832,0.046875,-0.21074, + -1.267832,0.046875,-0.21074, -1.364595,0.0648,-0.226824, -1.312948,0.0648,-0.441041, + -1.230115,0.0648,-0.639996, -1.142888,0.046875,-0.594614, -1.219848,0.046875,-0.409767, + -1.219848,0.046875,-0.409767, -1.312948,0.0648,-0.441041, -1.230115,0.0648,-0.639996, + -1.118749,0.0648,-0.821035, -1.039419,0.046875,-0.762816, -1.142888,0.046875,-0.594614, + -1.142888,0.046875,-0.594614, -1.230115,0.0648,-0.639996, -1.118749,0.0648,-0.821035, + -0.981504,0.0648,-0.981504, -0.911906,0.046875,-0.911906, -1.039419,0.046875,-0.762816, + -1.039419,0.046875,-0.762816, -1.118749,0.0648,-0.821035, -0.981504,0.0648,-0.981504, + -0.821035,0.0648,-1.118749, -0.762816,0.046875,-1.039419, -0.911906,0.046875,-0.911906, + -0.911906,0.046875,-0.911906, -0.981504,0.0648,-0.981504, -0.821035,0.0648,-1.118749, + -0.639996,0.0648,-1.230115, -0.594614,0.046875,-1.142888, -0.762816,0.046875,-1.039419, + -0.762816,0.046875,-1.039419, -0.821035,0.0648,-1.118749, -0.639996,0.0648,-1.230115, + -0.441041,0.0648,-1.312948, -0.409767,0.046875,-1.219848, -0.594614,0.046875,-1.142888, + -0.594614,0.046875,-1.142888, -0.639996,0.0648,-1.230115, -0.441041,0.0648,-1.312948, + -0.226824,0.0648,-1.364595, -0.21074,0.046875,-1.267832, -0.409767,0.046875,-1.219848, + -0.409767,0.046875,-1.219848, -0.441041,0.0648,-1.312948, -0.226824,0.0648,-1.364595, + 0,0.0648,-1.3824, 0,0.046875,-1.284375, -0.21074,0.046875,-1.267832, + -0.21074,0.046875,-1.267832, -0.226824,0.0648,-1.364595, 0,0.0648,-1.3824, + -1.426709,0.084525,-0.237149, -1.364595,0.0648,-0.226824, -1.3824,0.0648,0, + -1.3824,0.0648,0, -1.445325,0.084525,0, -1.426709,0.084525,-0.237149, + -1.372712,0.084525,-0.461116, -1.312948,0.0648,-0.441041, -1.364595,0.0648,-0.226824, + -1.364595,0.0648,-0.226824, -1.426709,0.084525,-0.237149, -1.372712,0.084525,-0.461116, + -1.286108,0.084525,-0.669128, -1.230115,0.0648,-0.639996, -1.312948,0.0648,-0.441041, + -1.312948,0.0648,-0.441041, -1.372712,0.084525,-0.461116, -1.286108,0.084525,-0.669128, + -1.169673,0.084525,-0.858407, -1.118749,0.0648,-0.821035, -1.230115,0.0648,-0.639996, + -1.230115,0.0648,-0.639996, -1.286108,0.084525,-0.669128, -1.169673,0.084525,-0.858407, + -1.026181,0.084525,-1.026181, -0.981504,0.0648,-0.981504, -1.118749,0.0648,-0.821035, + -1.118749,0.0648,-0.821035, -1.169673,0.084525,-0.858407, -1.026181,0.084525,-1.026181, + -0.858407,0.084525,-1.169673, -0.821035,0.0648,-1.118749, -0.981504,0.0648,-0.981504, + -0.981504,0.0648,-0.981504, -1.026181,0.084525,-1.026181, -0.858407,0.084525,-1.169673, + -0.669128,0.084525,-1.286108, -0.639996,0.0648,-1.230115, -0.821035,0.0648,-1.118749, + -0.821035,0.0648,-1.118749, -0.858407,0.084525,-1.169673, -0.669128,0.084525,-1.286108, + -0.461116,0.084525,-1.372712, -0.441041,0.0648,-1.312948, -0.639996,0.0648,-1.230115, + -0.639996,0.0648,-1.230115, -0.669128,0.084525,-1.286108, -0.461116,0.084525,-1.372712, + -0.237149,0.084525,-1.426709, -0.226824,0.0648,-1.364595, -0.441041,0.0648,-1.312948, + -0.441041,0.0648,-1.312948, -0.461116,0.084525,-1.372712, -0.237149,0.084525,-1.426709, + 0,0.084525,-1.445325, 0,0.0648,-1.3824, -0.226824,0.0648,-1.364595, + -0.226824,0.0648,-1.364595, -0.237149,0.084525,-1.426709, 0,0.084525,-1.445325, + -1.461727,0.1056,-0.24297, -1.426709,0.084525,-0.237149, -1.445325,0.084525,0, + -1.445325,0.084525,0, -1.4808,0.1056,0, -1.461727,0.1056,-0.24297, + -1.406405,0.1056,-0.472434, -1.372712,0.084525,-0.461116, -1.426709,0.084525,-0.237149, + -1.426709,0.084525,-0.237149, -1.461727,0.1056,-0.24297, -1.406405,0.1056,-0.472434, + -1.317675,0.1056,-0.685551, -1.286108,0.084525,-0.669128, -1.372712,0.084525,-0.461116, + -1.372712,0.084525,-0.461116, -1.406405,0.1056,-0.472434, -1.317675,0.1056,-0.685551, + -1.198382,0.1056,-0.879477, -1.169673,0.084525,-0.858407, -1.286108,0.084525,-0.669128, + -1.286108,0.084525,-0.669128, -1.317675,0.1056,-0.685551, -1.198382,0.1056,-0.879477, + -1.051368,0.1056,-1.051368, -1.026181,0.084525,-1.026181, -1.169673,0.084525,-0.858407, + -1.169673,0.084525,-0.858407, -1.198382,0.1056,-0.879477, -1.051368,0.1056,-1.051368, + -0.879477,0.1056,-1.198382, -0.858407,0.084525,-1.169673, -1.026181,0.084525,-1.026181, + -1.026181,0.084525,-1.026181, -1.051368,0.1056,-1.051368, -0.879477,0.1056,-1.198382, + -0.685551,0.1056,-1.317675, -0.669128,0.084525,-1.286108, -0.858407,0.084525,-1.169673, + -0.858407,0.084525,-1.169673, -0.879477,0.1056,-1.198382, -0.685551,0.1056,-1.317675, + -0.472434,0.1056,-1.406405, -0.461116,0.084525,-1.372712, -0.669128,0.084525,-1.286108, + -0.669128,0.084525,-1.286108, -0.685551,0.1056,-1.317675, -0.472434,0.1056,-1.406405, + -0.24297,0.1056,-1.461727, -0.237149,0.084525,-1.426709, -0.461116,0.084525,-1.372712, + -0.461116,0.084525,-1.372712, -0.472434,0.1056,-1.406405, -0.24297,0.1056,-1.461727, + 0,0.1056,-1.4808, 0,0.084525,-1.445325, -0.237149,0.084525,-1.426709, + -0.237149,0.084525,-1.426709, -0.24297,0.1056,-1.461727, 0,0.1056,-1.4808, + -1.4772,0.127575,-0.245542, -1.461727,0.1056,-0.24297, -1.4808,0.1056,0, + -1.4808,0.1056,0, -1.496475,0.127575,0, -1.4772,0.127575,-0.245542, + -1.421292,0.127575,-0.477435, -1.406405,0.1056,-0.472434, -1.461727,0.1056,-0.24297, + -1.461727,0.1056,-0.24297, -1.4772,0.127575,-0.245542, -1.421292,0.127575,-0.477435, + -1.331623,0.127575,-0.692808, -1.317675,0.1056,-0.685551, -1.406405,0.1056,-0.472434, + -1.406405,0.1056,-0.472434, -1.421292,0.127575,-0.477435, -1.331623,0.127575,-0.692808, + -1.211067,0.127575,-0.888786, -1.198382,0.1056,-0.879477, -1.317675,0.1056,-0.685551, + -1.317675,0.1056,-0.685551, -1.331623,0.127575,-0.692808, -1.211067,0.127575,-0.888786, + -1.062497,0.127575,-1.062497, -1.051368,0.1056,-1.051368, -1.198382,0.1056,-0.879477, + -1.198382,0.1056,-0.879477, -1.211067,0.127575,-0.888786, -1.062497,0.127575,-1.062497, + -0.888786,0.127575,-1.211067, -0.879477,0.1056,-1.198382, -1.051368,0.1056,-1.051368, + -1.051368,0.1056,-1.051368, -1.062497,0.127575,-1.062497, -0.888786,0.127575,-1.211067, + -0.692808,0.127575,-1.331623, -0.685551,0.1056,-1.317675, -0.879477,0.1056,-1.198382, + -0.879477,0.1056,-1.198382, -0.888786,0.127575,-1.211067, -0.692808,0.127575,-1.331623, + -0.477435,0.127575,-1.421292, -0.472434,0.1056,-1.406405, -0.685551,0.1056,-1.317675, + -0.685551,0.1056,-1.317675, -0.692808,0.127575,-1.331623, -0.477435,0.127575,-1.421292, + -0.245542,0.127575,-1.4772, -0.24297,0.1056,-1.461727, -0.472434,0.1056,-1.406405, + -0.472434,0.1056,-1.406405, -0.477435,0.127575,-1.421292, -0.245542,0.127575,-1.4772, + 0,0.127575,-1.496475, 0,0.1056,-1.4808, -0.24297,0.1056,-1.461727, + -0.24297,0.1056,-1.461727, -0.245542,0.127575,-1.4772, 0,0.127575,-1.496475, + -1.48068,0.15,-0.24612, -1.4772,0.127575,-0.245542, -1.496475,0.127575,0, + -1.496475,0.127575,0, -1.5,0.15,0, -1.48068,0.15,-0.24612, + -1.42464,0.15,-0.47856, -1.421292,0.127575,-0.477435, -1.4772,0.127575,-0.245542, + -1.4772,0.127575,-0.245542, -1.48068,0.15,-0.24612, -1.42464,0.15,-0.47856, + -1.33476,0.15,-0.69444, -1.331623,0.127575,-0.692808, -1.421292,0.127575,-0.477435, + -1.421292,0.127575,-0.477435, -1.42464,0.15,-0.47856, -1.33476,0.15,-0.69444, + -1.21392,0.15,-0.89088, -1.211067,0.127575,-0.888786, -1.331623,0.127575,-0.692808, + -1.331623,0.127575,-0.692808, -1.33476,0.15,-0.69444, -1.21392,0.15,-0.89088, + -1.065,0.15,-1.065, -1.062497,0.127575,-1.062497, -1.211067,0.127575,-0.888786, + -1.211067,0.127575,-0.888786, -1.21392,0.15,-0.89088, -1.065,0.15,-1.065, + -0.89088,0.15,-1.21392, -0.888786,0.127575,-1.211067, -1.062497,0.127575,-1.062497, + -1.062497,0.127575,-1.062497, -1.065,0.15,-1.065, -0.89088,0.15,-1.21392, + -0.69444,0.15,-1.33476, -0.692808,0.127575,-1.331623, -0.888786,0.127575,-1.211067, + -0.888786,0.127575,-1.211067, -0.89088,0.15,-1.21392, -0.69444,0.15,-1.33476, + -0.47856,0.15,-1.42464, -0.477435,0.127575,-1.421292, -0.692808,0.127575,-1.331623, + -0.692808,0.127575,-1.331623, -0.69444,0.15,-1.33476, -0.47856,0.15,-1.42464, + -0.24612,0.15,-1.48068, -0.245542,0.127575,-1.4772, -0.477435,0.127575,-1.421292, + -0.477435,0.127575,-1.421292, -0.47856,0.15,-1.42464, -0.24612,0.15,-1.48068, + 0,0.15,-1.5, 0,0.127575,-1.496475, -0.245542,0.127575,-1.4772, + -0.245542,0.127575,-1.4772, -0.24612,0.15,-1.48068, 0,0.15,-1.5, + 0,0,0, 0,0.002175,-0.388275, 0.063708,0.002175,-0.383274, + 0,0,0, 0.063708,0.002175,-0.383274, 0.123875,0.002175,-0.368768, + 0,0,0, 0.123875,0.002175,-0.368768, 0.179756,0.002175,-0.345503, + 0,0,0, 0.179756,0.002175,-0.345503, 0.230604,0.002175,-0.314223, + 0,0,0, 0.230604,0.002175,-0.314223, 0.275675,0.002175,-0.275675, + 0,0,0, 0.275675,0.002175,-0.275675, 0.314223,0.002175,-0.230604, + 0,0,0, 0.314223,0.002175,-0.230604, 0.345503,0.002175,-0.179756, + 0,0,0, 0.345503,0.002175,-0.179756, 0.368768,0.002175,-0.123875, + 0,0,0, 0.368768,0.002175,-0.123875, 0.383274,0.002175,-0.063708, + 0,0,0, 0.383274,0.002175,-0.063708, 0.388275,0.002175,0, + 0.115381,0.0084,-0.694143, 0.063708,0.002175,-0.383274, 0,0.002175,-0.388275, + 0,0.002175,-0.388275, 0,0.0084,-0.7032, 0.115381,0.0084,-0.694143, + 0.224349,0.0084,-0.667871, 0.123875,0.002175,-0.368768, 0.063708,0.002175,-0.383274, + 0.063708,0.002175,-0.383274, 0.115381,0.0084,-0.694143, 0.224349,0.0084,-0.667871, + 0.325553,0.0084,-0.625735, 0.179756,0.002175,-0.345503, 0.123875,0.002175,-0.368768, + 0.123875,0.002175,-0.368768, 0.224349,0.0084,-0.667871, 0.325553,0.0084,-0.625735, + 0.417645,0.0084,-0.569086, 0.230604,0.002175,-0.314223, 0.179756,0.002175,-0.345503, + 0.179756,0.002175,-0.345503, 0.325553,0.0084,-0.625735, 0.417645,0.0084,-0.569086, + 0.499272,0.0084,-0.499272, 0.275675,0.002175,-0.275675, 0.230604,0.002175,-0.314223, + 0.230604,0.002175,-0.314223, 0.417645,0.0084,-0.569086, 0.499272,0.0084,-0.499272, + 0.569086,0.0084,-0.417645, 0.314223,0.002175,-0.230604, 0.275675,0.002175,-0.275675, + 0.275675,0.002175,-0.275675, 0.499272,0.0084,-0.499272, 0.569086,0.0084,-0.417645, + 0.625735,0.0084,-0.325553, 0.345503,0.002175,-0.179756, 0.314223,0.002175,-0.230604, + 0.314223,0.002175,-0.230604, 0.569086,0.0084,-0.417645, 0.625735,0.0084,-0.325553, + 0.667871,0.0084,-0.224349, 0.368768,0.002175,-0.123875, 0.345503,0.002175,-0.179756, + 0.345503,0.002175,-0.179756, 0.625735,0.0084,-0.325553, 0.667871,0.0084,-0.224349, + 0.694143,0.0084,-0.115381, 0.383274,0.002175,-0.063708, 0.368768,0.002175,-0.123875, + 0.368768,0.002175,-0.123875, 0.667871,0.0084,-0.224349, 0.694143,0.0084,-0.115381, + 0.7032,0.0084,0, 0.388275,0.002175,0, 0.383274,0.002175,-0.063708, + 0.383274,0.002175,-0.063708, 0.694143,0.0084,-0.115381, 0.7032,0.0084,0, + 0.156274,0.018225,-0.940158, 0.115381,0.0084,-0.694143, 0,0.0084,-0.7032, + 0,0.0084,-0.7032, 0,0.018225,-0.952425, 0.156274,0.018225,-0.940158, + 0.303862,0.018225,-0.904575, 0.224349,0.0084,-0.667871, 0.115381,0.0084,-0.694143, + 0.115381,0.0084,-0.694143, 0.156274,0.018225,-0.940158, 0.303862,0.018225,-0.904575, + 0.440935,0.018225,-0.847506, 0.325553,0.0084,-0.625735, 0.224349,0.0084,-0.667871, + 0.224349,0.0084,-0.667871, 0.303862,0.018225,-0.904575, 0.440935,0.018225,-0.847506, + 0.565664,0.018225,-0.770779, 0.417645,0.0084,-0.569086, 0.325553,0.0084,-0.625735, + 0.325553,0.0084,-0.625735, 0.440935,0.018225,-0.847506, 0.565664,0.018225,-0.770779, + 0.676222,0.018225,-0.676222, 0.499272,0.0084,-0.499272, 0.417645,0.0084,-0.569086, + 0.417645,0.0084,-0.569086, 0.565664,0.018225,-0.770779, 0.676222,0.018225,-0.676222, + 0.770779,0.018225,-0.565664, 0.569086,0.0084,-0.417645, 0.499272,0.0084,-0.499272, + 0.499272,0.0084,-0.499272, 0.676222,0.018225,-0.676222, 0.770779,0.018225,-0.565664, + 0.847506,0.018225,-0.440935, 0.625735,0.0084,-0.325553, 0.569086,0.0084,-0.417645, + 0.569086,0.0084,-0.417645, 0.770779,0.018225,-0.565664, 0.847506,0.018225,-0.440935, + 0.904575,0.018225,-0.303862, 0.667871,0.0084,-0.224349, 0.625735,0.0084,-0.325553, + 0.625735,0.0084,-0.325553, 0.847506,0.018225,-0.440935, 0.904575,0.018225,-0.303862, + 0.940158,0.018225,-0.156274, 0.694143,0.0084,-0.115381, 0.667871,0.0084,-0.224349, + 0.667871,0.0084,-0.224349, 0.904575,0.018225,-0.303862, 0.940158,0.018225,-0.156274, + 0.952425,0.018225,0, 0.7032,0.0084,0, 0.694143,0.0084,-0.115381, + 0.694143,0.0084,-0.115381, 0.940158,0.018225,-0.156274, 0.952425,0.018225,0, + 0.187642,0.0312,-1.12887, 0.156274,0.018225,-0.940158, 0,0.018225,-0.952425, + 0,0.018225,-0.952425, 0,0.0312,-1.1436, 0.187642,0.0312,-1.12887, + 0.364854,0.0312,-1.086146, 0.303862,0.018225,-0.904575, 0.156274,0.018225,-0.940158, + 0.156274,0.018225,-0.940158, 0.187642,0.0312,-1.12887, 0.364854,0.0312,-1.086146, + 0.529441,0.0312,-1.017621, 0.440935,0.018225,-0.847506, 0.303862,0.018225,-0.904575, + 0.303862,0.018225,-0.904575, 0.364854,0.0312,-1.086146, 0.529441,0.0312,-1.017621, + 0.679207,0.0312,-0.925493, 0.565664,0.018225,-0.770779, 0.440935,0.018225,-0.847506, + 0.440935,0.018225,-0.847506, 0.529441,0.0312,-1.017621, 0.679207,0.0312,-0.925493, + 0.811956,0.0312,-0.811956, 0.676222,0.018225,-0.676222, 0.565664,0.018225,-0.770779, + 0.565664,0.018225,-0.770779, 0.679207,0.0312,-0.925493, 0.811956,0.0312,-0.811956, + 0.925493,0.0312,-0.679207, 0.770779,0.018225,-0.565664, 0.676222,0.018225,-0.676222, + 0.676222,0.018225,-0.676222, 0.811956,0.0312,-0.811956, 0.925493,0.0312,-0.679207, + 1.017621,0.0312,-0.529441, 0.847506,0.018225,-0.440935, 0.770779,0.018225,-0.565664, + 0.770779,0.018225,-0.565664, 0.925493,0.0312,-0.679207, 1.017621,0.0312,-0.529441, + 1.086146,0.0312,-0.364854, 0.904575,0.018225,-0.303862, 0.847506,0.018225,-0.440935, + 0.847506,0.018225,-0.440935, 1.017621,0.0312,-0.529441, 1.086146,0.0312,-0.364854, + 1.12887,0.0312,-0.187642, 0.940158,0.018225,-0.156274, 0.904575,0.018225,-0.303862, + 0.904575,0.018225,-0.303862, 1.086146,0.0312,-0.364854, 1.12887,0.0312,-0.187642, + 1.1436,0.0312,0, 0.952425,0.018225,0, 0.940158,0.018225,-0.156274, + 0.940158,0.018225,-0.156274, 1.12887,0.0312,-0.187642, 1.1436,0.0312,0, + 0.21074,0.046875,-1.267832, 0.187642,0.0312,-1.12887, 0,0.0312,-1.1436, + 0,0.0312,-1.1436, 0,0.046875,-1.284375, 0.21074,0.046875,-1.267832, + 0.409767,0.046875,-1.219848, 0.364854,0.0312,-1.086146, 0.187642,0.0312,-1.12887, + 0.187642,0.0312,-1.12887, 0.21074,0.046875,-1.267832, 0.409767,0.046875,-1.219848, + 0.594614,0.046875,-1.142888, 0.529441,0.0312,-1.017621, 0.364854,0.0312,-1.086146, + 0.364854,0.0312,-1.086146, 0.409767,0.046875,-1.219848, 0.594614,0.046875,-1.142888, + 0.762816,0.046875,-1.039419, 0.679207,0.0312,-0.925493, 0.529441,0.0312,-1.017621, + 0.529441,0.0312,-1.017621, 0.594614,0.046875,-1.142888, 0.762816,0.046875,-1.039419, + 0.911906,0.046875,-0.911906, 0.811956,0.0312,-0.811956, 0.679207,0.0312,-0.925493, + 0.679207,0.0312,-0.925493, 0.762816,0.046875,-1.039419, 0.911906,0.046875,-0.911906, + 1.039419,0.046875,-0.762816, 0.925493,0.0312,-0.679207, 0.811956,0.0312,-0.811956, + 0.811956,0.0312,-0.811956, 0.911906,0.046875,-0.911906, 1.039419,0.046875,-0.762816, + 1.142888,0.046875,-0.594614, 1.017621,0.0312,-0.529441, 0.925493,0.0312,-0.679207, + 0.925493,0.0312,-0.679207, 1.039419,0.046875,-0.762816, 1.142888,0.046875,-0.594614, + 1.219848,0.046875,-0.409767, 1.086146,0.0312,-0.364854, 1.017621,0.0312,-0.529441, + 1.017621,0.0312,-0.529441, 1.142888,0.046875,-0.594614, 1.219848,0.046875,-0.409767, + 1.267832,0.046875,-0.21074, 1.12887,0.0312,-0.187642, 1.086146,0.0312,-0.364854, + 1.086146,0.0312,-0.364854, 1.219848,0.046875,-0.409767, 1.267832,0.046875,-0.21074, + 1.284375,0.046875,0, 1.1436,0.0312,0, 1.12887,0.0312,-0.187642, + 1.12887,0.0312,-0.187642, 1.267832,0.046875,-0.21074, 1.284375,0.046875,0, + 0.226824,0.0648,-1.364595, 0.21074,0.046875,-1.267832, 0,0.046875,-1.284375, + 0,0.046875,-1.284375, 0,0.0648,-1.3824, 0.226824,0.0648,-1.364595, + 0.441041,0.0648,-1.312948, 0.409767,0.046875,-1.219848, 0.21074,0.046875,-1.267832, + 0.21074,0.046875,-1.267832, 0.226824,0.0648,-1.364595, 0.441041,0.0648,-1.312948, + 0.639996,0.0648,-1.230115, 0.594614,0.046875,-1.142888, 0.409767,0.046875,-1.219848, + 0.409767,0.046875,-1.219848, 0.441041,0.0648,-1.312948, 0.639996,0.0648,-1.230115, + 0.821035,0.0648,-1.118749, 0.762816,0.046875,-1.039419, 0.594614,0.046875,-1.142888, + 0.594614,0.046875,-1.142888, 0.639996,0.0648,-1.230115, 0.821035,0.0648,-1.118749, + 0.981504,0.0648,-0.981504, 0.911906,0.046875,-0.911906, 0.762816,0.046875,-1.039419, + 0.762816,0.046875,-1.039419, 0.821035,0.0648,-1.118749, 0.981504,0.0648,-0.981504, + 1.118749,0.0648,-0.821035, 1.039419,0.046875,-0.762816, 0.911906,0.046875,-0.911906, + 0.911906,0.046875,-0.911906, 0.981504,0.0648,-0.981504, 1.118749,0.0648,-0.821035, + 1.230115,0.0648,-0.639996, 1.142888,0.046875,-0.594614, 1.039419,0.046875,-0.762816, + 1.039419,0.046875,-0.762816, 1.118749,0.0648,-0.821035, 1.230115,0.0648,-0.639996, + 1.312948,0.0648,-0.441041, 1.219848,0.046875,-0.409767, 1.142888,0.046875,-0.594614, + 1.142888,0.046875,-0.594614, 1.230115,0.0648,-0.639996, 1.312948,0.0648,-0.441041, + 1.364595,0.0648,-0.226824, 1.267832,0.046875,-0.21074, 1.219848,0.046875,-0.409767, + 1.219848,0.046875,-0.409767, 1.312948,0.0648,-0.441041, 1.364595,0.0648,-0.226824, + 1.3824,0.0648,0, 1.284375,0.046875,0, 1.267832,0.046875,-0.21074, + 1.267832,0.046875,-0.21074, 1.364595,0.0648,-0.226824, 1.3824,0.0648,0, + 0.237149,0.084525,-1.426709, 0.226824,0.0648,-1.364595, 0,0.0648,-1.3824, + 0,0.0648,-1.3824, 0,0.084525,-1.445325, 0.237149,0.084525,-1.426709, + 0.461116,0.084525,-1.372712, 0.441041,0.0648,-1.312948, 0.226824,0.0648,-1.364595, + 0.226824,0.0648,-1.364595, 0.237149,0.084525,-1.426709, 0.461116,0.084525,-1.372712, + 0.669128,0.084525,-1.286108, 0.639996,0.0648,-1.230115, 0.441041,0.0648,-1.312948, + 0.441041,0.0648,-1.312948, 0.461116,0.084525,-1.372712, 0.669128,0.084525,-1.286108, + 0.858407,0.084525,-1.169673, 0.821035,0.0648,-1.118749, 0.639996,0.0648,-1.230115, + 0.639996,0.0648,-1.230115, 0.669128,0.084525,-1.286108, 0.858407,0.084525,-1.169673, + 1.026181,0.084525,-1.026181, 0.981504,0.0648,-0.981504, 0.821035,0.0648,-1.118749, + 0.821035,0.0648,-1.118749, 0.858407,0.084525,-1.169673, 1.026181,0.084525,-1.026181, + 1.169673,0.084525,-0.858407, 1.118749,0.0648,-0.821035, 0.981504,0.0648,-0.981504, + 0.981504,0.0648,-0.981504, 1.026181,0.084525,-1.026181, 1.169673,0.084525,-0.858407, + 1.286108,0.084525,-0.669128, 1.230115,0.0648,-0.639996, 1.118749,0.0648,-0.821035, + 1.118749,0.0648,-0.821035, 1.169673,0.084525,-0.858407, 1.286108,0.084525,-0.669128, + 1.372712,0.084525,-0.461116, 1.312948,0.0648,-0.441041, 1.230115,0.0648,-0.639996, + 1.230115,0.0648,-0.639996, 1.286108,0.084525,-0.669128, 1.372712,0.084525,-0.461116, + 1.426709,0.084525,-0.237149, 1.364595,0.0648,-0.226824, 1.312948,0.0648,-0.441041, + 1.312948,0.0648,-0.441041, 1.372712,0.084525,-0.461116, 1.426709,0.084525,-0.237149, + 1.445325,0.084525,0, 1.3824,0.0648,0, 1.364595,0.0648,-0.226824, + 1.364595,0.0648,-0.226824, 1.426709,0.084525,-0.237149, 1.445325,0.084525,0, + 0.24297,0.1056,-1.461727, 0.237149,0.084525,-1.426709, 0,0.084525,-1.445325, + 0,0.084525,-1.445325, 0,0.1056,-1.4808, 0.24297,0.1056,-1.461727, + 0.472434,0.1056,-1.406405, 0.461116,0.084525,-1.372712, 0.237149,0.084525,-1.426709, + 0.237149,0.084525,-1.426709, 0.24297,0.1056,-1.461727, 0.472434,0.1056,-1.406405, + 0.685551,0.1056,-1.317675, 0.669128,0.084525,-1.286108, 0.461116,0.084525,-1.372712, + 0.461116,0.084525,-1.372712, 0.472434,0.1056,-1.406405, 0.685551,0.1056,-1.317675, + 0.879477,0.1056,-1.198382, 0.858407,0.084525,-1.169673, 0.669128,0.084525,-1.286108, + 0.669128,0.084525,-1.286108, 0.685551,0.1056,-1.317675, 0.879477,0.1056,-1.198382, + 1.051368,0.1056,-1.051368, 1.026181,0.084525,-1.026181, 0.858407,0.084525,-1.169673, + 0.858407,0.084525,-1.169673, 0.879477,0.1056,-1.198382, 1.051368,0.1056,-1.051368, + 1.198382,0.1056,-0.879477, 1.169673,0.084525,-0.858407, 1.026181,0.084525,-1.026181, + 1.026181,0.084525,-1.026181, 1.051368,0.1056,-1.051368, 1.198382,0.1056,-0.879477, + 1.317675,0.1056,-0.685551, 1.286108,0.084525,-0.669128, 1.169673,0.084525,-0.858407, + 1.169673,0.084525,-0.858407, 1.198382,0.1056,-0.879477, 1.317675,0.1056,-0.685551, + 1.406405,0.1056,-0.472434, 1.372712,0.084525,-0.461116, 1.286108,0.084525,-0.669128, + 1.286108,0.084525,-0.669128, 1.317675,0.1056,-0.685551, 1.406405,0.1056,-0.472434, + 1.461727,0.1056,-0.24297, 1.426709,0.084525,-0.237149, 1.372712,0.084525,-0.461116, + 1.372712,0.084525,-0.461116, 1.406405,0.1056,-0.472434, 1.461727,0.1056,-0.24297, + 1.4808,0.1056,0, 1.445325,0.084525,0, 1.426709,0.084525,-0.237149, + 1.426709,0.084525,-0.237149, 1.461727,0.1056,-0.24297, 1.4808,0.1056,0, + 0.245542,0.127575,-1.4772, 0.24297,0.1056,-1.461727, 0,0.1056,-1.4808, + 0,0.1056,-1.4808, 0,0.127575,-1.496475, 0.245542,0.127575,-1.4772, + 0.477435,0.127575,-1.421292, 0.472434,0.1056,-1.406405, 0.24297,0.1056,-1.461727, + 0.24297,0.1056,-1.461727, 0.245542,0.127575,-1.4772, 0.477435,0.127575,-1.421292, + 0.692808,0.127575,-1.331623, 0.685551,0.1056,-1.317675, 0.472434,0.1056,-1.406405, + 0.472434,0.1056,-1.406405, 0.477435,0.127575,-1.421292, 0.692808,0.127575,-1.331623, + 0.888786,0.127575,-1.211067, 0.879477,0.1056,-1.198382, 0.685551,0.1056,-1.317675, + 0.685551,0.1056,-1.317675, 0.692808,0.127575,-1.331623, 0.888786,0.127575,-1.211067, + 1.062497,0.127575,-1.062497, 1.051368,0.1056,-1.051368, 0.879477,0.1056,-1.198382, + 0.879477,0.1056,-1.198382, 0.888786,0.127575,-1.211067, 1.062497,0.127575,-1.062497, + 1.211067,0.127575,-0.888786, 1.198382,0.1056,-0.879477, 1.051368,0.1056,-1.051368, + 1.051368,0.1056,-1.051368, 1.062497,0.127575,-1.062497, 1.211067,0.127575,-0.888786, + 1.331623,0.127575,-0.692808, 1.317675,0.1056,-0.685551, 1.198382,0.1056,-0.879477, + 1.198382,0.1056,-0.879477, 1.211067,0.127575,-0.888786, 1.331623,0.127575,-0.692808, + 1.421292,0.127575,-0.477435, 1.406405,0.1056,-0.472434, 1.317675,0.1056,-0.685551, + 1.317675,0.1056,-0.685551, 1.331623,0.127575,-0.692808, 1.421292,0.127575,-0.477435, + 1.4772,0.127575,-0.245542, 1.461727,0.1056,-0.24297, 1.406405,0.1056,-0.472434, + 1.406405,0.1056,-0.472434, 1.421292,0.127575,-0.477435, 1.4772,0.127575,-0.245542, + 1.496475,0.127575,0, 1.4808,0.1056,0, 1.461727,0.1056,-0.24297, + 1.461727,0.1056,-0.24297, 1.4772,0.127575,-0.245542, 1.496475,0.127575,0, + 0.24612,0.15,-1.48068, 0.245542,0.127575,-1.4772, 0,0.127575,-1.496475, + 0,0.127575,-1.496475, 0,0.15,-1.5, 0.24612,0.15,-1.48068, + 0.47856,0.15,-1.42464, 0.477435,0.127575,-1.421292, 0.245542,0.127575,-1.4772, + 0.245542,0.127575,-1.4772, 0.24612,0.15,-1.48068, 0.47856,0.15,-1.42464, + 0.69444,0.15,-1.33476, 0.692808,0.127575,-1.331623, 0.477435,0.127575,-1.421292, + 0.477435,0.127575,-1.421292, 0.47856,0.15,-1.42464, 0.69444,0.15,-1.33476, + 0.89088,0.15,-1.21392, 0.888786,0.127575,-1.211067, 0.692808,0.127575,-1.331623, + 0.692808,0.127575,-1.331623, 0.69444,0.15,-1.33476, 0.89088,0.15,-1.21392, + 1.065,0.15,-1.065, 1.062497,0.127575,-1.062497, 0.888786,0.127575,-1.211067, + 0.888786,0.127575,-1.211067, 0.89088,0.15,-1.21392, 1.065,0.15,-1.065, + 1.21392,0.15,-0.89088, 1.211067,0.127575,-0.888786, 1.062497,0.127575,-1.062497, + 1.062497,0.127575,-1.062497, 1.065,0.15,-1.065, 1.21392,0.15,-0.89088, + 1.33476,0.15,-0.69444, 1.331623,0.127575,-0.692808, 1.211067,0.127575,-0.888786, + 1.211067,0.127575,-0.888786, 1.21392,0.15,-0.89088, 1.33476,0.15,-0.69444, + 1.42464,0.15,-0.47856, 1.421292,0.127575,-0.477435, 1.331623,0.127575,-0.692808, + 1.331623,0.127575,-0.692808, 1.33476,0.15,-0.69444, 1.42464,0.15,-0.47856, + 1.48068,0.15,-0.24612, 1.4772,0.127575,-0.245542, 1.421292,0.127575,-0.477435, + 1.421292,0.127575,-0.477435, 1.42464,0.15,-0.47856, 1.48068,0.15,-0.24612, + 1.5,0.15,0, 1.496475,0.127575,0, 1.4772,0.127575,-0.245542, + 1.4772,0.127575,-0.245542, 1.48068,0.15,-0.24612, 1.5,0.15,0 +}; diff --git a/hacks/glx/topblock.c b/hacks/glx/topblock.c index 008882d3..6523102a 100644 --- a/hacks/glx/topblock.c +++ b/hacks/glx/topblock.c @@ -72,22 +72,22 @@ typedef struct } topBlockSTATE; /* parameter vars */ -Bool override; -Bool rotate; -Bool follow; -Bool drawCarpet; -Bool drawBlob; -Bool drawNipples; -GLfloat rotateSpeed; -GLfloat camX; -GLfloat camY; -GLfloat camZ; -GLfloat dropSpeed; -int maxFalling; -int maxColors; -int size; -int spawn; -int resolution; +static Bool override; +static Bool rotate; +static Bool follow; +static Bool drawCarpet; +static Bool drawBlob; +static Bool drawNipples; +static GLfloat rotateSpeed; +static GLfloat camX; +static GLfloat camY; +static GLfloat camZ; +static GLfloat dropSpeed; +static int maxFalling; +static int maxColors; +static int size; +static int spawn; +static int resolution; static XrmOptionDescRec opts[] = { { "-size", ".size", XrmoptionSepArg, 0 }, @@ -147,7 +147,7 @@ static argtype vars[] = { static topBlockSTATE *tbs = NULL; -ModeSpecOpt topBlock_opts = {countof(opts), opts, countof(vars), vars, NULL}; +static ModeSpecOpt topBlock_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void @@ -319,13 +319,10 @@ draw_topBlock (ModeInfo *mi) followBlock(mi); } - glScalef (-1, 1, 1); - glTranslatef (0, 0, -10); - glRotatef(-current_device_rotation(), 0, 0, 1); + /* Rotate the scene around a point that's a little higher up. */ + glTranslatef (0, 0, -5); gltrackball_rotate (tb->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); - glTranslatef (0, 0, 10); - glScalef (-1, 1, 1); + glTranslatef (0, 0, 5); /* rotate the world */ glRotatef(tb->rotation, 0.0, 0.0, 1.0); diff --git a/hacks/glx/trackball.c b/hacks/glx/trackball.c index 617a0bb1..429ade91 100644 --- a/hacks/glx/trackball.c +++ b/hacks/glx/trackball.c @@ -72,6 +72,7 @@ */ static float tb_project_to_sphere(float, float, float); static void normalize_quat(float [4]); +static void axis_to_quat(float a[3], float phi, float q[4]); static void vzero(float *v) diff --git a/hacks/glx/trackball.h b/hacks/glx/trackball.h index f7da9509..4b84ab71 100644 --- a/hacks/glx/trackball.h +++ b/hacks/glx/trackball.h @@ -76,7 +76,7 @@ build_rotmatrix(float m[4][4], float q[4]); * the given vector) and an angle about which to rotate. The angle is * expressed in radians. The result is put into the third argument. */ -void -axis_to_quat(float a[3], float phi, float q[4]); +/* void +axis_to_quat(float a[3], float phi, float q[4]); */ #endif /* __TRACKBALL_H__ */ diff --git a/hacks/glx/tronbit.c b/hacks/glx/tronbit.c index 261aca3c..3ab69f1d 100644 --- a/hacks/glx/tronbit.c +++ b/hacks/glx/tronbit.c @@ -505,7 +505,6 @@ draw_bit (ModeInfo *mi) glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); - glScalef(1.1, 1.1, 1.1); { @@ -514,10 +513,7 @@ draw_bit (ModeInfo *mi) glTranslatef((x - 0.5) * 11, (y - 0.5) * 5, (z - 0.5) * 3); - - glRotatef(-current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); - glRotatef(current_device_rotation(), 0, 0, 1); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); diff --git a/hacks/glx/tunnel_draw.c b/hacks/glx/tunnel_draw.c index 54132fbe..333161bb 100644 --- a/hacks/glx/tunnel_draw.c +++ b/hacks/glx/tunnel_draw.c @@ -111,7 +111,8 @@ struct tunnel_state { }; /*=================== Vector normalization ==================================*/ -static void normalize(cvPoint *V) +static void +normalize(cvPoint *V) { float d; @@ -125,7 +126,8 @@ static void normalize(cvPoint *V) } /*=================== C = A x B (Vector multiply) ==========================*/ #if 0 -static void vect_mult(cvPoint *A, cvPoint *B, cvPoint *C) +static void +vect_mult(cvPoint *A, cvPoint *B, cvPoint *C) { /* Vector multiply */ C->x = A->y*B->z - A->z*B->y; @@ -135,7 +137,8 @@ static void vect_mult(cvPoint *A, cvPoint *B, cvPoint *C) #endif /* Catmull-Rom Curve calculations */ -static void cvCatmullRom(cvPoint *p, float t, cvPoint *outp) +static void +cvCatmullRom(cvPoint *p, float t, cvPoint *outp) { float t2, t3, t1; @@ -156,7 +159,8 @@ static void cvCatmullRom(cvPoint *p, float t, cvPoint *outp) // outp - output point //========================================================================== */ -static void RotateAroundLine(cvPoint *p, cvPoint *pp, cvPoint *pl, float a, cvPoint *outp) +static void +RotateAroundLine(cvPoint *p, cvPoint *pp, cvPoint *pl, float a, cvPoint *outp) { cvPoint p1, p2; float l, m, n, ca, sa; @@ -183,7 +187,8 @@ static void RotateAroundLine(cvPoint *p, cvPoint *pp, cvPoint *pl, float a, cvPo /*=================== Load camera and tunnel path ==========================*/ -static void LoadPath(struct tunnel_state *st) +static void +LoadPath(struct tunnel_state *st) { float x, y, z; tnPath *path1=NULL, *path2=NULL; @@ -222,7 +227,7 @@ static void LoadPath(struct tunnel_state *st) /*=================== Tunnel Initialization ================================*/ struct tunnel_state * -InitTunnel(void) +atunnel_InitTunnel(void) { struct tunnel_state *st = (struct tunnel_state *) calloc (1, sizeof(*st)); LoadPath(st); @@ -230,7 +235,8 @@ InitTunnel(void) return st; } -void DrawTunnel(struct tunnel_state *st, +void +atunnel_DrawTunnel(struct tunnel_state *st, int do_texture, int do_light, GLuint *textures) { tnPath *p, *p1, *cmpos; @@ -438,7 +444,8 @@ void DrawTunnel(struct tunnel_state *st, } /* =================== Show splash screen =================================== */ -void SplashScreen(struct tunnel_state *st, +void +atunnel_SplashScreen(struct tunnel_state *st, int do_wire, int do_texture, int do_light) { if (st->ModeX > 0) @@ -496,7 +503,8 @@ void SplashScreen(struct tunnel_state *st, } } -void FreeTunnel(struct tunnel_state *st) +void +atunnel_FreeTunnel(struct tunnel_state *st) { free (st); } diff --git a/hacks/glx/tunnel_draw.h b/hacks/glx/tunnel_draw.h index 3ada23a6..643b9584 100644 --- a/hacks/glx/tunnel_draw.h +++ b/hacks/glx/tunnel_draw.h @@ -2,10 +2,10 @@ struct tunnel_state; -extern struct tunnel_state * InitTunnel(void); -extern void DrawTunnel(struct tunnel_state *, +extern struct tunnel_state * atunnel_InitTunnel(void); +extern void atunnel_DrawTunnel(struct tunnel_state *, int do_texture, int do_light, GLuint *textures); -extern void SplashScreen(struct tunnel_state *, +extern void atunnel_SplashScreen(struct tunnel_state *, int do_wire, int do_texture, int do_light); -extern void FreeTunnel(struct tunnel_state *); +extern void atunnel_FreeTunnel(struct tunnel_state *); diff --git a/hacks/goop.c b/hacks/goop.c index d2308386..02a5b113 100644 --- a/hacks/goop.c +++ b/hacks/goop.c @@ -339,7 +339,9 @@ make_goop (Screen *screen, Visual *visual, Window window, Colormap cmap, goop->nlayers = get_integer_resource (dpy, "planes", "Planes"); if (goop->nlayers <= 0) goop->nlayers = (random() % (depth-2)) + 2; - goop->layers = (struct layer **) malloc(sizeof(*goop->layers)*goop->nlayers); + if (! goop->layers) + goop->layers = (struct layer **) + malloc(sizeof(*goop->layers)*goop->nlayers); goop->additive_p = get_boolean_resource (dpy, "additive", "Additive"); goop->cmap_p = has_writable_cells (screen, visual); @@ -542,7 +544,11 @@ static void goop_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { - /* #### write me */ + struct goop *goop = (struct goop *) closure; + + /* #### leaks like crazy */ + struct goop *goop2 = goop_init (dpy, window); + memcpy (goop, goop2, sizeof(*goop)); } static Bool diff --git a/hacks/grav.c b/hacks/grav.c index ef8a92d7..a6ea6312 100644 --- a/hacks/grav.c +++ b/hacks/grav.c @@ -35,7 +35,6 @@ static const char sccsid[] = "@(#)grav.c 5.00 2000/11/01 xlockmore"; "*fpsSolid: true \n" \ #define BRIGHT_COLORS -# define reshape_grav 0 # define grav_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -327,6 +326,15 @@ draw_grav(ModeInfo * mi) draw_planet(mi, &gp->planets[ball]); } +ENTRYPOINT void +reshape_grav(ModeInfo * mi, int width, int height) +{ + gravstruct *gp = &gravs[MI_SCREEN(mi)]; + gp->width = width; + gp->height = height; + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); +} + ENTRYPOINT void release_grav(ModeInfo * mi) { diff --git a/hacks/interference.c b/hacks/interference.c index e1eebb67..60607981 100644 --- a/hacks/interference.c +++ b/hacks/interference.c @@ -457,6 +457,9 @@ static void interference_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct inter_context *c = (struct inter_context *) closure; + c->w = w; + c->h = h; } static Bool diff --git a/hacks/julia.c b/hacks/julia.c index f0236617..fe7ad436 100644 --- a/hacks/julia.c +++ b/hacks/julia.c @@ -45,33 +45,15 @@ static const char sccsid[] = "@(#)julia.c 4.03 97/04/10 xlockmore"; "*fpsSolid: true \n" \ # define UNIFORM_COLORS -# define reshape_julia 0 -# define julia_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* !STANDALONE */ -static Bool track_p; - #define DEF_MOUSE "False" -static XrmOptionDescRec opts[] = -{ - {"-mouse", ".julia.mouse", XrmoptionNoArg, "on"}, - {"+mouse", ".julia.mouse", XrmoptionNoArg, "off"}, -}; -static argtype vars[] = -{ - {&track_p, "mouse", "Mouse", DEF_MOUSE, t_Bool}, -}; -static OptionStruct desc[] = -{ - {"-/+mouse", "turn on/off mouse tracking"}, -}; - -ENTRYPOINT ModeSpecOpt julia_opts = { 2, opts, 1, vars, desc }; +ENTRYPOINT ModeSpecOpt julia_opts = { 0, }; #define numpoints ((0x2<depth)-1) @@ -96,6 +78,8 @@ typedef struct { #endif GC stippledGC; XPoint **pointBuffer; /* pointer for XDrawPoints */ + Bool button_down_p; + int mouse_x, mouse_y; } juliastruct; @@ -140,28 +124,13 @@ apply(juliastruct * jp, register double xr, register double xi, int d) static void incr(ModeInfo * mi, juliastruct * jp) { - int cx, cy; - - if (track_p) + if (jp->button_down_p) { - Window r, c; - int rx, ry; - unsigned int m; - XQueryPointer(MI_DISPLAY(mi), MI_WINDOW(mi), - &r, &c, &rx, &ry, &cx, &cy, &m); - if (cx <= 0 || cy <= 0 || - cx >= MI_WIN_WIDTH(mi) || cy >= MI_WIN_HEIGHT(mi)) - goto NOTRACK; - } - - if (track_p) - { - jp->cr = ((double) (cx + 2 - jp->centerx)) * 2 / jp->centerx; - jp->ci = ((double) (cy + 2 - jp->centery)) * 2 / jp->centery; + jp->cr = ((double) (jp->mouse_x + 2 - jp->centerx)) * 2 / jp->centerx; + jp->ci = ((double) (jp->mouse_y + 2 - jp->centery)) * 2 / jp->centery; } else { - NOTRACK: #if 0 jp->cr = 1.5 * (sin(M_PI * (jp->inc / 300.0)) * sin(jp->inc * M_PI / 200.0)); @@ -207,7 +176,7 @@ init_julia(ModeInfo * mi) #ifndef HAVE_COCOA - if (track_p && !jp->cursor) + if (jp->button_down_p && !jp->cursor && !jp->cursor) { Pixmap bit; XColor black; @@ -230,7 +199,7 @@ init_julia(ModeInfo * mi) if (jp->pixmap == None) { GC fg_gc = None, bg_gc = None; - jp->circsize = (MIN(jp->centerx, jp->centery) / 96) * 2 + 1; + jp->circsize = MAX(8, (MIN(jp->centerx, jp->centery) / 96) * 2 + 1); jp->pixmap = XCreatePixmap(display, window, jp->circsize, jp->circsize, 1); gcv.foreground = 1; fg_gc = XCreateGC(display, jp->pixmap, GCForeground, &gcv); @@ -284,6 +253,44 @@ init_julia(ModeInfo * mi) } +static void +reshape_julia (ModeInfo *mi, int w, int h) +{ + init_julia (mi); +} + + +ENTRYPOINT Bool +julia_handle_event (ModeInfo *mi, XEvent *event) +{ + juliastruct *jp = &julias[MI_SCREEN(mi)]; + + if (event->xany.type == ButtonPress && + event->xbutton.button == Button1) + { + jp->button_down_p = True; + jp->mouse_x = event->xbutton.x; + jp->mouse_y = event->xbutton.y; + return True; + } + else if (event->xany.type == ButtonRelease && + event->xbutton.button == Button1) + { + jp->button_down_p = False; + return True; + } + else if (event->xany.type == MotionNotify && jp->button_down_p) + { + jp->mouse_x = event->xmotion.x; + jp->mouse_y = event->xmotion.y; + return True; + } + + return False; +} + + + /* hack: moved here by jwz. */ #define ERASE_IMAGE(d,w,g,x,y,xl,yl,xs,ys) \ if (ylcenterx * jp->cr / 2) + jp->centerx - 2; new_circle.y = (int) (jp->centery * jp->ci / 2) + jp->centery - 2; XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi)); - ERASE_IMAGE(display, window, gc, new_circle.x, new_circle.y, - old_circle.x, old_circle.y, jp->circsize, jp->circsize); + XFillArc(display, window, gc, + old_circle.x-jp->circsize/2-2, + old_circle.y-jp->circsize/2-2, + jp->circsize+4, jp->circsize+4, + 0, 360*64); /* draw a circle at the c-parameter so you can see it's effect on the structure of the julia set */ XSetForeground(display, jp->stippledGC, MI_WIN_WHITE_PIXEL(mi)); @@ -328,8 +338,12 @@ draw_julia (ModeInfo * mi) XSetStipple(display, jp->stippledGC, jp->pixmap); XSetFillStyle(display, jp->stippledGC, FillOpaqueStippled); #endif /* HAVE_COCOA */ - XFillRectangle(display, window, jp->stippledGC, new_circle.x, new_circle.y, - jp->circsize, jp->circsize); + XDrawArc(display, window, jp->stippledGC, + new_circle.x-jp->circsize/2, + new_circle.y-jp->circsize/2, + jp->circsize, jp->circsize, + 0, 360*64); + if (jp->erase == 1) { XDrawPoints(display, window, gc, jp->pointBuffer[jp->buffer], numpoints, CoordModeOrigin); diff --git a/hacks/julia.man b/hacks/julia.man index a27e2e38..4e0f2e82 100644 --- a/hacks/julia.man +++ b/hacks/julia.man @@ -3,7 +3,7 @@ julia - draws spinning, animating julia-set fractals .SH SYNOPSIS .B julia -[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-cycles \fIinteger\fP] [\-count \fIinteger\fP] [\-mouse] [\-nomouse] +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-cycles \fIinteger\fP] [\-count \fIinteger\fP] [\-fps] .SH DESCRIPTION @@ -19,6 +19,8 @@ dx266 and it looks okay. The sinusoidal variation of the parameter might not be as interesting as it could, but it still gives an idea of the effect of the parameter. +Dragging the mouse in the window uses the mouse's position as the +control point for the generation of ths set. .SH OPTIONS .I julia accepts the following options: @@ -48,14 +50,6 @@ the color wheel. .TP 8 .B \-count \fIinteger\fP - -.TP 8 -.B \-mouse -.TP 8 -.B \-nomouse -If \fI\-mouse\fP is specified, the control point of the Julia set will -be derived from the position of the mouse in the window. When the mouse -is not in the window, the control point is chosen the normal way. .TP 8 .B \-fps Display the current frame rate and CPU load. diff --git a/hacks/loop.c b/hacks/loop.c index 7b50a56a..7a998738 100644 --- a/hacks/loop.c +++ b/hacks/loop.c @@ -93,7 +93,6 @@ static const char sccsid[] = "@(#)loop.c 5.01 2000/03/15 xlockmore"; "*fpsSolid: true \n" \ # define UNIFORM_COLORS -# define reshape_loop 0 # define loop_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -1678,6 +1677,13 @@ draw_loop (ModeInfo * mi) } } +ENTRYPOINT void +reshape_loop(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_loop (mi); +} + ENTRYPOINT void refresh_loop (ModeInfo * mi) { diff --git a/hacks/m6502.c b/hacks/m6502.c index 8361fbd0..11a78743 100644 --- a/hacks/m6502.c +++ b/hacks/m6502.c @@ -23,11 +23,16 @@ ISO C89 compilers are required to support" when includng the following data file... */ # endif -const char * const demo_files[] = { +static const char * const demo_files[] = { # include "m6502.h" }; +#ifndef USE_IPHONE +# define READ_FILES +#endif + + /* We want to paint on a 32 by 32 grid of pixels. We will needed to divided the screen up into chuncks */ enum { @@ -74,7 +79,7 @@ start_rand_bin_prog(machine_6502 *machine, struct state *st){ while(n == st->which) n = random() % st->demos; st->which = n; - start_eval_string(machine, demo_files[st->which], plot6502, st); + m6502_start_eval_string(machine, demo_files[st->which], plot6502, st); } @@ -114,7 +119,6 @@ m6502_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); unsigned int x, y; - char *s = get_string_resource (dpy, "file", "File"); int n = get_integer_resource(dpy, "displaytime", "Displaytime"); int dh; st->demos = countof(demo_files); @@ -125,7 +129,7 @@ m6502_init (Display *dpy, Window window) st->tv=analogtv_allocate(st->dpy, st->window); analogtv_set_defaults(st->tv, ""); - st->machine = build6502(); + st->machine = m6502_build(); st->inp=analogtv_input_allocate(); analogtv_setup_sync(st->inp, 1, 0); @@ -141,10 +145,15 @@ m6502_init (Display *dpy, Window window) init_time(st); - if (strlen(s) > 0) - start_eval_file(st->machine,s, plot6502, st); + { +#ifdef READ_FILES + char *s = get_string_resource (dpy, "file", "File"); + if (strlen(s) > 0) + m6502_start_eval_file(st->machine,s, plot6502, st); else +#endif start_rand_bin_prog(st->machine,st); + } analogtv_lcp_to_ntsc(ANALOGTV_BLACK_LEVEL, 0.0, 0.0, st->field_ntsc); @@ -214,7 +223,7 @@ m6502_draw (Display *dpy, Window window, void *closure) unsigned int x = 0, y = 0; double te; - next_eval(st->machine,500); + m6502_next_eval(st->machine,500); for (x = 0; x < 32; x++) for (y = 0; y < 32; y++) diff --git a/hacks/memscroller.c b/hacks/memscroller.c index d82d16f5..afaed3c9 100644 --- a/hacks/memscroller.c +++ b/hacks/memscroller.c @@ -21,6 +21,10 @@ #undef countof #define countof(x) (sizeof(x)/sizeof(*(x))) +#ifndef USE_IPHONE +# define READ_FILES +#endif + typedef struct { int which; XRectangle rect; @@ -163,7 +167,9 @@ memscroller_init (Display *dpy, Window window) s = 0; +# ifdef READ_FILES st->filename = get_string_resource (dpy, "filename", "Filename"); +# endif if (!st->filename || !*st->filename || @@ -171,12 +177,16 @@ memscroller_init (Display *dpy, Window window) !strcasecmp (st->filename, "(mem)") || !strcasecmp (st->filename, "(memory)")) st->seed_mode = SEED_RAM; +# ifdef READ_FILES else if (st->filename && (!strcasecmp (st->filename, "(rand)") || !strcasecmp (st->filename, "(random)"))) st->seed_mode = SEED_RANDOM; else st->seed_mode = SEED_FILE; +# else + st->seed_mode = SEED_RANDOM; +# endif st->nscrollers = 3; st->scrollers = (scroller *) calloc (st->nscrollers, sizeof(scroller)); @@ -270,6 +280,7 @@ reshape_memscroller (state *st) +# ifdef READ_FILES static void open_file (state *st) { @@ -288,6 +299,7 @@ open_file (state *st) exit (1); } } +#endif static unsigned int @@ -416,6 +428,7 @@ more_bits (state *st, scroller *sc) pv = PACK(); break; +# ifdef READ_FILES case SEED_FILE: { int i; @@ -460,6 +473,7 @@ more_bits (state *st, scroller *sc) pv = PACK(); } break; +# endif /* READ_FILES */ default: abort(); diff --git a/hacks/moire2.c b/hacks/moire2.c index 72a2f4f2..441a3713 100644 --- a/hacks/moire2.c +++ b/hacks/moire2.c @@ -306,6 +306,8 @@ static void moire2_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->reset = 1; } static Bool diff --git a/hacks/mountain.c b/hacks/mountain.c index 1c4e64c0..82d5fce7 100644 --- a/hacks/mountain.c +++ b/hacks/mountain.c @@ -35,7 +35,6 @@ static const char sccsid[] = "@(#)mountain.c 5.00 2000/11/01 xlockmore"; "*fpsSolid: true \n" \ # define SMOOTH_COLORS -# define reshape_mountain 0 # define mountain_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -255,6 +254,14 @@ draw_mountain (ModeInfo * mi) } } +ENTRYPOINT void +reshape_mountain(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_mountain (mi); +} + + ENTRYPOINT void release_mountain (ModeInfo * mi) { diff --git a/hacks/munge-ad.pl b/hacks/munge-ad.pl index 4f44a8eb..77232143 100755 --- a/hacks/munge-ad.pl +++ b/hacks/munge-ad.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2008-2011 Jamie Zawinski +# Copyright © 2008-2012 Jamie Zawinski # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -18,7 +18,7 @@ use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my $version = q{ $Revision: 1.7 $ }; $version =~ s/^[^\d]+([\d.]+).*/$1/; +my $version = q{ $Revision: 1.8 $ }; $version =~ s/^[^\d]+([\d.]+).*/$1/; my $verbose = 0; @@ -111,7 +111,7 @@ sub munge_ad($) { open (IN, "<$xml") || error ("$xml: $!"); while () { $b .= $_; } close IN; - my ($name) = ($b =~ m@]*\b_label=\"([^<>\"]+)\">@s); + my ($name) = ($b =~ m@]*\b_label=\"([^<>\"]+)\"@s); error ("$xml: no name") unless $name; my $name2 = lc($name); diff --git a/hacks/noseguy.c b/hacks/noseguy.c index 108db35c..32b09e25 100644 --- a/hacks/noseguy.c +++ b/hacks/noseguy.c @@ -600,6 +600,9 @@ static void noseguy_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->Width = w + 2; + st->Height = h + 2; } static Bool diff --git a/hacks/pacman.c b/hacks/pacman.c index 226a3cf3..23fb3a1d 100644 --- a/hacks/pacman.c +++ b/hacks/pacman.c @@ -56,7 +56,6 @@ static const char sccsid[] = "@(#)pacman.c 5.00 2000/11/01 xlockmore"; # define UNIFORM_COLORS # define BRIGHT_COLORS -# define reshape_pacman 0 # define pacman_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include @@ -131,7 +130,7 @@ static XrmOptionDescRec opts[] = { }; static argtype vars[] = { - {&trackmouse, "trackmouse", "TrackMouse", DEF_TRACKMOUSE, t_Bool} + {&pacman_trackmouse, "trackmouse", "TrackMouse", DEF_TRACKMOUSE, t_Bool} }; static OptionStruct desc[] = { @@ -158,8 +157,8 @@ ModStruct pacman_description = { #endif -Bool trackmouse; -pacmangamestruct *pacmangames = (pacmangamestruct *) NULL; +Bool pacman_trackmouse; +pacmangamestruct *pacman_games = (pacmangamestruct *) NULL; static void repopulate (ModeInfo * mi); static void drawlevel (ModeInfo * mi); @@ -201,7 +200,7 @@ free_pacman (Display * display, pacmangamestruct * pp) static void reset_level (ModeInfo * mi, int n, int pac_init) { - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int ghost; MI_CLEARWINDOW (mi); @@ -251,9 +250,9 @@ reset_level (ModeInfo * mi, int n, int pac_init) pp->ghosts[ghost].delta.y = 0; pp->ghosts[ghost].flash_scared = False; pp->ghosts[ghost].wait_pos = False; - ghost_update (pp, &(pp->ghosts[ghost])); + pacman_ghost_update (pp, &(pp->ghosts[ghost])); } - pac_update (mi, pp, &(pp->pacman)); + pacman_update (mi, pp, &(pp->pacman)); } static int @@ -311,9 +310,9 @@ check_death (ModeInfo * mi, pacmangamestruct * pp) static void repopulate (ModeInfo * mi) { - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; pp->pacman.deaths = 0; - reset_level (mi, createnewlevel (pp), True); + reset_level (mi, pacman_createnewlevel (pp), True); check_death (mi, pp); } @@ -322,7 +321,7 @@ static void setwallcolor (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; if (MI_NPIXELS (mi) > 2) XSetForeground (display, pp->stippledGC, MI_PIXEL (mi, BLUE)); @@ -335,7 +334,7 @@ static void setdotcolor (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XSetForeground (display, pp->stippledGC, MI_WHITE_PIXEL (mi)); } @@ -344,7 +343,7 @@ static void cleardotcolor (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XSetForeground (display, pp->stippledGC, MI_BLACK_PIXEL (mi)); } @@ -355,7 +354,7 @@ draw_position (ModeInfo * mi, int x, int y, int color) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XFontStruct *font = NULL; char *f_name = "-*-utopia-*-r-*-*-*-600-*-*-p-*-*-*"; char *s = NULL; @@ -378,7 +377,7 @@ draw_number (ModeInfo * mi, int x, int y, int num, int color) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XFontStruct *font = NULL; char *f_name = "-*-utopia-*-r-*-*-*-600-*-*-p-*-*-*"; char *s = NULL; @@ -406,7 +405,7 @@ draw_grid (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; int h = MI_HEIGHT (mi); int w = MI_WIDTH (mi); int y = 0; @@ -430,7 +429,7 @@ draw_string (ModeInfo * mi, int x, int y, char *s, int color) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XFontStruct *font = NULL; char *f_name = "-*-utopia-*-r-*-*-*-600-*-*-p-*-*-*"; @@ -482,7 +481,7 @@ print_ghost_stats (ModeInfo *mi, ghoststruct *g , int ghost_num) static void print_pac_stats ( ModeInfo *mi, pacmanstruct *pac ) { - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; char s[1024]; sprintf (s, "Pacman, Deaths: %d", pac->deaths ); switch ( pac->aistate ){ @@ -516,7 +515,7 @@ print_pac_stats ( ModeInfo *mi, pacmanstruct *pac ) static void dot_rc_to_pixel (ModeInfo * mi, int *x, int *y) { - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; *x = (pp->xs * *x) + (pp->xs / 2) - (pp->xs > 32 ? (pp->xs / 16) : 1) + pp->xb; *y = (pp->ys * *y) + @@ -529,7 +528,7 @@ dot_rc_to_pixel (ModeInfo * mi, int *x, int *y) static void dot_width_height (ModeInfo *mi, int *w, int *h) { - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; if (pp->xs > 32){ *w = *h = (pp->xs / 32 ); }else { @@ -713,7 +712,7 @@ drawlevelblock (ModeInfo * mi, pacmangamestruct * pp, static void drawlevel (ModeInfo * mi) { - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int x, y; for (y = 0; y < LEVHEIGHT; y++) @@ -745,7 +744,7 @@ draw_pacman_sprite (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int dir = 0; int old_mask_dir = 0; int old_mask_mouth = 0; @@ -851,7 +850,7 @@ draw_ghost_sprite (ModeInfo * mi, const unsigned ghost) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; #define MAX_WAG_COUNT 50 unsigned int dir = 0; unsigned int fs = 0; /*flash scared*/ @@ -954,7 +953,7 @@ draw_pacman_sprite (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int dir; pp->pacman.cf = pp->pacman.col * pp->xs + pp->pacman.delta.x * @@ -1003,7 +1002,7 @@ draw_ghost_sprite (ModeInfo * mi, const unsigned ghost) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; pp->ghosts[ghost].cf = pp->ghosts[ghost].col * pp->xs + pp->ghosts[ghost].delta.x * @@ -1059,7 +1058,7 @@ ghost_over (ModeInfo * mi, int x, int y) { int ghost = 0; int ret = False; - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; dot_rc_to_pixel (mi, &x, &y); for (ghost = 0; ghost < pp->nghosts; ghost++) { if ((pp->ghosts[ghost].cf <= x @@ -1078,11 +1077,11 @@ static void flash_bonus_dots (ModeInfo * mi) { #define MAX_FLASH_COUNT 25 - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; int i, x, y; for (i = 0; i < NUM_BONUS_DOTS; i++) { - if (!bonus_dot_eaten (pp, i)) { - bonus_dot_pos (pp, i, &x, &y); + if (!pacman_bonus_dot_eaten (pp, i)) { + pacman_bonus_dot_pos (pp, i, &x, &y); if (ghost_over (mi, x, y)) continue; if (pp->bd_on) @@ -1105,10 +1104,10 @@ ate_bonus_dot (ModeInfo * mi) */ unsigned int ret = 0; int idx = 0; - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; - if (is_bonus_dot (pp, pp->pacman.col, pp->pacman.row, &idx)) { - ret = !bonus_dot_eaten (pp, idx); - eat_bonus_dot (pp, idx); + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; + if (pacman_is_bonus_dot (pp, pp->pacman.col, pp->pacman.row, &idx)) { + ret = !pacman_bonus_dot_eaten (pp, idx); + pacman_eat_bonus_dot (pp, idx); } return ret; } @@ -1117,7 +1116,7 @@ static void ghost_scared (ModeInfo * mi) { unsigned int ghost; - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; for (ghost = 0; ghost < pp->nghosts; ghost++) { if (pp->ghosts[ghost].aistate == goingin || pp->ghosts[ghost].aistate == goingout || @@ -1133,7 +1132,7 @@ static void ghost_not_scared (ModeInfo * mi) { unsigned int ghost; - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; for (ghost = 0; ghost < pp->nghosts; ghost++){ if (pp->ghosts[ghost].aistate == goingin || pp->ghosts[ghost].aistate == goingout || @@ -1149,7 +1148,7 @@ static void ghost_flash_scared (ModeInfo * mi) { unsigned int ghost; - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; for (ghost = 0; ghost < pp->nghosts; ghost++) pp->ghosts[ghost].flash_scared = !pp->ghosts[ghost].flash_scared; } @@ -1162,7 +1161,7 @@ pacman_tick (ModeInfo * mi) #define START_FLASH 200 #define FLASH_COUNT 25 - pacmangamestruct *pp = &pacmangames[MI_SCREEN (mi)]; + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int ghost; #if 0 draw_grid (mi); @@ -1491,13 +1490,13 @@ init_pacman (ModeInfo * mi) int dir, mouth; #endif - if (pacmangames == NULL) { - if ((pacmangames = (pacmangamestruct *) + if (pacman_games == NULL) { + if ((pacman_games = (pacmangamestruct *) calloc ((size_t) MI_NUM_SCREENS (mi), sizeof (pacmangamestruct))) == NULL) return; } - pp = &pacmangames[MI_SCREEN (mi)]; + pp = &pacman_games[MI_SCREEN (mi)]; pp->width = (unsigned short) MI_WIDTH (mi); pp->height = (unsigned short) MI_HEIGHT (mi); @@ -1710,9 +1709,9 @@ draw_pacman (ModeInfo * mi) unsigned int g; pacmangamestruct *pp; - if (pacmangames == NULL) + if (pacman_games == NULL) return; - pp = &pacmangames[MI_SCREEN (mi)]; + pp = &pacman_games[MI_SCREEN (mi)]; if (pp->ghosts == NULL) return; @@ -1722,7 +1721,7 @@ draw_pacman (ModeInfo * mi) pp->pacman.delta.y += pp->pacman.err.y != 0 ? pp->incy : 0; if (pp->pacman.delta.x >= pp->xs && pp->pacman.delta.y >= pp->ys) { - pac_update (mi, pp, &(pp->pacman)); + pacman_update (mi, pp, &(pp->pacman)); check_death (mi, pp); pp->pacman.delta.x = pp->incx; pp->pacman.delta.y = pp->incy; @@ -1741,7 +1740,7 @@ draw_pacman (ModeInfo * mi) if (pp->ghosts[g].delta.x >= pp->xs && pp->ghosts[g].delta.y >= pp->ys) { - ghost_update (pp, &(pp->ghosts[g])); + pacman_ghost_update (pp, &(pp->ghosts[g])); pp->ghosts[g].delta.x = pp->incx; pp->ghosts[g].delta.y = pp->incy; } @@ -1758,13 +1757,13 @@ draw_pacman (ModeInfo * mi) ENTRYPOINT void release_pacman (ModeInfo * mi) { - if (pacmangames != NULL) { + if (pacman_games != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS (mi); screen++) - free_pacman (MI_DISPLAY (mi), &pacmangames[screen]); - free (pacmangames); - pacmangames = (pacmangamestruct *) NULL; + free_pacman (MI_DISPLAY (mi), &pacman_games[screen]); + free (pacman_games); + pacman_games = (pacmangamestruct *) NULL; } } @@ -1776,6 +1775,17 @@ refresh_pacman (ModeInfo * mi) pacman_tick (mi); } +ENTRYPOINT void +reshape_pacman(ModeInfo * mi, int width, int height) +{ + pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; + pp->width = width; + pp->height = height; + MI_CLEARWINDOW (mi); + /* repopulate (mi); */ + drawlevel (mi); +} + #ifndef STANDALONE /* Callback to change level. */ ENTRYPOINT void diff --git a/hacks/pacman.h b/hacks/pacman.h index fbe1eae0..652ee314 100644 --- a/hacks/pacman.h +++ b/hacks/pacman.h @@ -223,8 +223,8 @@ typedef struct } pacmangamestruct; -extern pacmangamestruct *pacmangames; -extern Bool trackmouse; +extern pacmangamestruct *pacman_games; +extern Bool pacman_trackmouse; typedef char lev_t[LEVHEIGHT][LEVWIDTH + 1]; diff --git a/hacks/pacman_ai.c b/hacks/pacman_ai.c index 070f9aa5..b85bd96e 100644 --- a/hacks/pacman_ai.c +++ b/hacks/pacman_ai.c @@ -67,9 +67,9 @@ ghost_get_posdirs (pacmangamestruct * pp, int *posdirs, ghoststruct * g) /* check if possible direction */ can_go_in = (g->aistate == goingout || g->aistate == goingin); if ((posdirs[i] = - check_pos (pp, g->row + dirvecs[i].dy, - g->col + dirvecs[i].dx, - can_go_in)) == True) { + pacman_check_pos (pp, g->row + dirvecs[i].dy, + g->col + dirvecs[i].dx, + can_go_in)) == True) { nrdirs++; } } @@ -245,7 +245,7 @@ clear_dir ( ghoststruct *g ){ static int found_jail ( int col, int row ){ int cx, cy; - get_jail_opening ( &cx, &cy ); + pacman_get_jail_opening ( &cx, &cy ); cy += 1; if (row == cy && col == cx ) return 1; @@ -261,7 +261,7 @@ move_ghost ( pacmangamestruct * pp, int idx = (int)ps; int tr = row + dirvecs[idx].dx; int tc = col + dirvecs[idx].dy; - if ( check_pos ( pp, tr, tc, True )){ + if ( pacman_check_pos ( pp, tr, tc, True )){ *new_row = tr; *new_col = tc; return True; @@ -332,7 +332,7 @@ find_home ( pacmangamestruct *pp, ghoststruct *g ){ c = tmp_ghost->col; if ( ! recur_back_track ( pp, tmp_ghost, r, c ) ){ fprintf(stderr, "Could not find way home.#@$?\n"); - get_jail_opening ( &cx, &cy); + pacman_get_jail_opening ( &cx, &cy); fprintf(stderr, "Jail was at (%d%d)\n", cx,cy); } for ( i = 0; i < GHOST_TRACE; i++ ){ @@ -388,7 +388,7 @@ pac_dot_vec (pacmangamestruct * pp, pacmanstruct * p, long *vx, long *vy) for (y = by; y < ey; y++) for (x = bx; x < ex; x++) - if (check_dot (pp, x, y) == 1) { + if (pacman_check_dot (pp, x, y) == 1) { dx = (long) x - (long) (p->col); dy = (long) y - (long) (p->row); dist = dx * dx + dy * dy; @@ -451,8 +451,8 @@ pac_get_posdirs (pacmangamestruct * pp, pacmanstruct * p, int *posdirs) posdirs[i] = 0; } else if ((posdirs[i] = - check_pos (pp, p->row + dirvecs[i].dy, - p->col + dirvecs[i].dx, 0)) == 1) + pacman_check_pos (pp, p->row + dirvecs[i].dy, + p->col + dirvecs[i].dx, 0)) == 1) nrdirs++; } p->state_change = 0; @@ -462,7 +462,7 @@ pac_get_posdirs (pacmangamestruct * pp, pacmanstruct * p, int *posdirs) /* Clears the trace of vectors. */ void -pac_clear_trace (pacmanstruct * p) +pacman_clear_trace (pacmanstruct * p) { int i; @@ -517,14 +517,14 @@ pac_eating (pacmangamestruct * pp, pacmanstruct * p) 4 * 4 && p->aistate == ps_eating) { p->aistate = ps_hiding; p->state_change = 1; - pac_clear_trace (p); + pacman_clear_trace (p); } if (prox > 6 * 6 && p->aistate == ps_hiding) { p->aistate = ps_eating; if (p->justate == 0) p->state_change = 1; - pac_clear_trace (p); + pacman_clear_trace (p); } if (prox < 3 * 3) @@ -567,7 +567,7 @@ pac_eating (pacmangamestruct * pp, pacmanstruct * p) if (p->roundscore >= 12) { p->roundscore = 0; p->aistate = ps_random; - pac_clear_trace (p); + pacman_clear_trace (p); } } else @@ -580,8 +580,8 @@ pac_eating (pacmangamestruct * pp, pacmanstruct * p) if (posdirs[i] == 0) continue; score = dirvecs[i].dx * vx + dirvecs[i].dy * vy; - if (check_dot (pp, p->col + dirvecs[i].dx, - p->row + dirvecs[i].dy) == 1) { + if (pacman_check_dot (pp, p->col + dirvecs[i].dx, + p->row + dirvecs[i].dy) == 1) { if (dotfound == 0) { highest = score; dir = i; @@ -647,7 +647,7 @@ pac_chasing (pacmangamestruct * pp, pacmanstruct * p) if (p->roundscore >= 12) { p->roundscore = 0; p->aistate = ps_random; - pac_clear_trace (p); + pacman_clear_trace (p); } } else @@ -674,7 +674,7 @@ pac_random (pacmangamestruct * pp, pacmanstruct * p) if (NRAND (20) == 0) { p->aistate = ps_eating; p->state_change = 1; - pac_clear_trace (p); + pacman_clear_trace (p); } nrdirs = pac_get_posdirs (pp, p, posdirs); @@ -683,12 +683,12 @@ pac_random (pacmangamestruct * pp, pacmanstruct * p) if (posdirs[i] == 0) continue; lastdir = i; - if (check_dot (pp, p->col + dirvecs[i].dx, - p->row + dirvecs[i].dy) == 1) { + if (pacman_check_dot (pp, p->col + dirvecs[i].dx, + p->row + dirvecs[i].dy) == 1) { dir = i; p->aistate = ps_eating; p->state_change = 1; - pac_clear_trace (p); + pacman_clear_trace (p); break; } else if (NRAND (nrdirs) == 0) @@ -769,7 +769,7 @@ pac_trackmouse (ModeInfo * mi, pacmangamestruct * pp, pacmanstruct * p) /* Calls correct state function, and changes between states. */ void -ghost_update (pacmangamestruct * pp, ghoststruct * g) +pacman_ghost_update (pacmangamestruct * pp, ghoststruct * g) { if (!(g->nextrow == NOWHERE && g->nextcol == NOWHERE)) { @@ -833,7 +833,7 @@ ghost_update (pacmangamestruct * pp, ghoststruct * g) /* Calls correct pacman state function. */ void -pac_update (ModeInfo * mi, pacmangamestruct * pp, pacmanstruct * p) +pacman_update (ModeInfo * mi, pacmangamestruct * pp, pacmanstruct * p) { if (!(p->nextrow == NOWHERE && p->nextcol == NOWHERE)) { p->row = p->nextrow; @@ -843,15 +843,15 @@ pac_update (ModeInfo * mi, pacmangamestruct * pp, pacmanstruct * p) if (pp->level[p->row * LEVWIDTH + p->col] == '.' || pp->level[p->row * LEVWIDTH + p->col] == 'o') { pp->level[p->row * LEVWIDTH + p->col] = ' '; - if (!trackmouse) + if (!pacman_trackmouse) p->justate = 1; pp->dotsleft--; } - else if (!trackmouse) { + else if (!pacman_trackmouse) { p->justate = 0; } - if (!(trackmouse && pac_trackmouse (mi, pp, p))) { + if (!(pacman_trackmouse && pac_trackmouse (mi, pp, p))) { /* update pacman */ switch (p->aistate) { case ps_eating: diff --git a/hacks/pacman_ai.h b/hacks/pacman_ai.h index 2958210c..2488600a 100644 --- a/hacks/pacman_ai.h +++ b/hacks/pacman_ai.h @@ -24,9 +24,9 @@ #ifndef __PACMAN_AI_H__ #define __PACMAN_AI_H__ -extern void ghost_update (pacmangamestruct * pp, ghoststruct * g); -extern void pac_clear_trace (pacmanstruct * p); -extern void pac_update (ModeInfo * mi, pacmangamestruct * pp, +extern void pacman_ghost_update (pacmangamestruct * pp, ghoststruct * g); +extern void pacman_clear_trace (pacmanstruct * p); +extern void pacman_update (ModeInfo * mi, pacmangamestruct * pp, pacmanstruct * p); #endif /* __PACMAN_AI_H__ */ diff --git a/hacks/pacman_level.c b/hacks/pacman_level.c index 12e148f4..d617942c 100644 --- a/hacks/pacman_level.c +++ b/hacks/pacman_level.c @@ -223,7 +223,7 @@ createjail (lev_t * level, const unsigned width, const unsigned height) } void -get_jail_opening ( int *x, int *y) +pacman_get_jail_opening ( int *x, int *y) { int xstart = LEVWIDTH / 2 - JAILWIDTH / 2; int ystart = LEVHEIGHT / 2 - JAILHEIGHT / 2; @@ -535,7 +535,7 @@ init_bonus_dots (pacmangamestruct *pp, lev_t * level) } int -is_bonus_dot (pacmangamestruct *pp, int x, int y, int *idx) +pacman_is_bonus_dot (pacmangamestruct *pp, int x, int y, int *idx) { int ret = False; int i; @@ -557,21 +557,21 @@ check_bonus_idx (int idx) } int -bonus_dot_eaten (pacmangamestruct *pp, int idx) +pacman_bonus_dot_eaten (pacmangamestruct *pp, int idx) { check_bonus_idx (idx); return pp->bonus_dots[idx].eaten; } void -eat_bonus_dot (pacmangamestruct *pp, int idx) +pacman_eat_bonus_dot (pacmangamestruct *pp, int idx) { check_bonus_idx (idx); pp->bonus_dots[idx].eaten = True; } void -bonus_dot_pos (pacmangamestruct *pp, int idx, int *x, int *y) +pacman_bonus_dot_pos (pacmangamestruct *pp, int idx, int *x, int *y) { check_bonus_idx (idx); *x = pp->bonus_dots[idx].x; @@ -595,7 +595,7 @@ frmtlevel (pacmangamestruct *pp, lev_t * level) for (x = 0; x < LEVWIDTH; x++) { if (checkset (level, x, y) == 0) { - if (is_bonus_dot (pp, x, y, &idx)) { + if (pacman_is_bonus_dot (pp, x, y, &idx)) { frmtlev[y][x] = BLOCK_DOT_BONUS; } else { @@ -709,7 +709,7 @@ countdots (pacmangamestruct *pp) /* Creates a new level, and places that in the pacmangamestruct. */ int -createnewlevel (pacmangamestruct *pp) +pacman_createnewlevel (pacmangamestruct *pp) { lev_t *level; unsigned dirvec[1] = { GO_UP }; @@ -749,7 +749,7 @@ createnewlevel (pacmangamestruct *pp) /* Checks if a position is allowable for ghosts/pacs to enter. */ int -check_pos (pacmangamestruct * pp, int y, int x, int ghostpass) +pacman_check_pos (pacmangamestruct * pp, int y, int x, int ghostpass) { if ((pp->level[y * LEVWIDTH + x] == BLOCK_DOT_2) || (pp->level[y * LEVWIDTH + x] == BLOCK_EMPTY) || @@ -762,7 +762,7 @@ check_pos (pacmangamestruct * pp, int y, int x, int ghostpass) /* Checks if there is a dot on the specified position in the level. */ int -check_dot (pacmangamestruct * pp, unsigned int x, unsigned int y) +pacman_check_dot (pacmangamestruct * pp, unsigned int x, unsigned int y) { if (x >= LEVWIDTH || y >= LEVHEIGHT) return 0; diff --git a/hacks/pacman_level.h b/hacks/pacman_level.h index 697a6b0c..0eccc338 100644 --- a/hacks/pacman_level.h +++ b/hacks/pacman_level.h @@ -21,12 +21,13 @@ /* int x, y; */ /* } XY; */ -extern int createnewlevel (pacmangamestruct *); -extern int check_pos (pacmangamestruct *, int y, int x, int ghostpass); -extern int check_dot (pacmangamestruct *, unsigned int x, unsigned int y); -extern int is_bonus_dot (pacmangamestruct *, int x, int y, int *idx); -extern int bonus_dot_eaten (pacmangamestruct *, int idx); -extern void eat_bonus_dot (pacmangamestruct *, int idx); -extern void bonus_dot_pos (pacmangamestruct *, int idx, int *x, int *y); -extern void get_jail_opening (int *x, int *y); +extern int pacman_createnewlevel (pacmangamestruct *); +extern int pacman_check_pos (pacmangamestruct *, int y, int x, int ghostpass); +extern int pacman_check_dot (pacmangamestruct *, + unsigned int x, unsigned int y); +extern int pacman_is_bonus_dot (pacmangamestruct *, int x, int y, int *idx); +extern int pacman_bonus_dot_eaten (pacmangamestruct *, int idx); +extern void pacman_eat_bonus_dot (pacmangamestruct *, int idx); +extern void pacman_bonus_dot_pos (pacmangamestruct *, int idx, int *x, int *y); +extern void pacman_get_jail_opening (int *x, int *y); #endif /* __PACMAN_LEVEL_H__ */ diff --git a/hacks/penetrate.c b/hacks/penetrate.c index 721ee016..0707422b 100644 --- a/hacks/penetrate.c +++ b/hacks/penetrate.c @@ -949,6 +949,7 @@ static void penetrate_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + XClearWindow (dpy, window); } static Bool diff --git a/hacks/penrose.c b/hacks/penrose.c index eedf0fdf..6b07d8ca 100644 --- a/hacks/penrose.c +++ b/hacks/penrose.c @@ -89,7 +89,6 @@ If one of these are hit penrose will reinitialize. "*fpsSolid: true \n" \ # define refresh_penrose 0 -# define reshape_penrose 0 # define penrose_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -1329,6 +1328,14 @@ draw_penrose(ModeInfo * mi) } +ENTRYPOINT void +reshape_penrose(ModeInfo * mi, int width, int height) +{ + tiling_c *tp = &tilings[MI_SCREEN(mi)]; + tp->width = width; + tp->height = height; +} + /* Total clean-up. */ ENTRYPOINT void release_penrose(ModeInfo * mi) diff --git a/hacks/piecewise.c b/hacks/piecewise.c index 336dd512..af01a99d 100644 --- a/hacks/piecewise.c +++ b/hacks/piecewise.c @@ -940,6 +940,8 @@ static void piecewise_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + XGetWindowAttributes(st->dpy, st->window, &st->xgwa); } static Bool diff --git a/hacks/polyominoes.c b/hacks/polyominoes.c index 69c7b259..c7b84a74 100644 --- a/hacks/polyominoes.c +++ b/hacks/polyominoes.c @@ -39,7 +39,6 @@ static const char sccsid[] = "@(#)polyominoes.c 5.01 2000/12/18 xlockmore"; "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ -# define reshape_polyominoes 0 # define polyominoes_handle_event 0 # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ @@ -2351,6 +2350,13 @@ draw_polyominoes (ModeInfo * mi) sp->wait = 0; } +ENTRYPOINT void +reshape_polyominoes(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_polyominoes (mi); +} + ENTRYPOINT void release_polyominoes(ModeInfo * mi) { diff --git a/hacks/popsquares.c b/hacks/popsquares.c index 0bea52ef..15cb61b4 100644 --- a/hacks/popsquares.c +++ b/hacks/popsquares.c @@ -187,6 +187,36 @@ static void popsquares_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + int x, y; + XGetWindowAttributes (st->dpy, st->window, &st->xgwa); + st->sw = st->xgwa.width / st->subdivision; + st->sh = st->xgwa.height / st->subdivision; + st->gw = st->sw ? st->xgwa.width / st->sw : 0; + st->gh = st->sh ? st->xgwa.height / st->sh : 0; + st->nsquares = st->gw * st->gh; + free (st->squares); + st->squares = (square *) calloc (st->nsquares, sizeof(square)); + + for (y = 0; y < st->gh; y++) + for (x = 0; x < st->gw; x++) + { + square *s = (square *) &st->squares[st->gw * y + x]; + s->w = st->sw; + s->h = st->sh; + s->x = x * st->sw; + s->y = y * st->sh; + } + + randomize_square_colors(st->squares, st->nsquares, st->ncolors); + + if (st->dbuf) { + XFreePixmap (dpy, st->ba); + XFreePixmap (dpy, st->bb); + st->ba = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); + st->bb = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); + st->b = st->ba; + } } static Bool diff --git a/hacks/sierpinski.c b/hacks/sierpinski.c index dab702f2..5e7eedae 100644 --- a/hacks/sierpinski.c +++ b/hacks/sierpinski.c @@ -41,7 +41,6 @@ static const char sccsid[] = "@(#)sierpinski.c 5.00 2000/11/01 xlockmore"; "*fpsSolid: true \n" \ # define BRIGHT_COLORS -# define reshape_sierpinski 0 # define sierpinski_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -200,6 +199,13 @@ draw_sierpinski(ModeInfo * mi) startover(mi); } +ENTRYPOINT void +reshape_sierpinski(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_sierpinski (mi); +} + ENTRYPOINT void release_sierpinski(ModeInfo * mi) { diff --git a/hacks/slidescreen.c b/hacks/slidescreen.c index a44e1153..69aa10fc 100644 --- a/hacks/slidescreen.c +++ b/hacks/slidescreen.c @@ -425,6 +425,16 @@ static void slidescreen_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->max_width = w; + st->max_height = h; + if (! st->img_loader) { + XWindowAttributes xgwa; + XGetWindowAttributes (st->dpy, st->window, &xgwa); + st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, + st->window, 0, 0); + st->start_time = time ((time_t) 0); + } } static Bool diff --git a/hacks/speedmine.c b/hacks/speedmine.c index 96a880e5..5c67082d 100644 --- a/hacks/speedmine.c +++ b/hacks/speedmine.c @@ -1538,6 +1538,16 @@ static void speedmine_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->width = w; + st->height = h; + if (st->dbuf != st->window) { + XWindowAttributes xgwa; + XGetWindowAttributes (st->dpy, st->window, &xgwa); + XFreePixmap (dpy, st->dbuf); + st->dbuf = XCreatePixmap (st->dpy, st->window, + st->width, st->height, xgwa.depth); + } } static Bool diff --git a/hacks/squiral.c b/hacks/squiral.c index 7dff6d8a..2a0b0fd2 100644 --- a/hacks/squiral.c +++ b/hacks/squiral.c @@ -107,6 +107,28 @@ do_worm(struct state *st, struct worm *w) w->v = w->v % st->height; } +static void +squiral_init_1 (struct state *st) +{ + int i; + if (st->worms) free (st->worms); + if (st->fill) free (st->fill); + + st->worms=calloc(st->count, sizeof(struct worm)); + st->fill=calloc(st->width*st->height, sizeof(int)); + + st->dirh[0]=0; st->dirh[1]=1; st->dirh[2]=0; st->dirh[3]=st->width-1; + st->dirv[0]=st->height-1; st->dirv[1]=0; st->dirv[2]=1; st->dirv[3]=0; + for(i=0;icount;i++) { + st->worms[i].h=R(st->width); + st->worms[i].v=R(st->height); + st->worms[i].s=R(4)+4*PROB(st->handedness); + st->worms[i].c=R(st->ncolors); + if(st->cycle) { st->worms[i].cc=R(3)+st->ncolors; } + else st->worms[i].cc=0; + } +} + static void * squiral_init (Display *dpy, Window window) { @@ -115,7 +137,6 @@ squiral_init (Display *dpy, Window window) Colormap cmap; XWindowAttributes xgwa; Bool writeable = False; - int i; st->dpy = dpy; st->window = window; @@ -167,19 +188,7 @@ squiral_init (Display *dpy, Window window) if(st->worms) free(st->worms); if(st->fill) free(st->fill); - st->worms=calloc(st->count, sizeof(struct worm)); - st->fill=calloc(st->width*st->height, sizeof(int)); - - st->dirh[0]=0; st->dirh[1]=1; st->dirh[2]=0; st->dirh[3]=st->width-1; - st->dirv[0]=st->height-1; st->dirv[1]=0; st->dirv[2]=1; st->dirv[3]=0; - for(i=0;icount;i++) { - st->worms[i].h=R(st->width); - st->worms[i].v=R(st->height); - st->worms[i].s=R(4)+4*PROB(st->handedness); - st->worms[i].c=R(st->ncolors); - if(st->cycle) { st->worms[i].cc=R(3)+st->ncolors; } - else st->worms[i].cc=0; - } + squiral_init_1 (st); return st; } @@ -219,6 +228,11 @@ static void squiral_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->width = w; + st->height = h; + squiral_init_1 (st); + XClearWindow (dpy, window); } static Bool diff --git a/hacks/starfish.c b/hacks/starfish.c index 2ba693c0..071dccb6 100644 --- a/hacks/starfish.c +++ b/hacks/starfish.c @@ -493,6 +493,10 @@ static void starfish_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + free_starfish (st->starfish); + st->starfish = 0; + st->starfish = reset_starfish (st); } static Bool diff --git a/hacks/strange.c b/hacks/strange.c index eba88a90..604f471b 100644 --- a/hacks/strange.c +++ b/hacks/strange.c @@ -42,7 +42,6 @@ static const char sccsid[] = "@(#)strange.c 5.00 2000/11/01 xlockmore"; # define SMOOTH_COLORS # define refresh_strange 0 -# define reshape_strange 0 # define strange_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -142,7 +141,7 @@ typedef struct _ATTRACTOR { static ATTRACTOR *Root = (ATTRACTOR *) NULL; #ifdef useAccumulator -XColor* cols; +static XColor* cols; #endif #ifdef POINTS_HISTORY @@ -663,6 +662,13 @@ init_strange(ModeInfo * mi) XSetGraphicsExposures(display, MI_GC(mi), False); } +ENTRYPOINT void +reshape_strange(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_strange (mi); +} + /***************************************************************/ ENTRYPOINT void diff --git a/hacks/swirl.c b/hacks/swirl.c index 5a3d97a2..ba959ac6 100644 --- a/hacks/swirl.c +++ b/hacks/swirl.c @@ -38,7 +38,6 @@ static const char sccsid[] = "@(#)swirl.c 4.00 97/01/01 xlockmore"; # define SMOOTH_COLORS # define WRITABLE_COLORS -# define reshape_swirl 0 # define swirl_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ # ifdef HAVE_XSHM_EXTENSION @@ -1433,6 +1432,13 @@ draw_swirl(ModeInfo * mi) } } +ENTRYPOINT void +reshape_swirl(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_swirl (mi); +} + /****************************************************************/ ENTRYPOINT void diff --git a/hacks/thornbird.c b/hacks/thornbird.c index e074ab82..e7bbf6dd 100644 --- a/hacks/thornbird.c +++ b/hacks/thornbird.c @@ -38,7 +38,6 @@ static const char sccsid[] = "@(#)thornbird.c 5.00 2000/11/01 xlockmore"; "*fpsSolid: true \n" \ # define BRIGHT_COLORS -# define reshape_thornbird 0 # define thornbird_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -250,6 +249,13 @@ draw_thornbird(ModeInfo * mi) hp->inc++; } +ENTRYPOINT void +reshape_thornbird(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_thornbird (mi); +} + ENTRYPOINT void release_thornbird(ModeInfo * mi) { diff --git a/hacks/triangle.c b/hacks/triangle.c index 48a8b20d..1a93de25 100644 --- a/hacks/triangle.c +++ b/hacks/triangle.c @@ -51,7 +51,6 @@ static const char sccsid[] = "@(#)triangle.c 4.04 97/07/28 xlockmore"; "*fpsSolid: true \n" \ # define SMOOTH_COLORS -# define reshape_triangle 0 # define triangle_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ @@ -345,6 +344,13 @@ draw_triangle (ModeInfo * mi) } } +ENTRYPOINT void +reshape_triangle(ModeInfo * mi, int width, int height) +{ + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); + init_triangle (mi); +} + ENTRYPOINT void release_triangle(ModeInfo * mi) { diff --git a/hacks/truchet.c b/hacks/truchet.c index b23b081d..f21e5599 100644 --- a/hacks/truchet.c +++ b/hacks/truchet.c @@ -508,6 +508,10 @@ static void truchet_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->width = w; + st->height = h; + XGetWindowAttributes (st->dpy, st->window, &st->xgwa); } static Bool diff --git a/hacks/vermiculate.c b/hacks/vermiculate.c index b96d3dc8..d1ef5719 100644 --- a/hacks/vermiculate.c +++ b/hacks/vermiculate.c @@ -807,6 +807,11 @@ static void vermiculate_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->wid = w; + st->hei = h; + free (st->point); + st->point = (unsigned char *) calloc (1, st->wid * st->hei); } static Bool diff --git a/hacks/wander.c b/hacks/wander.c index 6b8819a9..8fa8995a 100644 --- a/hacks/wander.c +++ b/hacks/wander.c @@ -210,6 +210,11 @@ static void wander_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->width = w / st->size; + st->height = h / st->size; + st->width_1 = st->width - 1; + st->height_1 = st->height - 1; } static Bool diff --git a/hacks/whirlwindwarp.c b/hacks/whirlwindwarp.c index 47939ffe..566c4187 100644 --- a/hacks/whirlwindwarp.c +++ b/hacks/whirlwindwarp.c @@ -463,6 +463,9 @@ static void whirlwindwarp_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->scrwid = w; + st->scrhei = h; } static Bool diff --git a/hacks/xlyap.c b/hacks/xlyap.c index cfc4f5a5..02587f00 100644 --- a/hacks/xlyap.c +++ b/hacks/xlyap.c @@ -1237,7 +1237,6 @@ EndRubberBand(struct state *st, image_data_t *data, XEvent *event) data->p_min += diff * delta; delta = (double)(st->width - bot.x) / (double)st->width; data->p_max -= diff * delta; - fflush(stdout); set_new_params(st, data); } diff --git a/hacks/xrayswarm.c b/hacks/xrayswarm.c index 9b9faef7..f3b81848 100644 --- a/hacks/xrayswarm.c +++ b/hacks/xrayswarm.c @@ -1196,6 +1196,12 @@ static void xrayswarm_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { + struct state *st = (struct state *) closure; + st->xsize = w; + st->ysize = h; + st->xc = st->xsize >> 1; + st->yc = st->ysize >> 1; + st->maxy = st->ysize/(float)st->xsize; } static Bool diff --git a/po/Makefile.in.in b/po/Makefile.in.in index 4b2ebc3c..735634f4 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -368,7 +368,8 @@ POTFILES: POTFILES.in && chmod a-w $@-t \ && mv $@-t $@ ) -Makefile: stamp-it +# jwz: depending on stamp-it breaks distclean. +Makefile: @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ diff --git a/po/POTFILES.in b/po/POTFILES.in index 2adfd34e..7743e54c 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,4 +1,4 @@ -# Auto-generated: Sun May 20 16:02:50 PDT 2012 +# Auto-generated: Tue Jul 3 14:23:31 PDT 2012 driver/demo-Gtk-conf.c driver/demo-Gtk-support.c driver/demo-Gtk-widgets.c diff --git a/utils/Makefile.in b/utils/Makefile.in index 95ce08a7..f6cc10b7 100644 --- a/utils/Makefile.in +++ b/utils/Makefile.in @@ -249,6 +249,7 @@ grabclient.o: $(srcdir)/grabscreen.h grabclient.o: $(srcdir)/resources.h grabclient.o: $(srcdir)/utils.h grabclient.o: $(srcdir)/vroot.h +grabclient.o: $(srcdir)/yarandom.h grabscreen.o: $(srcdir)/colors.h grabscreen.o: ../config.h grabscreen.o: $(srcdir)/grabscreen.h diff --git a/utils/grabclient.c b/utils/grabclient.c index a0a19f34..58d506ef 100644 --- a/utils/grabclient.c +++ b/utils/grabclient.c @@ -21,6 +21,7 @@ #include "utils.h" #include "grabscreen.h" #include "resources.h" +#include "yarandom.h" #ifdef HAVE_COCOA # include "jwxyz.h" @@ -511,6 +512,21 @@ load_random_image_1 (Screen *screen, Window window, Drawable drawable, #else /* HAVE_COCOA */ +struct pipe_closure { + FILE *pipe; + XtInputId id; + Screen *screen; + Window xwindow; + Drawable drawable; + char *directory; + void (*callback) (Screen *, Window, Drawable, + const char *name, XRectangle *geom, + void *closure); + void *closure; +}; + +# ifndef USE_IPHONE + /* Gets the name of an image file to load by running xscreensaver-getimage-file at the end of a pipe. This can be very slow! */ @@ -539,20 +555,6 @@ open_image_name_pipe (const char *dir) } -struct pipe_closure { - FILE *pipe; - XtInputId id; - Screen *screen; - Window xwindow; - Drawable drawable; - char *directory; - void (*callback) (Screen *, Window, Drawable, - const char *name, XRectangle *geom, - void *closure); - void *closure; -}; - - static void pipe_cb (XtPointer closure, int *source, XtInputId *id) { @@ -626,6 +628,51 @@ pipe_cb (XtPointer closure, int *source, XtInputId *id) } +# else /* USE_IPHONE */ + +/* Callback for ios_load_random_image(), called after we have loaded an + image from the iOS device's Photo Library. See iosgrabimage.m. + */ +static void +ios_load_random_image_cb (void *uiimage, const char *filename, void *closure) +{ + struct pipe_closure *clo2 = (struct pipe_closure *) closure; + Display *dpy = DisplayOfScreen (clo2->screen); + XRectangle geom; + + if (uiimage) + { + jwxyz_draw_NSImage_or_CGImage (DisplayOfScreen (clo2->screen), + clo2->drawable, + True, uiimage, &geom, + 0); + } + else /* Probably means no images in the gallery. */ + { + XWindowAttributes xgwa; + Window r; + int x, y; + unsigned int w, h, bbw, d; + XGetWindowAttributes (dpy, clo2->xwindow, &xgwa); + XGetGeometry (dpy, clo2->drawable, &r, &x, &y, &w, &h, &bbw, &d); + draw_colorbars (clo2->screen, xgwa.visual, clo2->drawable, xgwa.colormap, + 0, 0, w, h); + geom.x = geom.y = 0; + geom.width = w; + geom.height = h; + filename = 0; + } + + clo2->callback (clo2->screen, clo2->xwindow, clo2->drawable, + filename, &geom, clo2->closure); + clo2->callback = 0; + if (clo2->directory) free (clo2->directory); + free (clo2); +} + +# endif /* USE_IPHONE */ + + static void osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable, const char *dir, @@ -635,7 +682,7 @@ osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable, void *closure), void *closure) { -#if 0 /* do it synchronously */ +# if 0 /* do it synchronously */ FILE *pipe = open_image_name_pipe (dir); char buf[10240]; @@ -655,22 +702,29 @@ osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable, } callback (screen, xwindow, drawable, buf, &geom, closure); -#else /* do it asynchronously */ +# else /* do it asynchronously */ - Display *dpy = DisplayOfScreen (screen); struct pipe_closure *clo2 = (struct pipe_closure *) calloc (1, sizeof(*clo2)); - clo2->directory = strdup (dir); - clo2->pipe = open_image_name_pipe (dir); - clo2->id = XtAppAddInput (XtDisplayToApplicationContext (dpy), - fileno (clo2->pipe), - (XtPointer) (XtInputReadMask | XtInputExceptMask), - pipe_cb, (XtPointer) clo2); + clo2->screen = screen; clo2->xwindow = xwindow; clo2->drawable = drawable; clo2->callback = callback; clo2->closure = closure; -#endif + +# ifndef USE_IPHONE + clo2->directory = strdup (dir); + clo2->pipe = open_image_name_pipe (dir); + clo2->id = XtAppAddInput (XtDisplayToApplicationContext ( + DisplayOfScreen (screen)), + fileno (clo2->pipe), + (XtPointer) (XtInputReadMask | XtInputExceptMask), + pipe_cb, (XtPointer) clo2); +# else /* USE_IPHONE */ + ios_load_random_image (ios_load_random_image_cb, clo2); +# endif /* USE_IPHONE */ + +# endif } @@ -694,14 +748,6 @@ load_random_image_1 (Screen *screen, Window window, Drawable drawable, XRectangle geom_ret_2; char *name_ret_2 = 0; -# ifdef USE_IPHONE - /* Currently, only screen-grabbing is implemented, not loading of - images from the iPhone Photo Library. See osxgrabscreen.m. - */ - deskp = True; - filep = False; -# endif - if (!drawable) abort(); if (callback) { @@ -729,11 +775,13 @@ load_random_image_1 (Screen *screen, Window window, Drawable drawable, geom_ret->height = xgwa.height; } +# ifndef USE_IPHONE if (filep) dir = get_string_resource (dpy, "imageDirectory", "ImageDirectory"); if (!dir || !*dir) filep = False; +# endif /* ! USE_IPHONE */ if (deskp && filep) { deskp = !(random() & 5); /* if both, desktop 1/5th of the time */ diff --git a/utils/grabscreen.h b/utils/grabscreen.h index 97c46a77..65e53412 100644 --- a/utils/grabscreen.h +++ b/utils/grabscreen.h @@ -92,4 +92,11 @@ extern Bool osx_load_image_file (Screen *, Window, Drawable, const char *filename, XRectangle *geom_ret); #endif /* HAVE_COCOA */ +#ifdef USE_IPHONE +extern void ios_load_random_image (void (*callback) (void *uiimage, + const char *filename, + void *closure), + void *closure); +#endif /* USE_IPHONE */ + #endif /* __GRABSCREEN_H__ */ diff --git a/utils/version.h b/utils/version.h index f00788c9..ea951e2a 100644 --- a/utils/version.h +++ b/utils/version.h @@ -1,2 +1,2 @@ static const char screensaver_id[] = - "@(#)xscreensaver 5.17 (22-Jun-2012), by Jamie Zawinski (jwz@jwz.org)"; + "@(#)xscreensaver 5.18 (03-Jul-2012), by Jamie Zawinski (jwz@jwz.org)"; diff --git a/xscreensaver.spec b/xscreensaver.spec index 920a05cd..bf8bb562 100644 --- a/xscreensaver.spec +++ b/xscreensaver.spec @@ -1,5 +1,5 @@ %define name xscreensaver -%define version 5.17 +%define version 5.18 Summary: X screen saver and locker Name: %{name} diff --git a/xscreensaver.xcodeproj/project.pbxproj b/xscreensaver.xcodeproj/project.pbxproj index a167009f..bd824ab8 100644 --- a/xscreensaver.xcodeproj/project.pbxproj +++ b/xscreensaver.xcodeproj/project.pbxproj @@ -346,6 +346,7 @@ AF0FAF2709CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2809CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2909CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; + AF0FAF3C159BAC7C00BCE2F7 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF1A17660D6D6EE3008AF328 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF1A17680D6D6EE3008AF328 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */; }; @@ -1285,6 +1286,8 @@ AF35E8900E63823600691F2F /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF35EB240E63829600691F2F /* jigsaw.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CF0988A468000655EE /* jigsaw.xml */; }; AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35EB250E6382BA00691F2F /* jigsaw.c */; }; + AF39483E15A164680000FFCD /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35EB250E6382BA00691F2F /* jigsaw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CF0988A468000655EE /* jigsaw.xml */; }; AF3C714B0D624BF50030CC0D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF3C715E0D624C600030CC0D /* hypnowheel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3C715D0D624C600030CC0D /* hypnowheel.c */; }; AF3C71600D624C7C0030CC0D /* hypnowheel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */; }; @@ -1496,6 +1499,8 @@ AF51FD4115845FFC00E5741F /* iSaverRunner72.png in Resources */ = {isa = PBXBuildFile; fileRef = AF01295D157D5C2C00C396E1 /* iSaverRunner72.png */; }; AF51FD4215845FFF00E5741F /* iSaverRunner114.png in Resources */ = {isa = PBXBuildFile; fileRef = AF01295E157D5C2C00C396E1 /* iSaverRunner114.png */; }; AF51FD431584600300E5741F /* iSaverRunner114.png in Resources */ = {isa = PBXBuildFile; fileRef = AF01295E157D5C2C00C396E1 /* iSaverRunner114.png */; }; + AF561DF615969BC3007CA5ED /* iosgrabimage.m in Sources */ = {isa = PBXBuildFile; fileRef = AF561DF515969BC3007CA5ED /* iosgrabimage.m */; }; + AF561DF815969C5B007CA5ED /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6048F8157C07C600CA21E4 /* jwzgles.c */; }; AF6048FC157C07C600CA21E4 /* jwzgles.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6048F9157C07C600CA21E4 /* jwzgles.h */; }; AF6048FD157C07C600CA21E4 /* jwzglesI.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6048FA157C07C600CA21E4 /* jwzglesI.h */; }; @@ -2401,6 +2406,11 @@ AFC75930158D9A7A00C5458E /* iostextclient.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592F158D9A7A00C5458E /* iostextclient.m */; }; AFCCCBB009BFE4B000353F4D /* rdbomb.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */; }; AFCCCBB309BFE51900353F4D /* thornbird.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259230988A469000655EE /* thornbird.xml */; }; + AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77787609B653DC00EA3033 /* dnalogo.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFCF453815986A3000E6E8CC /* dnalogo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF77787909B6545E00EA3033 /* dnalogo.xml */; }; + AFCF4545159878C300E6E8CC /* polyhedra-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B209937DCB00F3E977 /* polyhedra-gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFCF4546159878C300E6E8CC /* polyhedra.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B309937DCC00F3E977 /* polyhedra.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFCF4547159878D500E6E8CC /* polyhedra.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F70988A469000655EE /* polyhedra.xml */; }; AFCFF1D90CE4517C00C7D111 /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFCFF1DA0CE4518B00C7D111 /* tube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480ED2098F652A00FB32B8 /* tube.c */; }; AFCFF1DB0CE451A300C7D111 /* normals.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A93099336D800F3E977 /* normals.c */; }; @@ -5804,6 +5814,7 @@ AF0F46DC104E1809000A929C /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.perl; name = "xscreensaver-text"; path = "driver/xscreensaver-text"; sourceTree = ""; }; AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.perl; name = "xscreensaver-getimage-file"; path = "driver/xscreensaver-getimage-file"; sourceTree = ""; }; + AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; AF14EE300E3CEF1A004CBBD2 /* XScreenSaver.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = XScreenSaver.icns; path = OSX/XScreenSaver.icns; sourceTree = ""; }; AF1A17730D6D6EE3008AF328 /* XScreenSaver.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = XScreenSaver.saver; path = LCDscrub.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lcdscrub.c; path = hacks/lcdscrub.c; sourceTree = ""; }; @@ -5989,6 +6000,9 @@ AF4FF4D00D52CC8400666F98 /* cubicgrid.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubicgrid.c; path = hacks/glx/cubicgrid.c; sourceTree = ""; }; AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubicgrid.xml; sourceTree = ""; }; AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = iSaverRunner.xib; path = OSX/iSaverRunner.xib; sourceTree = ""; }; + AF561DF3159651A7007CA5ED /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + AF561DF515969BC3007CA5ED /* iosgrabimage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iosgrabimage.m; path = OSX/iosgrabimage.m; sourceTree = ""; }; + AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/AssetsLibrary.framework; sourceTree = DEVELOPER_DIR; }; AF6048F8157C07C600CA21E4 /* jwzgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jwzgles.c; path = hacks/glx/jwzgles.c; sourceTree = ""; }; AF6048F9157C07C600CA21E4 /* jwzgles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzgles.h; path = hacks/glx/jwzgles.h; sourceTree = ""; }; AF6048FA157C07C600CA21E4 /* jwzglesI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzglesI.h; path = hacks/glx/jwzglesI.h; sourceTree = ""; }; @@ -7719,8 +7733,10 @@ AF918B96158FD0EA002B5D1E /* libjwxyz.a in Frameworks */, AFEB9C3B1590054B003974F3 /* OpenGLES.framework in Frameworks */, AFEB9C3915900514003974F3 /* UIKit.framework in Frameworks */, + AF561DF815969C5B007CA5ED /* AssetsLibrary.framework in Frameworks */, AFEB9C3D15900558003974F3 /* Foundation.framework in Frameworks */, AFEB9C401590056A003974F3 /* CoreGraphics.framework in Frameworks */, + AF0FAF3C159BAC7C00BCE2F7 /* CoreText.framework in Frameworks */, AFEB9C411590056A003974F3 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -9138,6 +9154,7 @@ 080E96DDFE201D6D7F000001 /* libjwxyz */ = { isa = PBXGroup; children = ( + AF561DF515969BC3007CA5ED /* iosgrabimage.m */, AFC7592F158D9A7A00C5458E /* iostextclient.m */, AFE1FD410981E32E00F7970E /* InvertedSlider.h */, AFE1FD420981E32E00F7970E /* InvertedSlider.m */, @@ -9397,7 +9414,6 @@ 29B97314FDCFA39411CA2CEA /* xscreensaver */ = { isa = PBXGroup; children = ( - AF7E080315932A1600D81407 /* iSaverRunner29t.png */, AF480AB9098C66E200FB32B8 /* SaverRunner */, 080E96DDFE201D6D7F000001 /* libjwxyz */, AFE1FD520981E35400F7970E /* Utils */, @@ -9419,6 +9435,7 @@ AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */, AF2D522513E954A0002AA818 /* SaverRunner.icns */, AF01295A157D5C2C00C396E1 /* iSaverRunner29.png */, + AF7E080315932A1600D81407 /* iSaverRunner29t.png */, AF01295B157D5C2C00C396E1 /* iSaverRunner50.png */, AF01295C157D5C2C00C396E1 /* iSaverRunner57.png */, AF01295D157D5C2C00C396E1 /* iSaverRunner72.png */, @@ -9442,6 +9459,9 @@ AFEB9C3815900514003974F3 /* UIKit.framework */, AF0F46DC104E1809000A929C /* AppKit.framework */, AF976ED30989BF59001F8B92 /* ScreenSaver.framework */, + AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */, + AF561DF3159651A7007CA5ED /* AudioToolbox.framework */, + AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, AF480DF1098F528500FB32B8 /* OpenGL.framework */, AF480FE70990375900FB32B8 /* AGL.framework */, @@ -15737,6 +15757,7 @@ buildActionMask = 2147483647; files = ( AF91897E158FC00A002B5D1E /* iSaverRunner29.png in Resources */, + AF7E080415932A1600D81407 /* iSaverRunner29t.png in Resources */, AF91897F158FC00A002B5D1E /* iSaverRunner50.png in Resources */, AF918980158FC00A002B5D1E /* iSaverRunner57.png in Resources */, AF918981158FC00A002B5D1E /* iSaverRunner72.png in Resources */, @@ -15791,6 +15812,7 @@ AF918AE5158FC53D002B5D1E /* demon.xml in Resources */, AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */, AF918AE7158FC53D002B5D1E /* distort.xml in Resources */, + AFCF453815986A3000E6E8CC /* dnalogo.xml in Resources */, AF918AE9158FC53D002B5D1E /* drift.xml in Resources */, AF918AEA158FC53D002B5D1E /* endgame.xml in Resources */, AF918AEB158FC53D002B5D1E /* engine.xml in Resources */, @@ -15839,6 +15861,7 @@ AF918B1D158FC53D002B5D1E /* interference.xml in Resources */, AF918B1E158FC53D002B5D1E /* intermomentary.xml in Resources */, AF918B1F158FC53D002B5D1E /* jigglypuff.xml in Resources */, + AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */, AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */, AF918B23158FC53D002B5D1E /* julia.xml in Resources */, AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */, @@ -15874,6 +15897,7 @@ AF918B4A158FC53E002B5D1E /* piecewise.xml in Resources */, AF918B4B158FC53E002B5D1E /* pinion.xml in Resources */, AF918B4C158FC53E002B5D1E /* pipes.xml in Resources */, + AFCF4547159878D500E6E8CC /* polyhedra.xml in Resources */, AF918B4E158FC53E002B5D1E /* polyominoes.xml in Resources */, AF918B4F158FC53E002B5D1E /* polytopes.xml in Resources */, AF918B50158FC53E002B5D1E /* pong.xml in Resources */, @@ -15933,7 +15957,6 @@ AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */, AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */, AF918B91158FC554002B5D1E /* zoom.xml in Resources */, - AF7E080415932A1600D81407 /* iSaverRunner29t.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -22508,6 +22531,7 @@ AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */, AFC7592D158D8E8B00C5458E /* textclient.c in Sources */, AFC75930158D9A7A00C5458E /* iostextclient.m in Sources */, + AF561DF615969BC3007CA5ED /* iosgrabimage.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -23008,6 +23032,7 @@ AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */, AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */, AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */, + AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */, AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */, AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */, AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */, @@ -23038,6 +23063,7 @@ AF918A6C158FC3E5002B5D1E /* hypnowheel.c in Sources */, AF918A6D158FC3E5002B5D1E /* involute.c in Sources */, AF918A6E158FC417002B5D1E /* jigglypuff.c in Sources */, + AF39483E15A164680000FFCD /* jigsaw.c in Sources */, AF918A6F158FC417002B5D1E /* juggler3d.c in Sources */, AF918A70158FC417002B5D1E /* klein.c in Sources */, AF918A71158FC417002B5D1E /* lament.c in Sources */, @@ -23054,6 +23080,8 @@ AF918A7D158FC417002B5D1E /* pinion.c in Sources */, AF918A7E158FC417002B5D1E /* pipeobjs.c in Sources */, AF918A7F158FC417002B5D1E /* pipes.c in Sources */, + AFCF4545159878C300E6E8CC /* polyhedra-gl.c in Sources */, + AFCF4546159878C300E6E8CC /* polyhedra.c in Sources */, AF918A82158FC417002B5D1E /* polytopes.c in Sources */, AF918A83158FC417002B5D1E /* providence.c in Sources */, AF918A84158FC417002B5D1E /* pulsar.c in Sources */, @@ -27851,6 +27879,7 @@ SDKROOT = macosx; "SDKROOT[arch=armv6]" = iphoneos; "SDKROOT[arch=armv7]" = iphoneos; + SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7"; }; @@ -27868,6 +27897,7 @@ SDKROOT = macosx; "SDKROOT[arch=armv6]" = iphoneos; "SDKROOT[arch=armv7]" = iphoneos; + SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7"; }; @@ -29021,7 +29051,7 @@ GCC_THUMB_SUPPORT = NO; INFOPLIST_FILE = OSX/iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; - IPHONEOS_DEPLOYMENT_TARGET = 3.0; + IPHONEOS_DEPLOYMENT_TARGET = 4.2; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; @@ -29052,7 +29082,7 @@ GCC_THUMB_SUPPORT = NO; INFOPLIST_FILE = OSX/iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; - IPHONEOS_DEPLOYMENT_TARGET = 3.0; + IPHONEOS_DEPLOYMENT_TARGET = 4.2; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = "6713E214-60AD-43CF-AFD3-825AEB87AA75"; SDKROOT = iphoneos; @@ -32704,6 +32734,7 @@ "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", + "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", @@ -32762,6 +32793,7 @@ "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", + "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", -- 2.30.2